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.

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ı:
- Kaynak: Kullanıcı gönderir
POST /api/v1/plugin-configJSON gövdesi ile. - Akış: Denetleyici JSON'un kodunu bir PHP dizisine çözer.
- Lavabo: Dizi şu adrese aktarılır
Yii::createObject($requestData). - Sonuç: Saldırgan tanımlar
sınıfveri enjeksiyonunun dönüştürülmesi Nesne Enjeksiyonu.

Ö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ışı:
- Ö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. - Mülk Nüfusu: Kap anahtarlar arasında yineleme yapar.
- Bu ayarlar
$indexAction->checkAccess = 'system'. - Özyinelemeli olarak bir
dummy_controller(tarafından gerekliIndexAction).
- Bu ayarlar
- Tuzağı Tetiklemek: Çoğu Yii2 bileşeni şunları çağırır
init()veyarun()yaşam döngüleri sırasında. Bu özel istismar yolunda, uygulama mantığı sonunda eylemi çağırır. - Geri Arama Yürütme: İçeride
IndexAction::run()kod aşağıdaki durumları kontrol edercheckAccessayarlanmıştır.PHP// yii\\rest\\IndexAction'ın iç mantığı if ($this->checkAccess) { call_user_func($this->checkAccess, $this->id, $params); } - 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 edereksystem('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ıfarka uç PHP çerçevesi için semantik bir anlama sahiptir. Bir tarayıcı için,sınıfgibi başka bir veri alanıdır.kullanıcı adıveyae-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.
- Ç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.
- 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ıfparametresi DI konteyneri tarafından yorumlanıyor.
- 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ĞI | Hedef Yazılım | Teknik Mekanizma |
|---|---|---|
| CVE-2023-41892 | Craft CMS | RCE aracılığıyla ImageMagick nesne örnekleme mantığı koşullar parametre. |
| CVE-2019-15488 | Yii2 Ç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ıfiş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.

