
CVE-2026-53767 + CVE-2026-53768 - Authentifizierte RCE in Chyrp Lite ≤ 2026.01 durch Umgehung der uploads_path-Blocklist und fehlende Erweiterungsvalidierung
CVE-2026-53767 + CVE-2026-53768 - Authentifizierte RCE in Chyrp Lite ≤ 2026.01 ("Iriomote")
Verketteter Angriff: Umgehung der Blocklist für
uploads_path(CVE-2026-53768) + fehlende Dateiendungsvalidierung inadmin_update_upload()(CVE-2026-53767) → Remote Code Execution alswww-data
Chyrp Lite ≤ 2026.01 ist anfällig für eine authentifizierte Remote-Code-Execution-Kette, die von jedem Benutzer mit den Berechtigungen change_settings und edit_upload ausgenutzt werden kann (Standard: Administrator).
| CVE | CVE-2026-53767 · CVE-2026-53768 |
| CVSS | 9.1 Kritisch (AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:H) |
| Betroffen | xenocrat/chyrp-lite ≤ 2026.01 |
| Behoben | Commit 1489dc9 |
| Advisories | GHSA-8h86-c24h-5jp3 · GHSA-r9w7-5h94-wq5x |
| Melder | iltosec |
python chyrp_rce_poc.py -h
usage: chyrp_rce_poc.py [-h] -u URL -U USERNAME -P PASSWORD [-c CMD] [-i]
[--config CONFIG] [--restore RESTORE]
python chyrp_rce_poc.py -u http://127.0.0.1/chyrp -U admin -P 'fJ945@5:3s8v+X:'
python chyrp_rce_poc.py -u http://127.0.0.1/chyrp -U admin -P 'fJ945@5:3s8v+X:' -c 'cat /etc/passwd'

python chyrp_rce_poc.py -u http://127.0.0.1/chyrp -U admin -P 'fJ945@5:3s8v+X:' -i

Schritt 1 - Authentifizieren
Schritt 2 - uploads_path auf tools/ umleiten (nicht in der Blocklist)
Bild
Bild
Schritt 3 - tools/docgen.php überschreiben (keine Endungsprüfung beim Ersetzen)
Bild
Bild
Schritt 4 - Ausführen
http://127.0.0.1/chyrp/tools/docgen.php?cmd=id
Bild
uploads_pathincludes/controller/Admin.php validiert uploads_path anhand einer hartkodierten Blocklist:
admin | ajax | feathers | fonts | includes | modules | themes
Das Verzeichnis tools/ – das mit Chyrp Lite ausgeliefert wird und ausführbare .php-Dateien enthält (docgen.php, gettext.php, triggers.php) – ist nicht aufgeführt. Die Übermittlung von uploads_path=tools besteht die Validierung und wird in config.json.php gespeichert.
admin_update_upload()upload_tester() (includes/helpers.php) prüft nur den PHP-Upload-Fehlercode und die Dateigröße – es führt keine Endungsvalidierung an der Ersatzdatei durch. Der Zieldateiname wird aus $_POST['file'] übernommen und gegen den aktuellen uploads_path aufgelöst. Da tools/docgen.php bereits existiert (was die is_file()-Prüfung erfüllt), wird es stillschweigend mit beliebigem Inhalt überschrieben.
Hinweis: Die
--config-Flagge verweist für die CSRF-Token-Berechnung aufconfig.json.php. Wenn die Datei lokal nicht lesbar ist, extrahiert das Skript das Token automatisch aus der HTML-Antwort.
Aktualisieren Sie auf eine Version, die Commit 1489dc9 oder später enthält.
Es wurden zwei unabhängige Korrekturen angewendet:
Korrektur 1 – tools (und licenses) zur uploads_path-Blocklist hinzufügen:
// Before
"/^$qdir((admin|ajax|feathers|fonts|includes|modules|themes)$qdir|$)/"
// After
"/^$qdir((admin|ajax|feathers|fonts|includes|licenses|modules|themes|tools)$qdir|$)/"
Korrektur 2 – Die Dateiendung der hochgeladenen Datei in admin_update_upload() gegen die Whitelist validieren:
$new_extension = strtolower(pathinfo($_FILES['upload']['name'], PATHINFO_EXTENSION));
$whitelist = upload_filter_whitelist();
if (!in_array($new_extension, $whitelist))
error(__("Error"), __("File type is not allowed."), code: 422);
Dieses PoC wird ausschließlich zu Bildungs- und Forschungszwecken veröffentlicht. Verwenden Sie es nur gegen Systeme, die Ihnen gehören oder für deren Tests Sie eine ausdrückliche schriftliche Genehmigung haben. Der Autor übernimmt keine Verantwortung für Missbrauch.