Authenticated path traversal in `assets/icon` allows local `.svg` file read
Beschreibung
### Zusammenfassung Eine authentifizierte Pfadtraversal in `Assets/icon` ermöglicht das Lesen einer lokalen SVG-Datei, indem Traversalsequenzen im `Extension`-Parameter übergeben werden. Das Problem wird durch File Existence Checks vor der Erweiterungsvalidierung verursacht. ### Details Der Endpunkt: - `src/controllers/AssetsController.php:1115-1123` - `action Icon(string $extension)` ruft `Assets::iconPath($extension)` auf und gibt `sendFile($path, ...)` zurück. In `Assets::iconPath()`: - Path wird aus benutzergesteuerter `Extension` aufgebaut: - `src/helpers/Assets.php:906-909` - Wenn `file exists($path)` wahr ist, wird Pfad sofort zurückgegeben: - `src/helpers/Assets.php:910-912` Validierung existiert in `Assets::iconSvg()`: - `preg match('/^\w+$/', $extension)` - `src/helpers/Assets.php:927-931` Diese Validierung wird jedoch nur erreicht, wenn `iconPath()` **nicht** eine Datei findet. Traversal-Nutzlasten, die sich auf bestehende `.svg`-Dateien auflösen, umgehen also die Validierung und werden von `sendFile()` bedient. ### Impact - Authentifizierte Benutzer können lokale .svg-Dateien lesen, die für den Bewerbungsprozess zugänglich sind. ### Referenzen - https://github.com/craftcms/cms/commit/30f5f1a8d6edf0f3a00be72c42c78d9dc7d72d5c
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.7, 5.9.13.
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.