Bußgeld-Kopfzeile

Die Phantom-Klasse: Bewaffnung mit CVE-2025-32432 Yii2 Container Injection in Craft CMS

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 Phantom-Klasse: Bewaffnung mit CVE-2025-32432 Yii2 Container Injection in Craft CMS

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:

  1. Klasse: Wir weisen den DI-Container an, Folgendes zu instanziieren yii\\rest\\IndexAction.
  2. checkAccess: Dies ist unsere gefährliche Eigenschaft. In diesem speziellen Gerät, das checkAccess ist für die Aufnahme eines Callables vorgesehen. Wir setzen sie auf System.
  3. 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 in checkAccess mit Argumenten, die vom Kontext (oder Angreifer) geliefert werden.
  4. 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 Klasse Taste. Ein Standardscanner versteht nicht, dass Klasse Karten zu Yii::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.

  1. 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).
  2. 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.
  3. 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:

  1. Strenge Typüberprüfung: Übergeben Sie niemals rohe Benutzereingabe-Arrays an Yii::createObject. Überprüfen Sie immer, ob die Klasse Schlüssel ist entweder nicht vorhanden (im Backend fest kodiert) oder streng erlaubt.
  2. Craft CMS aktualisieren: Wenden Sie sofort die neuesten Patches an. Der Hersteller hat wahrscheinlich die Aktion Verarbeitungslogik, um willkürliche Klassendefinitionen abzulehnen.
  3. Gefährliche Funktionen deaktivieren: In Ihrem php.iniverwenden funktionen_deaktivieren zu blockieren System, Ausführung, passhruund proc_open um 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.

Zuverlässige Referenzen

Teilen Sie den Beitrag:
Verwandte Beiträge
de_DEGerman