In der Hierarchie der PHP-Schwachstellen, Dependency Injection (DI) Container Injection steht an der Spitze - komplex zu erkennen, elegant auszunutzen und verheerend in seinen Auswirkungen.
Die Offenlegung von CVE-2025-32432 Ziel: Craft CMS (und im weiteren Sinne auch die zugrunde liegende Yii2-Framework) dient als brutale Erinnerung: Wenn Benutzereingaben die Instanziierung von Klassen steuern, gehört die Anwendung dem Angreifer.
Während viele Sicherheitsscanner dies als "Konfigurationsproblem" kennzeichnen, erkennen Elite-Sicherheitsingenieure es als das, was es wirklich ist: Entfernte Code-Ausführung (RCE) durch unsichere Deserialisierung von Objekten. Dieser Artikel führt eine technische Autopsie der Schwachstelle durch, rekonstruiert die Gadget-Kette und zeigt, dass eine KI-gesteuerte Analyse die einzige Möglichkeit ist, diese Logikfehler in großem Umfang zu erkennen.
Die Architektur des Scheiterns: Das Innere des Yii2-Containers
Um CVE-2025-32432 zu verstehen, müssen Sie das Herz von Yii2 verstehen: die yii\\di\Container.
Craft CMS setzt auf den DI-Container von Yii2, um Klassenabhängigkeiten zu verwalten. Der Container ermöglicht es Entwicklern, Objekte mit Hilfe von Arrays zu konfigurieren. Zum Beispiel:
PHP
// Legitime Verwendung $object = Yii::createObject([ 'class' => 'app\\models\\User', 'name' => 'Admin', ]);
Die Schwachstelle entsteht, wenn ein Angreifer dieses Konfigurationsarray beeinflussen kann. Wenn eine Controller-Aktion rohe JSON-Eingabe nimmt und sie blind an Yii::createObject() oder Yii::$container->set()kann der Angreifer die Anwendung zur Instanziierung von jede Klasse im Autoload-Pfad verfügbar, mit jede Immobilie Werte.
Die Angriffsfläche
Die Schwachstelle befindet sich in der Regel in Craft-CMS-Controllern, die API-Anfragen oder Plugin-Konfigurationen verarbeiten, bei denen sich die Eingabesanitisierung eher auf XSS (HTML-Tags) als auf Logik (Klassendefinitionen) konzentriert.
- Quelle: Vom Benutzer geliefertes JSON (z.B.,
POST /actions/vulnerable-plugin/save-config). - Spüle:
Yii::createObject($userInput).

Die Konstruktion der Kill Chain: Der PoC
Die Ausbeutung erfordert die Suche nach einem Gadget-eine Klasse, die in ihren Lebenszyklusmethoden gefährliche Operationen (wie das Schreiben von Dateien oder die Ausführung von Befehlen) durchführt (__Konstruieren, init, __destruct, oder __Aufwachen).
Im Zusammenhang mit CVE-2025-32432 nutzen wir eine gemeinsame Gadget-Kette, die im Yii2-Ökosystem zu finden ist und Folgendes beinhaltet yii\\rest\\IndexAction oder ähnliche Callback-lastige Klassen.
Das Konzept
Wir wollen eine Klasse instanziieren, die es uns ermöglicht, eine PHP-Callback-Funktion auszuführen (wie System oder Ausführung) auf ein mitgeliefertes Argument.
Bewaffnete JSON-Nutzlast
Nachfolgend finden Sie einen konzeptionellen Proof of Concept (PoC), der zeigt, wie ein RCE durch Einschleusen einer bösartigen Klassendefinition ausgelöst werden kann.
JSON
{ "rce_trigger": { "class": "yii\\\\rest\\\\IndexAction", "checkAccess": "system", "id": "rce", "controller": { "class": "yii\\\\web\\\\Controller", "id": "dummy" }, "modelClass": "yii\\\\base\\\\Model", "run": "id; uname -a" } }
Aufschlüsselung der Nutzlast:
Klasse: Wir weisen den DI-Container an, Folgendes zu instanziierenyii\\rest\\IndexAction.checkAccess: Dies ist unsere gefährliche Eigenschaft. In diesem speziellen Gerät, dascheckAccessist für die Aufnahme eines Callables vorgesehen. Wir setzen sie aufSystem.- Auslösen der Ausführung: Wenn die Anwendung dieses Objekt verarbeitet (oft während der
run()Methodenausführung oder Eigenschaftsvalidierung), ruft es den Rückruf auf, der incheckAccessmit Argumenten, die vom Kontext (oder Angreifer) geliefert werden. - Ergebnis: Der Server führt aus
system('id; uname -a').
Hinweis: In einer gehärteten Umgebung könnten Angreifer dies mit yii\\caching\\fileCache um eine PHP-Web-Shell für die Web/ Verzeichnis.
Warum herkömmliche Scanner dies übersehen
Die Erkennung von CVE-2025-32432 ist für herkömmliche DAST-Tools bekanntermaßen schwierig.
- Keine Unterschrift: Die Nutzdaten sind gültiges JSON. Sie enthält keine SQL-Injection-Syntax (
' OR 1=1) oder XSS-Tags (). - Kontextabhängig: Die Schwachstelle liegt nicht in der Eingabe selbst, sondern in wie der Rahmen interpretiert die
KlasseTaste. Ein Standardscanner versteht nicht, dassKlasseKarten zuYii::createObject.
KI-gesteuerte Erkennung: Der Penligent-Vorteil
Dies ist der Ort, an dem Penligent.ai ändert das Paradigma. Penligent nutzt Kontextabhängige AI-Agenten die rahmenspezifische Logik verstehen.
- Rahmenanerkennung: Die Penligent-Agenten erkennen, dass das Ziel Craft CMS / Yii2 einsetzt. Er kennt die für dieses Framework spezifischen "Dangerous Sinks" (z. B.,
Yii::createObject). - Logische Inferenz: Anstatt blindes Fuzzing zu betreiben, analysiert die KI das API-Schema. Wenn sie ein JSON-Objekt sieht, das konfigurationsähnliche Parameter akzeptiert, injiziert sie auf intelligente Weise "Probing Payloads", z. B. indem sie versucht, eine harmlose Klasse wie
yii\\helpers\\VarDumper-, um zu prüfen, ob der Container erreichbar ist. - Automatisierte Verifizierung: Wenn die Prüfung erfolgreich ist (z. B. die Anwendung verhält sich anders oder gibt einen bestimmten Fehler zurück, der auf die Instanziierung einer Klasse hinweist), kennzeichnet Penligent den Endpunkt als anfällig für Container-Injektion und generiert die spezifische RCE-Nutzlast für die Abhilfevalidierung.
Abhilfe und Verteidigung
Um Craft CMS gegen CVE-2025-32432 und ähnliche DI-Angriffe zu schützen:
- Strenge Typüberprüfung: Übergeben Sie niemals rohe Benutzereingabe-Arrays an
Yii::createObject. Überprüfen Sie immer, ob dieKlasseSchlüssel ist entweder nicht vorhanden (im Backend fest kodiert) oder streng erlaubt. - Craft CMS aktualisieren: Wenden Sie sofort die neuesten Patches an. Der Hersteller hat wahrscheinlich die
AktionVerarbeitungslogik, um willkürliche Klassendefinitionen abzulehnen. - Gefährliche Funktionen deaktivieren: In Ihrem
php.iniverwendenfunktionen_deaktivierenzu blockierenSystem,Ausführung,passhruundproc_openum die Auswirkungen von RCE abzumildern.
Schlussfolgerung
CVE-2025-32432 ist eine deutliche Erinnerung daran, dass moderne PHP-Frameworks zwar leistungsstark sind, aber auch komplexe Angriffsflächen bieten. Container Injection ist die "SQL Injection der 2020er Jahre" - ein Logikfehler, der totale Kontrolle ermöglicht.
Für Sicherheitsingenieure ist die Lektion klar: Wenn Sie die Benutzer die Objekte definieren lassen, werden sie Ihre Zerstörung definieren. Es reicht nicht mehr aus, die "Form" der Daten zu validieren, man muss auch den "Typ" validieren.

