
Im April 2025 entdeckte Orange Cyberdefense bei der Untersuchung eines Vorfalls eine kritische Schwachstelle in Craft CMS, die nun unter der Nummer CVE-2025-32432 geführt wird. Die Schwachstelle ermöglicht eine nicht authentifizierte RCE (Remote Code Execution) mit der höchsten Schweregradbewertung von 10,0 (kritisch) gemäß CVSS v3.1 der NVD (National Vulnerability Database).
Im Rahmen des OPSWAT Infrastructure Cybersecurity Graduate Fellowship Program haben unsere Stipendiaten eine umfassende Studie zu dieser Schwachstelle durchgeführt, einschließlich der Reproduktion des Exploits, der Validierung seiner Auswirkungen, der Bewertung organisatorischer Risiken und der Analyse empfohlener Schutzstrategien.
Dieser Blogbeitrag bietet einen umfassenden Einblick in CVE-2025-32432, analysiert dessen Ursache, den Ablauf der Ausnutzung und die weiterreichenden Auswirkungen auf die Sicherheit und gibt Unternehmen praktische Ratschläge, wie sie sich gegen diese Bedrohung schützen können.
CVE-2025-32432 Einführung
CVE-2025-32432 betrifft Craft CMS-Versionen 3.0.0-RC1 bis 3.9.14, 4.0.0-RC1 bis 4.14.14 und 5.0.0-RC1 bis 5.6.16. Die als CWE-94: Code Injection klassifizierte Schwachstelle entsteht durch die unsachgemäße Behandlung nicht vertrauenswürdiger Eingaben und ermöglicht letztendlich eine nicht authentifizierte RCE.

Craft CMS & Das Yii-Framework
Craft CMS ist ein modernes Content-Management-System, mit dem Entwickler und Content-Teams flexible, vollständig angepasste Websites erstellen können, anstatt sich auf starre, vordefinierte Vorlagen zu verlassen. Mit mehr als 46.000 Websites weltweit ist es sowohl weit verbreitet als auch ein häufiges Ziel für Angreifer, die nach Schwachstellen mit großer Auswirkung suchen.
Craft CMS basiert auf dem Yii Framework, einem schnellen und leistungsstarken PHP-Framework für moderne Webentwicklung. Yii stellt die Kernstruktur und die Tools bereit, während Craft CMS diese um ein flexibles Content-Management-System erweitert.

Eine der Kernfunktionen des Yii-Frameworks ist sein Dependency-Injection-Container (DI-Container). Dependency Injection ist ein Entwurfsmuster, das Komponenten mit den benötigten Ressourcen versorgt, anstatt dass diese Ressourcen selbst erstellt werden müssen. Der DI-Container von Yii ist äußerst flexibel und in der Lage, komplexe Objekte aus relativ einfachen Konfigurationsregeln zu erstellen.
Diese Flexibilität birgt jedoch auch Risiken. Im Fall von CVE-2025-32432 wurde der DI-Container in Kombination mit nicht vertrauenswürdigen Benutzereingaben missbraucht, wodurch ein Weg zur Remote-Codeausführung geschaffen wurde. Dieser Fall zeigt, dass selbst sichere und leistungsstarke Framework-Funktionen gefährlich werden können, wenn sie ohne vollständiges Verständnis ihrer Sicherheitsauswirkungen integriert werden.
Tiefgehende Analyse von CVE-2025-32432
Craft CMS verfügt über eine Funktion namens „Image Transforms“, die die Leistung optimiert, indem sie direkt auf dem Server Bilder in anderer Größe generiert. Anstatt ein großes Bild mit einer Größe von 4,5 MB zu liefern, das als Miniaturansicht mit einer Größe von 300 × 300 angezeigt wird, erstellt Craft CMS automatisch eine kleinere, optimierte Version und liefert diese aus. Dieser Ansatz reduziert die Bandbreitennutzung und verbessert die Ladegeschwindigkeit der Seite erheblich.
Um diese Funktionalität allgemein verfügbar zu machen, stellt Craft CMS den Endpunkt „actions/assets/generate-transform“ ohne Authentifizierung zur Verfügung. Dadurch wird zwar sichergestellt, dass sowohl authentifizierte als auch anonyme Benutzer von optimierten Bildern profitieren können, es entsteht jedoch auch eine öffentlich zugängliche Angriffsfläche, über die jeder manipulierte Eingaben an die Anwendung senden kann.

Durch eine detaillierte Analyse dieses Workflows haben unsere Mitarbeiter festgestellt, dass die Methode AssetsController::actionGenerateTransform immer dann aufgerufen wird, wenn eine POST-Anfrage an den exponierten Endpunkt gesendet wird. Diese Funktion ruft den Parameter „handle” direkt aus dem Anfragetext ab und leitet ihn zur weiteren Verarbeitung in der nächsten Stufe weiter.

Im nächsten Schritt wird die Methode ImageTransforms::normalizeTransform() aufgerufen. Diese Methode nimmt den vom Benutzer bereitgestellten Handle-Parameter und wandelt ihn in ein ImageTransform-Objekt um. Da das Objekt direkt aus nicht vertrauenswürdigen Eingaben erstellt wird, stellt dies einen kritischen Risikopunkt im Ausführungsablauf dar.

Während dieses Vorgangs werden alle Schlüssel-Wert-Paare aus dem benutzergesteuerten $transform-Array (das aus dem Handle-Parameter stammt) in ein Konfigurations-Array zusammengeführt. Die Methode normalizeTransform übergibt dieses Array dann an Craft::createObject(), das für die Instanziierung eines neuen ImageTransform-Objekts zuständig ist.

Die Schwachstelle ergibt sich aus der Art und Weise, wie Craft::createObject() ( das Yii::createObject() von Yii umschließt) Konfigurationsarrays verarbeitet. Da dieser Mechanismus den DI-Container verwendet, um Objekte direkt aus dem nicht validierten Array zu instanziieren und zu konfigurieren, können Angreifer die Kontrolle über den Objektkonstruktionsprozess erlangen.

Wenn eine bösartige Nutzlast übergeben wird, ruft der Konstruktor des Objekts (geerbt von der Klasse „Model“ ) die Methode „App::configure() “ auf.

Diese Methode durchläuft jede Eigenschaft im vom Angreifer kontrollierten Array und weist sie dem neuen Objekt zu.

When App::configure() assigns properties from the attacker-controlled configuration array, most keys are mapped directly onto the object. However, if a key begins with the prefix as, the assignment is routed through Component::__set, Yii’s magic setter. This method interprets as <name> as an instruction to attach a behavior (mixin) to the object.
Eine solche bösartige Nutzlast kann so gestaltet werden, dass sie die Art und Weise ausnutzt, wie Component::__set Eigenschaften mit dem Präfix „as“ verarbeitet, wie beispielsweise „as exploit“:

Unsere Analyse hat ergeben, dass die Implementierung von Component::__set eine Sicherheitsvorkehrung enthält: Wenn ein Verhalten über eine solche Eigenschaft angehängt wird, überprüft das Framework, ob die im Konfigurationsarray angegebene Klasse eine gültige Unterklasse von yii\base\Behavior ist. Diese Überprüfung soll verhindern, dass beliebige Klassen direkt an Komponenten angehängt werden.

Diese Sicherheitsmaßnahme ist jedoch nicht so wirksam, wie es scheint. Die Schwachstelle liegt darin, wie Yii::createObject Konfigurationsarrays verarbeitet.
Bei der Instanziierung eines Objekts gibt Yii::createObject dem speziellen Parameter __class Vorrang. Ist dieser Schlüssel vorhanden, wird sein Wert als Zielklasse für die Instanziierung verwendet, und der Standardklassen-Schlüssel im Konfigurationsarray wird ignoriert.

Der Angreifer kann eine Nutzlast für das Exploit-Verhalten erstellen, die zwei Schlüssel enthält:
- 'class' => '\craft\behaviors\FieldLayoutBehavior' – Eine gültige Klasse, die yii\base\Behavior erweitert. Dieser Wert dient ausschließlich dazu, die is_subclass_of-Prüfung in Component::__set zu erfüllen, sodass die Ausführung ohne Fehlermeldung fortgesetzt werden kann.
- '__class' => '\yii\rbac\PhpManager' – Das eigentliche Ziel des Angreifers. Dies ist die „Gadget“-Klasse, die er instanziieren möchte.
Wenn der Code ausgeführt wird, besteht Component::__set die Sicherheitsprüfung, da nur der Klassenschlüssel überprüft wird. Wenn das Framework jedoch später Yii::createObject aufruft, um das Verhalten anzuhängen, gibt es __class Vorrang, was dazu führt, dass stattdessen das vom Angreifer gewählte Objekt \yii\rbac\PhpManager instanziiert wird.
Die Verwendung von \yii\rbac\PhpManager ist beabsichtigt. Das bloße Erstellen eines Objekts reicht für die Ausnutzung nicht aus; um RCE zu erreichen, ist eine Gadget-Klasse mit Nebenwirkungen erforderlich, die als Waffe eingesetzt werden können. PhpManager ist aufgrund seines Initialisierungsablaufs ein häufiges Ziel von POI-Angriffen (PHP Object Injection). Bei der Instanziierung ruft seine init() -Methode load() auf, die dann loadFromFile($this->itemFile) aufruft. Mit der Kontrolle über $this->itemFile kann ein Angreifer die Anwendung zwingen, eine schädliche Datei zu laden, wodurch die Objekterstellung in eine Codeausführung umgewandelt wird.

Die Gefahr liegt in der Methode „loadFromFile“. In PHP führt „require“ die Zieldatei als Code aus. Wenn ein Angreifer also den Dateipfad kontrolliert, kann er die Ausführung von beliebigem Code auslösen.
Um bösartigen Code auf dem Server zu platzieren, nutzt der Angreifer PHP-Sitzungsdateien aus. Durch das Einfügen von PHP in einen Anfrageparameter speichert Craft CMS die Nutzlast während des Umleitungsprozesses in einer Sitzungsdatei. Später, wenn PhpManager diese Datei lädt, könnte der Code des Angreifers ausgeführt werden.

Die gesamte Angriffskette läuft in drei Schritten ab. Zunächst platziert der Angreifer bösartiges PHP, indem er eine manipulierte URL sendet, die Craft CMS in einer Sitzungsdatei speichert. Als Nächstes nutzt er die __class-Umgehung im Bildtransformations-Endpunkt aus, um das PhpManager-Gadget zu laden und es auf die manipulierte Sitzungsdatei zu verweisen. Wenn PhpManager schließlich die Datei lädt, wird die Payload des Angreifers ausgeführt, wodurch er RCE und die vollständige Kontrolle über den Server erhält – häufig über eine Webshell oder Reverse-Shell.



Schadensbegrenzung und Abhilfe
Um die mit CVE-2025-32432 verbundenen Risiken wirksam zu mindern, benötigen Unternehmen Transparenz und Kontrolle über ihre Open-Source-Komponenten. Ohne eine klare Bestandsaufnahme der Komponenten wird das Patchen zu einer Spekulationssache.
OPSWAT , eine proprietäre Technologie innerhalbder MetaDefender®-Plattform, erfüllt diese Anforderung, indem sie eine Bestandsaufnahme aller verwendeten Softwarekomponenten, Bibliotheken, Docker-Container und Abhängigkeiten bereitstellt. Damit können Unternehmen ihre Komponenten proaktiv verfolgen, sichern und aktualisieren.


Im obigen Beispiel hatdie SBOM-Technologie in MetaDefender das Paket „nginx-ingress-controller“ gescannt, das die Sicherheitslücke CVE-2025-32432 enthielt. Das System hat das Problem automatisch als kritisch gekennzeichnet und Hinweise zu verfügbaren korrigierten Versionen gegeben, sodass die Teams die Sicherheitslücke schnell priorisieren und patchen konnten, bevor sie ausgenutzt werden konnte.
OPSWAT ist verfügbar in MetaDefender Core und MetaDefender Software Chain™ verfügbar,sodass Sicherheitsteams Schwachstellen schneller identifizieren und beheben können. Mit OPSWAT können Sicherheitsteams:
- Schnelles Auffinden anfälliger Komponenten – Identifizieren Sie sofort die Open-Source-Komponenten, die von Deserialisierungsangriffen betroffen sind. So können Sie schnell Maßnahmen zum Patchen oder Ersetzen der anfälligen Bibliotheken ergreifen.
- Sorgen Sie für proaktive Patches und Updates – Überwachen Sie Open-Source-Komponenten kontinuierlich mit OPSWAT , um Deserialisierungslücken zuvorzukommen. OPSWAT erkennt veraltete oder unsichere Komponenten, sodass zeitnahe Updates möglich sind und das Risiko von Angriffen verringert wird.
- Einhaltung von Vorschriften und Berichterstattung – OPSWAT hilft Unternehmen dabei, Compliance-Anforderungen zu erfüllen, da gesetzliche Rahmenbedingungen zunehmend Transparenz in Software-Lieferketten vorschreiben.
Sind Sie bereit, Ihre Software-Lieferkette gegen neue Bedrohungen zu stärken?
