Bußgeld-Kopfzeile

Anatomie von CVE-2025-32432: Weaponizing Yii2 Container Injection in Craft CMS

In der Hierarchie der Web-Schwachstellen gibt es nur wenige Dinge, die die sofortige Aufmerksamkeit eines Red Team-Operators auf sich ziehen wie eine PHP-Objektinjektion (POI) Endpunkt, der für nicht authentifizierte Benutzer zugänglich ist.

CVE-2025-32432 ist genau das. Mit einer CVSS v3.1-Wert von 10.0Diese Schwachstelle in Craft CMS ist nicht nur ein weiterer Fehler, sondern ein Beispiel dafür, wie moderne Dependency Injection (DI) Container als Waffe gegen die von ihnen unterstützten Anwendungen eingesetzt werden können.

Für eingefleischte Sicherheitsingenieure ist hier nicht nur der RCE interessant, sondern auch der Mechanismus. Er hebt ein grundlegendes Versagen in der Art und Weise hervor, wie die Yii2-Framework (das Craft antreibt) verarbeitet Konfigurations-Arrays, die über Benutzereingaben übergeben werden. In dieser Analyse werden der Stack-Trace der Schwachstelle, die spezifischen Gadget-Ketten, die für die Ausnutzung erforderlich sind, und die Gründe, warum diese spezielle CVE die Sollbruchstelle für herkömmliche DAST-Scanner darstellt und den Einsatz von KI-gesteuerten Angriffsagenten erforderlich macht, analysiert.

Der architektonische Fehler: Wenn DI schief geht

Um CVE-2025-32432 zu verstehen, muss man die Architektur von Craft CMS verstehen. Craft stützt sich stark auf Yii2's Service Locator und Dependency Injection Muster.

Die Schwachstelle befindet sich in der AssetsControllerinsbesondere die actionGenerateTransform Methode. Dieser Endpunkt soll es dem Frontend ermöglichen, Bildtransformationen (Zuschneiden, Größenänderung) im laufenden Betrieb anzufordern.

Die gefährdete Spüle

Der Codefluss folgt einem gefährlichen Pfad von der Benutzereingabe direkt zur Objektinstanziierung.

  1. Verschlucken: Der Controller akzeptiert eine POST-Anfrage, die eine umwandeln Array.
  2. Normalisierung: Die Daten werden übergeben an Craft::$app->getAssetTransforms()->normalizeTransform().
  3. Vollstreckung (Die Spüle): Die Methode ruft schließlich Craft::createObject($config).

In Yii2, createObject ist ein leistungsfähiger Wrapper. Wenn die $config Array enthält eine Klasse Schlüssel, wird Yii2 versuchen, diese spezifische Klasse zu instanziieren und ihre öffentlichen Eigenschaften mit den verbleibenden Array-Schlüsseln aufzufüllen.

PHP

`// Vereinfachter Ablauf der Schwachstelle public function actionGenerateTransform() { $transformId = Craft::$app->getRequest()->getBodyParam('transformId'); // Der Angreifer kontrolliert das gesamte Konfigurationsfeld $transformConfig = Craft::$app->getRequest()->getBodyParam('transform');

// FATAL FLAW: Keine Überprüfung der Whitelist für den Parameter 'class'
$object = Craft::createObject($transformConfig);

return $object->transform();

}`

Dies ist die Definition von Unsichere Deserialisierung (CWE-502), auch wenn es JSON/Array-Konfiguration statt nativer unserialisieren(). Das Ergebnis ist identisch: Der Angreifer diktiert den Kontrollfluss.

Anatomie von CVE-2025-32432: Weaponizing Yii2 Container Injection in Craft CMS

Die Ausnutzungskette: Die Herstellung des Gadgets

Skript-Kiddies werden an diesem CVE scheitern, weil das einfache Zeigen einer Nutzlast auf den Endpunkt eine 400 Schlechte Anfrage. Eine erfolgreiche Ausnutzung erfordert ein differenziertes Verständnis des Zustands der Anwendung.

Phase 1: Kontexterkundung (Die Asset-ID)

Die actionGenerateTransform Funktion hat eine harte Abhängigkeit: Sie erfordert eine gültige assetId (eine ganze Zahl, die ein in das CMS hochgeladenes Bild darstellt).

Wenn die assetId nicht vorhanden ist, löst der Code eine Ausnahme aus vor sie erreicht die Schwachen createObject anrufen.

  • Die Falle: Herkömmliche Scanner (Nessus, Nuclei) feuern Nutzlasten blindlings ab. Sie verwenden zufällige IDs oder keine IDs. Sie erhalten Fehler und markieren das Ziel als "sicher".
  • Die Umgehungsstraße: Ein raffinierter Angreifer (oder Agent) durchsucht den öffentlichen HTML-Quellcode nach typischen Craft-Asset-Mustern (z. B., /assets/images/1042/logo.png). Die ganze Zahl 1042 ist der Schlüssel zur Freischaltung des Ausführungsweges.

Phase 2: Die Gadget-Kette

Sobald das Tor mit einer gültigen Asset-ID entriegelt ist, muss der Angreifer die Nutzlast bereitstellen. Da wir instanziieren können jede Klasse benötigen wir ein "Gadget" - eine Klasse, die während ihres Lebenszyklus bösartige Aktivitäten auslöst (normalerweise __Konstruieren, __destruct, oder init).

Im Zusammenhang mit CVE-2025-32432 haben Forscher Ketten identifiziert, die \\GuzzleHttp\\\Client (falls installiert) oder native Yii2-Caching-Klassen.

Ein gängiger Vektor ist die Verwendung der yii\\rbac\\PhpManager oder den Missbrauch der Siehe Renderer, um lokale Dateien einzubinden. Die direkteste RCE-Methode beinhaltet jedoch die Nutzung der Craft\\Config Objekt kombiniert mit PHP-Protokoll-Wrappern.

Die Struktur der Exploit-Nutzlast:

JSON

{ "assetId": "1042", "transform": { "class": "craft\\\\base\\\\ImageTransform", "width": "100", "height": "100", "format": "php", "quality": { "class": "yii\\\\rest\\\\IndexAction", "checkAccess": "system", "id": "whoami" } } }

Hinweis: Die tatsächliche Gadget-Kette kann je nach den spezifischen Composer-Abhängigkeiten, die auf dem Server installiert sind, variieren, was eine dynamische Anpassung der Nutzlast erfordert.

Yii2-Container-Injektion in Craft CMS nutzbar machen

Das Scheitern statischer Sicherheitswerkzeuge

Diese Sicherheitslücke zeigt die Grenzen der aktuellen Generation von Sicherheitswerkzeugen auf.

  1. Staatenlosigkeit: Herkömmliche Scanner sind zustandslos. Sie "erinnern" sich nicht daran, dass sie eine Asset-ID auf der Homepage gefunden haben und "entscheiden" sich 10 Minuten später, diese in einer POST-Anfrage zu verwenden.
  2. Kontextblindheit: Sie können keine Geschäftslogik ableiten. Für sie ist eine Bild-ID nur eine Zahl und kein wichtiger Schlüssel für eine Exploit-Kette.

Dies ist der Punkt, auf den sich die Industrie zubewegt Agentische Sicherheit.

Automatisiertes Reasoning: Der Penligent-Ansatz

Bei der Analyse von CVE-2025-32432 unter Sträflichstellten wir fest, dass Standard-Fuzzing eine Erfolgsquote von 0% hatte. Um diese Schwachstelle zuverlässig zu validieren, mussten wir einen KI-Agenten einsetzen, der zu mehrstufigen Schlussfolgerungen fähig ist.

Die Sträflich Der Arbeitsablauf für dieses CVE zeigt den Unterschied zwischen "Scanning" und "Penetrationstest":

  1. Fingerabdrücke nehmen: Der Agent identifiziert die X-Powered-By: Craft CMS Kopfzeile.
  2. Semantisches Parsing: Anstatt Fuzzing zu betreiben, analysiert der Agent das DOM der Landing Page. Er identifiziert <img src="..."> Tags und führt einen Regex-Match der URL-Struktur durch, um potenzielle Asset-IDs zu extrahieren.
  3. Hypothesentests: Der Agent versucht eine gutartige Umwandlungsanfrage mit der extrahierten ID. Erhält er eine 200 OK oder eine Logische Ausnahme (und nicht eine 404), wird bestätigt, dass die ID gültig ist.
  4. Nutzlast Mutation: Der Agent konstruiert die JSON-Nutzdaten. Wenn auf dem Server eine neuere PHP-Version läuft, die bestimmte Wrapper veraltet, ändert der Agent die Gadget-Kette in Echtzeit, um alternative Objektinjektionen zu versuchen.

Diese Fähigkeit zur Kettenlogik-Das Auffinden eines Schlüssels in Schritt A und dessen Verwendung in Schritt B ist das, was menschliche (und agentenbasierte) Hacker von automatisierten Skripten unterscheidet.

Abhilfe und Verteidigung

Wenn Sie eine Craft CMS-Installation verteidigen, ist sofortiges Handeln erforderlich.

1. Patching

Der Hersteller hat eine strenge Validierung in den folgenden Versionen freigegeben. Stellen Sie sicher, dass Sie diese ausführen:

  • Craft CMS 3.x -> 3.9.15+
  • Craft CMS 4.x -> 4.14.15+
  • Craft CMS 5.x -> 5.6.17+

2. WAF-Konfiguration

Wenn ein Patching nicht sofort möglich ist (aufgrund von eingefrorenem Legacy-Code), müssen Sie den spezifischen Angriffsvektor auf WAF-Ebene blockieren.

Beispiel für eine ModSecurity-Regel:

Apache

SecRule REQUEST_URI "@enthält /actions/assets/generate-transform" \\ "id:100001,phase:2,t:none,t:lowercase,deny,status:403,msg:'Block Craft CMS RCE CVE-2025-32432', \\ chain" SecRule ARGS_POST:transform "@rx class"

Diese Regel blockiert jede Anfrage an den Transformationsendpunkt, die versucht, einen "class"-Parameter im POST-Body zu definieren.

Vergleich der Anfälligkeit bei hoher Auswirkung (2024-2025)

Um CVE-2025-32432 in den richtigen Kontext zu setzen, ist es hilfreich, ihn mit anderen aktuellen Architekturfehlern in wichtigen Frameworks zu vergleichen.

CVE-IDZielVektorKomplexitätWarum das wichtig ist
CVE-2025-32432Craft CMSObjekt InjektionMittelZeigt das Versagen von nicht validierten DI-Containern.
CVE-2024-21626runcContainer-FluchtHochGrundlegender Fehler in der Container-Laufzeitisolierung.
CVE-2024-23897JenkinsWillkürliches Lesen von DateienNiedrigMissbrauch von CLI-Parser-Funktionen (args4j).
CVE-2024-3400Palo Alto PAN-OSBefehlsinjektionNiedrigUnauthentifizierter RCE auf Edge-Security-Geräten.

Schlussfolgerung

CVE-2025-32432 ist eine Erinnerung daran, dass in der modernen Webentwicklung "funktionsreich" oft "angriffsflächenreich" bedeutet. Der Komfort von Yii2's createObject bot den Entwicklern Flexibilität, gab den Angreifern aber eine geladene Waffe in die Hand.

Für den Sicherheitsingenieur unterstreicht diese Schwachstelle das Ende der "Point-and-Shoot"-Scan-Ära. Schwachstellen werden immer logischer, kontextbezogener und zustandsabhängiger. Die Abwehr dieser Schwachstellen erfordert Tools, die genauso schnell denken, argumentieren und sich anpassen können wie die Angreifer.

Referenzen und weiterführende Literatur:

Teilen Sie den Beitrag:
Verwandte Beiträge
de_DEGerman