
Explot, Lab, Scanner - externe et conteneur Docker, pour SMongobleed-CVE-2025-14847 plus phoenix security uploader
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.
| 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 |
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.
// 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
┌─────────────────────────────────────────────────────────────────────────────┐
│ 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 │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
| Version | Plage vulnérable | Version corrigée | Statut |
|---|---|---|---|
| 8.2.x | 8.2.0 - 8.2.2 | 8.2.3 | ✅ Corrigée |
| 8.0.x | 8.0.0 - 8.0.16 | 8.0.17 | ✅ Corrigée |
| 7.0.x | 7.0.0 - 7.0.27 | 7.0.28 | ✅ Corrigée |
| 6.0.x | 6.0.0 - 6.0.26 | 6.0.27 | ✅ Corrigée |
| 5.0.x | 5.0.0 - 5.0.31 | 5.0.32 | ✅ Corrigée |
| 4.4.x | 4.4.0 - 4.4.29 | 4.4.30 | ✅ Corrigée |
| 4.2.x | Toutes les versions | Aucune | ⚠️ Fin de vie |
| 4.0.x | Toutes les versions | Aucune | ⚠️ Fin de vie |
| 3.6.x | Toutes les versions | Aucune | ⚠️ Fin de vie |
| Date | Événement |
|---|---|
| 15 déc. 2025 | Vulnérabilité identifiée ; ticket interne SERVER-115508 |
| 19 déc. 2025 | Correction publiée, CVE-2025-14847 divulguée |
| 24 déc. 2025 | Flotte MongoDB Atlas corrigée |
| 26 déc. 2025 | PoC publique « mongobleed » publiée |
| 28 déc. 2025 | Exploitation observée dans la nature |
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
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
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
cd code-scan
# Scanner un projet pour trouver des versions MongoDB vulnérables
python3 main.py scan /path/to/project