
MongoBleed : outil de découverte de fuites de mémoire pour CVE-2025-14847
MongoBleed est un outil d'audit de sécurité haute performance conçu pour détecter et démontrer CVE-2025-14847. Cette vulnérabilité permet à un attaquant distant non authentifié de divulguer des fragments de mémoire de tas non initialisée d'un serveur MongoDB en exploitant une faille de décalage de longueur dans la logique de décompression zlib.
Pour tester ce script en toute sécurité, utilisez le fichier docker-compose.yml suivant afin de lancer une instance MongoDB 8.2.2 vulnérable.
Exécutez l'instance avec :
docker-compose up -d
Assurez-vous que Python 3.8+ est installé. Aucune bibliothèque externe n'est requise (utilise les modules intégrés socket, zlib et concurrent.futures).
Analyse de base
python mongobleed.py --host 127.0.0.1 --port 27017
Options avancées
python mongobleed.py --host 127.0.0.1 --threads 50 --range 100 10000 --output leak_dump.bin
Le script envoie un message OP_COMPRESSED (opcode 2012) malveillant. Il ment sur la longueur non compressée de la charge utile. Le serveur MongoDB alloue un buffer de tas de la taille « mentie », y décompresse une très petite quantité de données, puis renvoie par erreur la totalité du buffer non initialisé au client.
La seule solution permanente pour corriger CVE-2025-14847 est de mettre à niveau le binaire MongoDB vers une version incluant un correctif pour la logique de validation de longueur OP_COMPRESSED.
Correctif permanent (mise à niveau)
Appliquez les correctifs officiels de MongoDB. Ces versions incluent une vérification obligatoire garantissant que la taille des données décompressées correspond au champ uncompressedSize de l'en-tête du message.
Si une mise à niveau immédiate n'est pas possible en raison des exigences de disponibilité, vous pouvez bloquer le vecteur d'attaque en modifiant la configuration du serveur.
Désactiver le compresseur vulnérable (recommandé)
La vulnérabilité est spécifique à l'implémentation zlib. Vous pouvez désactiver zlib et forcer le serveur à utiliser snappy ou zstd, qui ne sont pas affectés par ce bug spécifique de lecture hors limites du tas.
Via la ligne de commande : Redémarrez l'instance mongod avec le drapeau suivant (notez l'exclusion de zlib) :
mongod --networkMessageCompressors snappy,zstd
Via le fichier de configuration (mongod.conf) :
net:
compression:
compressors: snappy,zstd
Cet outil est destiné uniquement à des tests de sécurité pédagogiques et autorisés. L'accès non autorisé à des systèmes informatiques est illégal. L'auteur n'est pas responsable de toute utilisation abusive de cet outil. Corrigez immédiatement vos instances MongoDB vers les versions 8.2.3+ ou 8.0.17+.
| Branche majeure | Version sécurisée recommandée |
|---|
| MongoDB 8.2 | Mettre à niveau vers 8.2.3 ou version ultérieure |
| MongoDB 8.0 | Mettre à niveau vers 8.0.17 ou version ultérieure |
| MongoDB 7.0 | Mettre à niveau vers 7.0.28 ou version ultérieure |
| MongoDB 6.0 | Mettre à niveau vers 6.0.27 ou version ultérieure |
| MongoDB 5.0 | Mettre à niveau vers 5.0.32 ou version ultérieure |
| MongoDB 4.0 | Mettre à niveau vers 4.4.30 ou version ultérieure |