CraftCMS ist ein beliebtes Content-Management-System (CMS), das von zahlreichen Websites weltweit eingesetzt wird. Im Februar 2025 wurde durch das Team von Orange Cyberdefense eine tiefgehende Untersuchung einer aktiven Sicherheitskampagne veröffentlicht, bei der eine kritische Remote Code Execution (RCE) Schwachstelle in CraftCMS ausgenutzt wurde. Die Untersuchung fasst die Entdeckung, die technische Analyse und die Auswirkungen dieser Kampagne zusammen und gibt wichtige Hinweise zu Erkennung und Prävention. Die Ausgangslage war ein kompromittierter Webserver, der CraftCMS in der Version 4.12.
8 nutzte. Der Zweck der Analyse war, zu verstehen, wie Angreifer den Server infiltrieren konnten, welche Spuren sie hinterließen und wie groß die Gefahr für andere Instanzen von CraftCMS ist. Dabei wurden zwei kritische Sicherheitslücken identifiziert, die später als CVE-2024-58136 und CVE-2025-32432 kategorisiert wurden. Der Angriff begann mit der Suche nach gültigen Asset-IDs. CraftCMS verwaltet Dokumente und Medien als sogenannte „Assets“, denen eindeutige IDs zugeordnet sind.
Besonders im Kontext von Bildtransformationen können diese IDs genutzt werden, um Anfragen an das System zu stellen. Der Angreifer benutzte automatisierte POST-Anfragen an den Endpunkt, der für Bildtransformationen zuständig ist, und variiert die Asset-ID systematisch. Die Identifikation einer existierenden Asset-ID führte zum nächsten Schritt des Angriffs, bei dem der Angreifer prüfte, ob der Server tatsächlich verwundbar ist. Die zentrale Schwachstelle basiert darauf, dass der Server Daten, die über POST-Anfragen an den Image-Transformations-Endpunkt gesendet werden, interpretiert und dabei sogenannte Verhaltensweisen („Behaviors“) dynamisch an Objekte anhängt. Dies geschieht über die Yii-Framework-Komponente, die CraftCMS nutzt.
Entscheidend war, dass ein speziell präparierter JSON-Body mit manipulierten Feldern, die mit "as " beginnen, abgesendet wurde. Damit konnte der Angreifer nicht nur Klasseninstanzen erstellen, sondern diese auch so konfigurieren, dass schädlicher PHP-Code ausgeführt wird. Der Angreifer nutzte diesen Mechanismus zur initialen Codeausführung, indem er die PHP-Funktion phpinfo() auslöste, was eine einfache Bestätigung der Codeausführbarkeit darstellte. Im nächsten Schritt erfolgte die Einschleusung von schädlichem PHP-Code über die Rückkehr-URL eines Umleitungsmechanismus. Das CraftCMS schreibt bei einer Authentifizierungs-Weiterleitung diese URL inklusive der vom Angreifer eingefügten PHP-Anweisungen in eine serverseitige Session-Datei – üblicherweise im Verzeichnis /var/lib/php/sessions.
Anschließend wurde diese Session-Datei durch die manipulierte JSON-Anfrage mit der Klasse PhpManager des Yii-Frameworks inkludiert und ausgeführt, was den Fehler in der Zugriffskontrolle ausnutzte. Als Folge konnte der Angreifer eine alte PHP-Dateimanagement-Software unter dem Namen filemanager.php auf den Server bringen. Diese Datei diente als Ergänzung, um weitere schädliche Dateien hochzuladen oder vom Server aus Schaden anzurichten. Die Datei wurde später unter autoload_classmap.
php umbenannt, um womöglich einer Erkennung zu entgehen. Im Beobachtungszeitraum erfolgten daraufhin mehrere Upload-Aktionen, Zugriff auf verdächtige PHP-Dateien und Veränderungen an legitimen CMS-Dateien, was letztendlich zum Ausfall der betroffenen Website führte. Die Untersuchung zeigte, dass verschiedene IP-Adressen für den Angriff benutzt wurden, darunter Adressen aus einer Reihe von Ländern. Die automatisierten Skripte zeigten unterschiedliche User-Agent-Strings, was darauf hindeutet, dass der Angreifer manuell und automatisiert agierte. Interessant sind die fehlgeschlagenen ersten Versuche, bei denen der Angreifer noch mit nicht korrekt konfigurierten Payloads arbeitete, die aber mit der Zeit verfeinert wurden.
Die technische Analyse offenbart die Feinheiten und die Tiefe der Sicherheitslücke. Die Nutzung von Yii-Behaviors erlaubt es, zur Laufzeit zusätzliche Funktionalitäten ohne Änderung der Basisklassen hinzuzufügen. Diese Flexibilität wurde jedoch in diesem Fall zum Einfallstor. Die Möglichkeit, den Parameter "as <name>" mit einem speziellen Array inklusive der Felder "class" und "__class" zu übermitteln, führte dazu, dass ein nicht behördeter Klasseninstanzierungsprozess startete, der den des Angreifers festgelegten PHP-Code ausführte. Die Besonderheit ist die Umgehung der üblichen Kontrollmechanismen dank zweier Klassen Angaben.
CraftCMS prüft, ob der angegebene Wert in "class" ein Subtyp von Yii Behavior ist, lässt jedoch zudem die Presence des Parameters "__class" zu, der für eine andere Klasse steht, die den eingekapselten PHP-Code ausführt. Die hier eingesetzte Guzzle-Komponente ruft in ihrem Destruktor eine beliebige Funktion auf, wodurch die phpinfo()-Funktion zum Einsatz kommen kann. Durch die doppelte Klassenzuweisung konnte somit eine Instanziierung erfolgen, die nicht erwartet wurde. Die volle RCE ermöglichte es, beliebigen PHP-Code am Zielserver auszuführen. Die Persistenz wurde durch Ablegen von PHP-Shells und Dateimanagern erreicht.
Alternativ konnten auch Admin-Seiten attackiert werden, durch Einfügen von Code in die Rückkehr-URL bei einer Redirect-Anfrage beim Login, die dann über die Session-Include-Technik ausgeführt wurde. Mit Blick auf den Schutz empfehlen die Experten, die CraftCMS Version auf die geschlossenen Versionen 3.9.15, 4.14.
15 und 5.6.17 umgehend zu aktualisieren, die im April 2025 veröffentlicht wurden. Zusätzlich zeigt die Analyse, dass bloßes Upgrade bereits kompromittierte Dateien nicht entfernt, weshalb eine vollständige Überprüfung der Webserver inklusive Dateien und Logs zwingend ist. Der Vorfall unterstreicht die Bedeutung detaillierter Log-Analysen.
CraftCMS führt Zugriffsprotokolle, in denen auffällige POST-Anfragen auf den Endpunkt generate-transform erkennbar sind. Ein weiteres Erkennungsmerkmal sind GET-Anfragen mit 302-Redirects zu Admin-Seiten mit eingeschleusten PHP-Code-Snippets in den Parametern. Die Webserver-Access-Logs können Hinweise auf die verwendeten User-Agents und IP-Adressen geben. Die Metriken der Untersuchung zeigten, dass etwa 35.000 verschiedene Domains CraftCMS Instanzen betreiben; rund 13.
000 davon waren prinzipiell verwundbar. Von dieser Anzahl sind rund 300 als kompromittiert identifiziert, basierend auf dem Vorhandensein von zurückgelassenen Manipulationsdateien. Die geografische Verteilung konzentriert sich vor allem auf die USA, aber teils auch auf andere Regionen weltweit. Angesichts der verwendeten Techniken handelt es sich um eine hochentwickelte Kampagne, die mehrere Tage und unterschiedliche Methoden einsetzte, um die Lücke auszunutzen und die Kontrolle über die Systeme zu erlangen. Die Ausnutzung der Kombination aus Framework-Features (Yii-Behaviors) und PHP-Sessions als Vektor für Schadcode-Execution zeigt, wie kleine Designschwächen zu kritischen Sicherheitslücken führen können.
Neben dem technischen Angriff sollten Administratoren daher auf folgende Maßnahmen achten: Regelmäßige Updates und Sicherheitspatches einspielen, Webserver-Logs kontinuierlich auf verdächtige Anfragen überwachen, regelmäßige Backups erstellen, um kompromittierte Systeme schnell wiederherzustellen, sowie den Einsatz von Web Application Firewalls (WAFs) und anderen Intrusion Detection Systemen. Der Fall liefert wertvolle Lehren für die gesamte PHP- und CMS-Community. Die Nutzung von Drittbibliotheken wie Guzzle sollte mit Bedacht erfolgen, ebenso wie die sorgfältige Prüfung, welche Nutzereingaben dynamisch verarbeitet werden. Die Untersuchung von Orange Cyberdefense ist ein gelungenes Beispiel für professionelle Incident Response und Threat Hunting, bei der letztlich Schwachstellen geschlossen und die Sicherheit von Webplattformen verbessert wurde. Durch die Veröffentlichung von Skripten zur automatisierten Erkennung und Ausnutzung ist es außerdem möglich, frühzeitig potenziell betroffene Systeme zu identifizieren und Gegenmaßnahmen zu ergreifen.
Diese Transparenz trägt dazu bei, dass Angreifer nur eine eng begrenzte Zeitfenster für erfolgreiche Attacken vorfinden. Zusammenfassend zeigt die Kampagne um die RCE-Schwachstelle in CraftCMS exemplarisch, wie modernste CMS durch eine Verkettung von Designfehlern und fehlender Schutzschichten einem erheblichen Risiko ausgesetzt sind. Die präzise forensische Dokumentation, technische Einblicke und konkrete Handlungsempfehlungen bieten wertvolle Unterstützung für Entwickler, Administratoren und Sicherheitsexperten auf dem Weg zu einem sicheren Web. Eine konsequente Umsetzung der empfohlenen Updates und Sicherheitspraktiken bleibt unerlässlich, um ähnliche Angriffe künftig zu verhindern und den Betrieb kritischer Webinfrastrukturen nachhaltig zu gewährleisten.