Sensitive File Disclosure / Server-Side File Read
Beschreibung
Die `dataUrl()` Die Zweigfunktion ist in der Twig-Sandbox-Erlaubnisliste von Craft enthalten, so dass jedem Bedienfeldbenutzer die Berechtigung "utility:system-messages" erteilt wird, eine dateilesende Nutzlast in System-E-Mail-Vorlagen einzubetten. Wenn diese E-Mails gesendet werden, liest der Server die Zieldatei und gibt ihren Inhalt als Base64-kodierte Daten-URL zurück, die in den E-Mail-Body eingebettet ist. Die .env-Datei, die in der Regel das Datenbankpasswort, CRAFT SECURITY KEY und API-Schlüssel von Drittanbietern enthält, führt alle bestehenden Craft-Schutzüberprüfungen "dataUrl()" durch und ist vollständig exfiltriert. Der Erhalt von CRAFT SECURITY KEY ermöglicht es einem Angreifer, Sitzungstoken zu fälschen und zur vollständigen Übernahme des Administratorkontos zu eskalieren. ## Details Betroffene Versionen: Craft CMS 4.x, 5.x (bestätigt gegen 5.9.19) Die Sicherheitsanfälligkeit ergibt sich aus der Kombination von drei Codefakten: 1. dataUrl befindet sich in der Twig-Sandbox-Erlaubnisliste src/config/twig-sandbox.php, Zeile 115: php'allowedFunctions' => [ ... 'dataUrl', // ← ermöglicht das Lesen von Dateien in Sandbox-Vorlagen ... ], 2. Html::dataUrl() blockiert nicht dotfiles src/helpers/Html.php, Zeilen 1065-1090. Die Funktion wendet vier Prüfungen an, bevor eine Datei gelesen wird: Muss sich innerhalb des Projekt-Roots befinden .env ist an der Wurzel Muss sich nicht in einem Systemverzeichnis befinden (config/, vendor/, storage/, templates/) .env ist nicht muss keine .php-Datei sein .env hat keine Erweiterung Datei muss existieren .env existiert immer in einer Craft-Installation Es gibt keine Überprüfung für dotfiles oder speziell für .env. Alle vier Prüfungen gehen still und file get contents() wird aufgerufen, wobei das Ergebnis als data:text/plain zurückgegeben wird;base64,.... 3. Der Systemnachrichtenkörper wird über renderSandboxedString() src/mail/Mailer.php, Zeilen 181-183 gerendert: php$subject = $view->renderSandboxedString($systemMessage->subject, $variables); $textBody = $view->renderSandboxedString($systemMessage->body, $variables); $htmlBody = $view->renderSandboxedString($systemMessage->renderSandboxedString($systemMessage->renderSandboxedString($systemMessage->renderSandboxedString)($systemMessage->renderSandboxedString($systemMessage->body, $variables); $htmlBody = $view->renderSandboxedString($systemMessage- Jeder in einer Systemnachricht gespeicherte Körperinhalt wird innerhalb der Twig-Sandbox ausgeführt, wenn die E-Mail rendert. Da dataUrl in allowedFunctions ist, erlaubt die Sandbox-Richtlinie die Ausführung ohne Einschränkung. Zugriffskontrolle: Die Utility:System-Messages-Berechtigung ist eine Nicht-Admin-CP-Berechtigung, die jeder Benutzergruppe über Einstellungen > Benutzer > Gruppen. Es ist nicht auf Admins beschränkt. ## Impact Vulnerability type: Sensitive File Disclosure / Server-Side File Read Wer ist betroffen: Jede Craft CMS 4.x- oder 5.x-Installation, bei der mindestens einem Benutzer des Bedienfelds, der kein Administrator ist, die Berechtigung utility:system-messages erteilt wurde und der E-Mail-Versand konfiguriert ist. Referenzen: - https://github.com/craftcms/cms/pull/18559
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.18, 5.10.
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.