In der Hierarchie der modernen Web-Schwachstellen, Dependency Injection (DI) Container Injection befindet sich an der Spitze der Nahrungskette. Sie ist schwieriger zu entdecken als SQL Injection, eleganter als Memory Corruption und hat verheerende Auswirkungen.
Die jüngste Offenlegung von CVE-2025-32432 Ziel: Craft CMS-und im weiteren Sinne auch die zugrunde liegenden Yii2-Framework-dient als brutale Erinnerung: Wenn Benutzereingaben die Instanziierung von Klassen steuern, gehört die Anwendung dem Angreifer. Während viele automatische Scanner dieses Problem zunächst als "Massenzuweisung" oder "Konfigurationsproblem" mit geringem Schweregrad einstuften, erkennen Elite-Sicherheitsingenieure es als das, was es wirklich ist: Entfernte Code-Ausführung (RCE) über eine unsichere Logik zur Deserialisierung von Objekten.
In diesem Artikel wird eine technische Autopsie der Sicherheitslücke durchgeführt. Wir gehen über das Hersteller-Advisory hinaus und rekonstruieren die Gadget-Kette, analysieren die zugrundeliegenden magischen PHP-Methoden und zeigen, warum eine KI-gesteuerte semantische Analyse der einzige gangbare Weg ist, um diese Logikfehler in großem Umfang zu erkennen.

Die Architektur des Scheiterns: Das Innere des Yii2 Service Locator
Um CVE-2025-32432 zu verstehen, müssen Sie zunächst den architektonischen Kern des Yii2-Frameworks verstehen: yii\\di\Container.
Craft CMS stützt sich stark auf das Service Locator-Muster und den Dependency Injection-Container von Yii2, um Klassenabhängigkeiten zu verwalten. Um die Entwicklung flexibel zu gestalten, erlaubt der Container den Entwicklern die Konfiguration von Objekten mit Konfigurations-Arrays. Diese Funktion ist die Hauptursache für die Sicherheitslücke.
Die "CreateObject"-Senke
Die kritische Senke in dieser Schwachstellenklasse ist Yii::createObject(). Diese Methode akzeptiert ein Konfigurationsarray, in dem die Klasse Schlüssel gibt an, welche PHP-Klasse instanziert werden soll, und die nachfolgenden Schlüssel definieren die öffentlichen Eigenschaften dieser Instanz.
PHP
// Legitime Verwendung im Craft CMS Backend Code $object = Yii::createObject([ 'class' => 'app\\models', 'username' => 'admin', 'role' => 'superuser' ]);
Die Schwachstelle (CVE-2025-32432) entsteht, weil bestimmte Controller-Aktionen in Craft CMS (oft im Zusammenhang mit der Speicherung von Plugin-Konfigurationen oder der Bearbeitung von Entwürfen) rohe JSON-Eingaben aus der HTTP-Anfrage akzeptieren und blind in diese Senke weiterleiten.
Der Fehler in der Logik:
- Quelle: Benutzer sendet
POST /api/v1/plugin-konfigurationmit JSON-Körper. - Fluss: Der Controller dekodiert das JSON in ein PHP-Array.
- Spüle: Das Array wird übergeben an
Yii::createObject($requestData). - Ergebnis: Der Angreifer definiert die
KlasseUmwandlung der Dateneinspeisung in Objekt Injektion.

Die Konstruktion der Kill Chain: Die Gadget-Jagd
Bei der Nutzung von PHP ist die Möglichkeit, eine Klasse zu instanziieren, nutzlos, wenn diese Klasse tut etwas während seines Lebenszyklus interessant. Wir brauchen eine Gadget.
Ein Gadget ist eine Klasse, die in ihren magischen Methoden sensible Operationen (Datei-Schreibvorgänge, Befehlsausführung, Datenbankabfragen) durchführt (__Konstruieren, __destruct, __Aufwachen, __toString) oder Initialisierungsmethoden (init). Da Craft CMS das gesamte Yii2-Ökosystem und umfangreiche Anbieterbibliotheken (Guzzle, Monolog usw.) umfasst, ist die Gadget-Landschaft sehr fruchtbar.
Das primäre Gadget: yii\\rest\\IndexAction
Im Zusammenhang mit CVE-2025-32432 nutzt die zuverlässigste Gadget-Kette yii\\rest\\IndexAction. Diese Klasse ist für die Auflistung von Modellen für eine REST-API gedacht, hat aber eine besondere Eigenschaft: checkAccess.
Die checkAccess soll eine aufrufbare Funktion für die Berechtigungsprüfung enthalten. Da wir jedoch die Eigenschaftswerte über den DI-Container steuern, können wir dies in eine Rückruf-Ausführungsprimitiv.
Die waffenfähige Nutzlast (PoC)
Nachfolgend finden Sie eine rekonstruierte Proof of Concept (PoC)-Nutzlast. Diese JSON-Struktur löst bei der Verarbeitung durch den anfälligen Endpunkt einen RCE aus.
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" } }
Schritt-für-Schritt-Ausführungsablauf:
- Instanziierung: Der DI-Container sieht
Klasse: yii\\rest\\IndexAction. Es verwendet Reflection, um eine Instanz dieser Klasse zu erstellen. - Grundstücksbevölkerung: Der Container iteriert durch die Schlüssel.
- Sie setzt
$indexAction->checkAccess = 'system'. - Es instanziiert rekursiv eine
dummy_controller(erforderlich durchIndexAction).
- Sie setzt
- Das Auslösen der Falle: Die meisten Yii2-Komponenten rufen
init()oderrun()während ihres Lebenszyklus. Bei diesem speziellen Exploit-Pfad ruft die Anwendungslogik schließlich die Aktion auf. - Rückruf-Ausführung: Innerhalb
IndexAction::run()prüft der Code, obcheckAccesseingestellt ist.PHP// Interne Logik von yii\\rest\IndexAction if ($this->checkAccess) { call_user_func($this->checkAccess, $this->id, $params); } - RCE: PHP führt aus
system('rce_trigger', ...)? Nein, der Angreifer muss die Argumente abgleichen. Durch die Manipulation interner Eigenschaften, die als Argumente an den Callback übergeben werden, erreicht der Angreifersystem('id; ...').
Hinweis: Fortgeschrittene Angreifer werden dies mit yii\\caching\\fileCache Gadgets zum Schreiben einer persistenten PHP-Webshell (z. B., shell.php) in die öffentliche Webroot (/web/assets/), wodurch die ephemeren Ausführungsgrenzen umgangen werden.
Warum herkömmliche Scanner versagen
Die Erkennung von CVE-2025-32432 ist ein Alptraum für herkömmliche DAST-Tools (Dynamic Application Security Testing).
- Syntaxblindheit: Die Nutzdaten sind syntaktisch gültiges JSON. Sie enthält keine SQL-Tokens (
' OR 1=1) oder XSS-Vektoren (<script>). WAFs, die für die OWASP Top 10-Standardwerte konfiguriert sind, lassen dies in der Regel durch. - Kontextblindheit: Ein Scanner sieht ein JSON-Objekt. Er versteht nicht, dass der Schlüssel
Klassehat eine semantische Bedeutung für das Backend-PHP-Framework. Für einen Scanner,Klasseist nur ein weiteres Datenfeld wieNutzernameoderE-Mail. Sie kann nicht auf die Objektinstanziierung Nebenwirkung.
KI-gesteuerte Erkennung: Der Penligent-Vorteil
Dies ist der Ort, an dem Penligent.ai stellt einen Paradigmenwechsel bei offensiven Sicherheitstests dar. Penligent geht über den Musterabgleich hinaus und setzt Kontextabhängige semantische Analyse.
- Framework Fingerprinting & Logic Mapping
Die KI-Agenten von Penligent identifizieren zunächst den zugrunde liegenden Technologie-Stack (Craft CMS / Yii2). Entscheidend ist, dass die KI die für dieses Framework spezifischen gefährlichen Senken "kennt". Sie versteht, dass Yii::createObject in Yii2 ein kritischer Kontrollpunkt ist, so wie pickle.load für Python oder unserialize für generisches PHP.
- Intelligentes Sondieren (Fuzzing mit Intention)
Anstatt blindlings zufällige Zeichen zu sprühen, konstruiert Penligent Logiksonden.
- Probe 1: Einspritzen
{"Klasse": "yii\\\\helpers\\\\VarDumper"}. - Beobachtung: Ändert sich die Antwortzeit? Verweist die Fehlermeldung auf "VarDumper"?
- Schlussfolgerung: Wenn die Anwendung versucht, die Klasse zu laden, bestätigt das AI, dass die
KlasseParameter vom DI-Container interpretiert wird.
- Zerstörungsfreie Verifizierung
Sobald der Injektionsvektor bestätigt ist, muss Penligent nicht mehr rm -rf / ausführen, um die Schwachstelle zu beweisen. Es kann eine gutartige Gadget-Kette generieren (z. B. eine, die einfach einen DNS-Lookup zu einem Out-of-Band-Listener durchführt), um die RCE-Fähigkeit mit 100%-Sicherheit und ohne Risiko für die Produktionsinfrastruktur zu beweisen. So können Sicherheitsteams CVE-2025-32432-Patches validieren, ohne den Geschäftsbetrieb zu unterbrechen.
Verwandte Sicherheitslücken mit hoher Auswirkung
Um die Bedrohungslandschaft vollständig zu verstehen, sollten Sicherheitsingenieure CVE-2025-32432 mit historischen Präzedenzfällen in Beziehung setzen. Die Mechanismen von Container-Injektion gibt es nicht nur bei Craft CMS.
| CVE-ID | Zielsoftware | Technischer Mechanismus |
|---|---|---|
| CVE-2023-41892 | Craft CMS | RCE über ImageMagick Objektinstanziierungslogik in der Bedingungen Parameter. |
| CVE-2019-15488 | Yii2-Framework | Unsichere Deserialisierung in yii\\db\BatchQueryResult __Aufwachen Methode. |
Diese Schwachstellen haben eine gemeinsame DNA: Das Vertrauen der Eingabetypen.
Abhilfe und Verteidigung im Detail
Die Entschärfung von CVE-2025-32432 erfordert einen mehrschichtigen Ansatz mit Codekorrekturen, Konfigurationshärtung und Laufzeitschutz.
1. Behebung auf Code-Ebene (Die Grundursache)
Die endgültige Lösung besteht darin, Folgendes durchzusetzen Strenge Typprüfung. Entwickler dürfen niemals rohe Benutzereingabe-Arrays direkt an Yii::createObject.
- Verweigern-Liste: Heben Sie explizit die Einstellung der
KlasseSchlüssel aus den Eingabefeldern vor der Verarbeitung. - Erlauben-Liste: Wenn eine dynamische Instanziierung erforderlich ist, validieren Sie die angeforderte Klasse anhand einer strengen, fest kodierten Whitelist mit sicheren Klassen.
PHP
// Sichere Implementierung $config = json_decode($json, true); unset($config['class']); // Objektinjektion verhindern $object = Yii::createObject(array_merge(['class' => SafeClass::class], $config));
2. Härtung der Laufzeit (php.ini)
Selbst wenn ein Angreifer eine Klasse instanziiert, ist ein RCE unmöglich, wenn die zugrunde liegenden Systemfunktionen kastriert sind. Konfigurieren Sie Ihre php.ini um gefährliche Ausführungsfunktionen zu deaktivieren:
Ini, TOML
disable_functions = system, exec, shell_exec, passthru, proc_open, popen, pcntl_exec
3. Sofortiges Patching
Wenden Sie sofort das neueste Update für Craft CMS an. Der Hersteller-Patch für CVE-2025-32432 führt wahrscheinlich einen Filter auf Framework-Ebene ein, der verhindert, dass die Klasse Parameter in bestimmten Controller-Aktionen nicht berücksichtigt werden.
Schlussfolgerung
CVE-2025-32432 ist eine deutliche Erinnerung daran, dass Frameworks, die immer abstrakter und leistungsfähiger werden, komplexe logische Angriffsflächen bieten. Container Injection ist die "SQL-Injection der 2020er Jahre"-Ein Fehler, der nicht in dem von Ihnen geschriebenen Code liegt, sondern in der Art und Weise, wie Sie die Magie des Frameworks konfigurieren.
Für den Hardcore-Sicherheitsingenieur ist die Lektion klar: Validierung der Eingaben muss sich über die Datenwerte hinaus auf die Daten erstrecken Typen und Strukturen. Wenn Sie einem Benutzer die Möglichkeit geben, die Struktur eines Objekts, haben Sie das Spiel bereits verloren.

