Local File System Validation Bypass Leading to File Overwrite, Sensitive File Access, and Potential Code Execution
Beschreibung
### Zusammenfassung Eine Schwachstelle in CraftCMS ermöglicht es einem Angreifer, die Validierung des lokalen Dateisystems zu umgehen, indem er ein doppeltes `file://`-Schema verwendet (z. B. `file://file:////`). Dies ermöglicht es dem Angreifer, sensible Ordner als Dateisystem anzugeben, was zu einem potenziellen Dateiüberschreiben durch bösartige Uploads, unbefugten Zugriff auf sensible Dateien und unter bestimmten Bedingungen zur Remotecodeausführung (RCE) über Server-Side Template Injection (SSTI) Payloads führt. Beachten Sie, dass dies nur funktioniert, wenn Sie ein authentifiziertes Administratorkonto bei [allowAdminChanges aktiviert](https://craftcms.com/docs/5.x/reference/config/general.html#allowadminchanges) haben. https://craftcms.com/knowledge-base/securing-craft#set-allowAdminChanges-to-false-in-production ### Details Das Problem liegt in Zeile 57 von `cms/src/helpers/FileHelper.php`, es entfernt nur `file://` auf der linken Seite. Es ist trivial, diese Desinfektion zu umgehen, indem man 2 `file://` hinzufügt, z.B. `file://file:////`. ```php public static function normalizePath($path, $ds = DIRECTORY SEPARATOR): string { // Remove any file protocol wrappers $path = StringHelper::removeLeft($path, 'file://'); // Ist dies ein UNC-Netzwerk-Share-Pfad? $isUnc = (str starts with($path, '//') || str starts with($path, '\\\')); // Normalisieren Sie den Pfad $path = parent::normalizePath($path, $ds); // Wenn es UNC ist, fügen Sie diese Schrägstriche vorne hinzu, wenn ($ isUnc) { $ Path = $ ds . $ ds . ltrim($ Path, $ ds); } Return $ Path; } `` ### PoC 1. Melden Sie sich mit einem Admin-Konto an und navigieren Sie zu „Einstellungen → Assets und erstellen Sie dann ein neues Volume. 2. Erstellen Sie im Abschnitt Asset Filesystem ein neues Dateisystem und setzen Sie den Basispfad auf "file://file:////vendor". Ohne Präfix schlägt die Auswahl fehl.  Mit dem doppelten Präfix `file://` gelingt die Auswahl.  3. Zugriff auf Assets von der linken Navigationsleiste, dann laden Sie eine Datei in dieses Volume hoch.  4. Die Datei wird erfolgreich hochgeladen und in dem angegebenen sensiblen Ordner (z. B. `/vendor`) gespeichert.  SSTI-Nutzlasten können in den Ordner "/templates" hochgeladen werden, obwohl die vollständige Codeausführung während des Testens nicht erreicht wurde, waren einige Nutzlasten immer noch erfolgreich, was unter anderem zu einer Offenlegung sensibler Informationen führte.  Impact-Angreifer, die ein Admin-Konto kompromittieren (Der Admin-Benutzer ist nicht dem Serverbesitzer gleich), können diesen Fehler ausnutzen, um sensible Ordner als Basispfad des Dateisystems zuzuweisen. Wenn beispielsweise der Pfad `/templates` angegeben ist (z. B. `file://file:////var/www/html/templates`), könnte der Angreifer SSTI-Nutzlasten hochladen. Während CraftCMS eine strenge SSTI-Input-Entsorgung enthält, ist RCE möglicherweise immer noch möglich, wenn der Angreifer ..
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: 5.4.6, 4.12.5.
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.