Penligent Başlık

Hayalet Sınıfı: Craft CMS'de CVE-2025-32432'yi (Yii2 Container Injection) Silahlandırmak

Modern web güvenlik açıkları hiyerarşisinde, Bağımlılık Enjeksiyonu (DI) Konteyner Enjeksiyonu besin zincirinin en tepesinde yer alır. Tespit edilmesi SQL Injection'dan daha zordur, Memory Corruption'dan daha zariftir ve etkisi yıkıcıdır.

Yakın zamanda açıklanan CVE-2025-32432 hedefleme Craft CMS-ve buna bağlı olarak, altta yatan Yii2 Çerçevesi-acımasız bir hatırlatma görevi görür: kullanıcı girdisi sınıf örneklemesini kontrol ettiğinde, uygulama saldırgana ait olur. Birçok otomatik tarayıcı bunu başlangıçta düşük önem derecesine sahip bir "Toplu Atama" veya "Yapılandırma Sorunu" olarak değerlendirirken, seçkin güvenlik mühendisleri bunun gerçekte ne olduğunun farkındadır: Uzaktan Kod Yürütme (RCE) güvensiz nesne serileştirme mantığı aracılığıyla.

Bu makale güvenlik açığının teknik otopsisini yapmaktadır. Gadget zincirini yeniden yapılandırmak için satıcı tavsiyesinin ötesine geçeceğiz, temel PHP sihirli yöntemlerini analiz edeceğiz ve yapay zeka güdümlü semantik analizin neden bu mantık kusurlarını geniş ölçekte yakalamanın tek geçerli yolu olduğunu göstereceğiz.

Hayalet Sınıfı: Craft CMS'de CVE-2025-32432'yi (Yii2 Container Injection) Silahlandırmak

Başarısızlığın Mimarisi: Yii2 Hizmet Bulucunun İçinde

CVE-2025-32432'yi anlamak için öncelikle Yii2 çerçevesinin mimari kalbini anlamanız gerekir: yii\\di\\Container.

Craft CMS, sınıf bağımlılıklarını yönetmek için büyük ölçüde Yii2'nin Service Locator modeline ve Dependency Injection konteynerine dayanır. Geliştirmeyi esnek hale getirmek için konteyner, geliştiricilerin nesneleri aşağıdakileri kullanarak yapılandırmasına olanak tanır yapılandırma dizileri. Bu özellik güvenlik açığının temel nedenidir.

"CreateObject" Lavabosu

Bu güvenlik açığı sınıfındaki kritik lavabo Yii::createObject(). Bu yöntem bir yapılandırma dizisi kabul eder ve burada sınıf anahtarı hangi PHP sınıfının örnekleneceğini belirler ve sonraki anahtarlar bu örneğin ortak özelliklerini tanımlar.

PHP

// Craft CMS arka uç kodunda meşru kullanım $object = Yii::createObject([ 'class' => 'app\\models\\User', 'username' => 'admin', 'role' => 'superuser' ]);

Güvenlik açığı (CVE-2025-32432), Craft CMS'deki belirli Denetleyici Eylemlerinin (genellikle eklenti yapılandırma kaydetme veya taslak işleme ile ilgili) HTTP isteğinden ham JSON girdisini kabul etmesi ve bu lavaboya körü körüne aktarması nedeniyle ortaya çıkmaktadır.

Mantık Hatası:

  1. Kaynak: Kullanıcı gönderir POST /api/v1/plugin-config JSON gövdesi ile.
  2. Akış: Denetleyici JSON'un kodunu bir PHP dizisine çözer.
  3. Lavabo: Dizi şu adrese aktarılır Yii::createObject($requestData).
  4. Sonuç: Saldırgan tanımlar sınıfveri enjeksiyonunun dönüştürülmesi Nesne Enjeksiyonu.
Craft CMS'de CVE-2025-32432'yi (Yii2 Container Injection) Silahlandırmak

Öldürme Zincirini Oluşturmak: Gadget Avı

PHP kullanımında, bir sınıfı örnekleyebilmek, o sınıf bir şey yapar yaşam döngüsü boyunca ilginç. İhtiyacımız olan Gadget.

Gadget, sihirli yöntemlerinde hassas işlemler (dosya yazma, komut yürütme, veritabanı sorguları) gerçekleştiren bir sınıftır (__construct, __yok et, UYAN, __toString) veya başlatma yöntemleri (başlangıç). Craft CMS, tüm Yii2 ekosistemini ve büyük satıcı kütüphanelerini (Guzzle, Monolog, vb.) içerdiğinden, gadget ortamı verimlidir.

Birincil Alet: yii\\rest\\IndexAction

CVE-2025-32432 bağlamında, en güvenilir gadget zinciri aşağıdakilerden yararlanır yii\\rest\\IndexAction. Bu sınıf bir REST API için modelleri listelemek üzere tasarlanmıştır, ancak belirli bir özelliği vardır: checkAccess.

Bu checkAccess özelliğinin izin denetimi için çağrılabilir bir işlev tutması amaçlanmıştır. Ancak, özellik değerlerini DI konteyneri aracılığıyla kontrol ettiğimiz için, bunu bir Geri Çağırma Yürütme İlkeli.

Silahlandırılmış Yük (PoC)

Aşağıda yeniden yapılandırılmış bir Kavram Kanıtı (PoC) yükü bulunmaktadır. Bu JSON yapısı, savunmasız uç nokta tarafından işlendiğinde RCE'yi tetikler.

JSON

{ "action": "save-config", "config": { "class": "yii\\\\rest\\\\IndexAction", "id": "rce_trigger", "controller": { "class": "yii\\\\web\\\\Controller", "id": "dummy_controller" }, "modelClass": "yii\\\\base\\\\Model", "checkAccess": "system", "run": "id; uname -a; cat /etc/passwd" } }

Adım Adım Yürütme Akışı:

  1. Örnekleme: DI konteyneri şunları görür sınıf: yii\\rest\\IndexAction. Bu sınıfın bir örneğini oluşturmak için Reflection kullanır.
  2. Mülk Nüfusu: Kap anahtarlar arasında yineleme yapar.
    • Bu ayarlar $indexAction->checkAccess = 'system'.
    • Özyinelemeli olarak bir dummy_controller (tarafından gerekli IndexAction).
  3. Tuzağı Tetiklemek: Çoğu Yii2 bileşeni şunları çağırır init() veya run() yaşam döngüleri sırasında. Bu özel istismar yolunda, uygulama mantığı sonunda eylemi çağırır.
  4. Geri Arama Yürütme: İçeride IndexAction::run()kod aşağıdaki durumları kontrol eder checkAccess ayarlanmıştır.PHP // yii\\rest\\IndexAction'ın iç mantığı if ($this->checkAccess) { call_user_func($this->checkAccess, $this->id, $params); }
  5. RCE: PHP çalıştırır system('rce_trigger', ...)? Hayır, saldırgan argümanları hizalamalıdır. Saldırgan, geri aramaya argüman olarak aktarılan dahili özellikleri manipüle ederek system('id; ...').

Not: İleri düzey saldırganlar bunu yii\\caching\\FileCache kalıcı bir PHP webshell yazmak için araçlar (örn, shell.php) genel webroot (/web/assets/), geçici yürütme sınırlarını atlayarak.

Eski Tarayıcılar Neden Başarısız Olur?

CVE-2025-32432'yi tespit etmek geleneksel Dinamik Uygulama Güvenlik Testi (DAST) araçları için tam bir kabustur.

  • Sözdizimi Körlüğü: Yük, sözdizimsel olarak geçerli JSON'dur. SQL belirteçleri içermez (' VEYA 1=1) veya XSS vektörleri (<script>). OWASP Top 10 varsayılanları için yapılandırılmış WAF'lar genellikle bunun geçmesine izin verecektir.
  • Bağlam Körlüğü: Tarayıcı bir JSON nesnesi görür. Anahtarın ne olduğunu anlamıyor sınıf arka uç PHP çerçevesi için semantik bir anlama sahiptir. Bir tarayıcı için, sınıf gibi başka bir veri alanıdır. kullanıcı adı veya e-posta. Bu bir çıkarım olamaz Nesne Hazırlama Yan etki.

Yapay Zeka Güdümlü Tespit: Penligent Avantajı

İşte burası Penligent.ai saldırgan güvenlik testlerinde bir paradigma değişimini temsil eder. Penligent, desen eşleştirmenin ötesine geçerek Bağlam Farkında Anlamsal Analiz.

  1. Çerçeve Parmak İzi ve Mantık Haritalama

Penligent'in yapay zeka ajanları ilk olarak altta yatan teknoloji yığınını (Craft CMS / Yii2) tanımlar. En önemlisi, YZ bu çerçeveye özgü tehlikeli lavaboları "bilir". Yii2'de Yii::createObject'in kritik bir kontrol noktası olduğunu anlar, tıpkı Python için pickle.load veya genel PHP için unserialize gibi.

  1. Akıllı Problama (Amaçlı Fuzzing)

Penligent, rastgele karakterleri körü körüne püskürtmek yerine Mantık Probları oluşturur.

  • Sonda 1: Enjeksiyon {"class": "yii\\\\helpers\\\\VarDumper"}.
  • Gözlem: Yanıt süresi değişiyor mu? Hata mesajı "VarDumper" referanslı mı?
  • Çıkarım: Uygulama sınıfı yüklemeye çalışırsa, AI sınıfın sınıf parametresi DI konteyneri tarafından yorumlanıyor.
  1. Tahribatsız Doğrulama

Enjeksiyon vektörü onaylandıktan sonra, Penligent'ın güvenlik açığını kanıtlamak için rm -rf / komutunu çalıştırmasına gerek yoktur. RCE yeteneğini 100% kesinlik ve üretim altyapısı için sıfır risk ile kanıtlamak için iyi huylu bir gadget zinciri (örneğin, bant dışı bir dinleyiciye DNS araması yapan bir zincir) oluşturabilir. Bu, güvenlik ekiplerinin CVE-2025-32432 yamalarını iş operasyonlarını kesintiye uğratmadan doğrulamasına olanak tanır.

İlgili Yüksek Etkili Güvenlik Açıkları

Tehdit ortamını tam olarak anlamak için güvenlik mühendisleri CVE-2025-32432'yi tarihsel emsallerle ilişkilendirmelidir. Mekaniği Konteyner Enjeksiyonu Craft CMS'ye özgü değildir.

CVE KIMLIĞIHedef YazılımTeknik Mekanizma
CVE-2023-41892Craft CMSRCE aracılığıyla ImageMagick nesne örnekleme mantığı koşullar parametre.
CVE-2019-15488Yii2 Çerçevesiİçinde güvensiz serileştirme yii\\db\\BatchQueryResult UYAN yöntem.

Bu güvenlik açıkları ortak bir DNA'yı paylaşmaktadır: Girdi Türlerinin Güveni.

İyileştirme ve Derinlemesine Savunma

CVE-2025-32432'nin hafifletilmesi kod düzeltmeleri, yapılandırma güçlendirmesi ve çalışma zamanı korumasını içeren çok katmanlı bir yaklaşım gerektirir.

1. Kod Düzeyinde Düzeltme (Kök Neden)

Kesin düzeltme, aşağıdakileri uygulamaktır Sıkı Tip Denetimi. Geliştiriciler, ham kullanıcı girdi dizilerini asla doğrudan Yii::createObject.

  • Reddet-Listele: Açık bir şekilde sınıf işlemeden önce giriş dizilerinden anahtar.
  • Allow-List: Dinamik örnekleme gerekliyse, istenen sınıfı güvenli sınıflardan oluşan katı, sabit kodlanmış bir beyaz listeye karşı doğrulayın.

PHP

// Güvenli Uygulama $config = json_decode($json, true); unset($config['class']); // Nesne Enjeksiyonunu Önle $object = Yii::createObject(array_merge(['class' => SafeClass::class], $config));

2. Çalışma Zamanı Sertleştirme (php.ini)

Bir saldırgan bir sınıfı örneklese bile, temel sistem işlevleri kısırlaştırılmışsa RCE imkansızdır. Yapılandırın php.ini tehlikeli yürütme işlevlerini devre dışı bırakmak için:

Ini, TOML

disable_functions = system, exec, shell_exec, passthru, proc_open, popen, pcntl_exec

3. Anında Yama

En son Craft CMS güncellemesini hemen uygulayın. CVE-2025-32432 için tedarikçi yaması, büyük olasılıkla, CVE-2025-32432'yi engelleyen çerçeve düzeyinde bir filtre sunar. sınıf parametresinin belirli denetleyici eylemlerinde onurlandırılmasını engeller.

Sonuç

CVE-2025-32432 çerçeveler daha soyut ve güçlü hale geldikçe, karmaşık mantıksal saldırı yüzeyleri ortaya çıkardıklarına dair çarpıcı bir hatırlatmadır. Konteyner Enjeksiyonu "2020'lerin SQL Enjeksiyonu"-Yazdığınız kodda değil, çerçevenin sihrini nasıl yapılandırdığınızda bir kusur var.

Sıkı güvenlik mühendisleri için ders açıktır: Girdi Doğrulama veri değerlerinin ötesinde verilere kadar uzanmalıdır türleri ve yapılar. Eğer bir kullanıcının yapı bir nesnenin, oyunu zaten kaybettiniz.

Güvenilir Referanslar

Gönderiyi paylaş:
İlgili Yazılar
tr_TRTurkish