Zum Inhalt springen
← Zurück zum Cyberlagebild
Zuletzt aktualisiert 25.08.2026 10:34

Remote Code Execution via unrestricted file extension

CVSS 7.21 Quelle

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**![1](https://user-images.githubusercontent.com/30969523/228049254-6c3a9897-c26a-46a5-96ad-41c7b769116a.png) **Schritt 2)** Erstellen Sie ein neues Asset-Volumen. **Asset Filesystem: template** ![2](https://user-images.githubusercontent.com/30969523/228049839-d2d42245-fa6e-4245-9fd2-fd1b9f4a74.png) **Schritt 3)** Upload poc file(.txt , .js , .json , etc.) with twig template rce payload ```twig {{''}} {{'cat /etc/passwd')|map('passthru')|map('passthru')|join}} ```![7](https://user-images.githubusercontent.com/30969523/228051307-623b0e-af0f-aff6b16f8d87.png)![5](https://user-images.githubusercontent.com/30969523/228051307-6

HerstellerPixel & Tonic
ProduktCraft CMS
ProduktfamilieCraft Cms
Betroffene Versionen4.0.0 – 4.4.5
Behobene Versionen4.4.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.

PrioritätGelb
EinordnungZeitnah behandeln: hohes technisches Risiko.

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.