
MongoDB CVE-2025-14847 Scanner de fuite de mémoire heap | Vulnérabilité OP_COMPRESSED zlib | Bug Bounty & Outil Red Team
MongoBleed est un scanner PoC haute performance pour CVE-2025-14847, une vulnérabilité de divulgation de mémoire tas avant authentification dans le pilote MongoDB C++. L'outil est conçu pour l'identification rapide d'instances vulnérables sur de vastes plages réseau.
La vulnérabilité provient d'une lecture hors limites (OOB) dans le traitement par le protocole filaire MongoDB des messages OP_COMPRESSED.
Lorsqu'un serveur reçoit un paquet OP_COMPRESSED, il se base sur le champ uncompressedSize fourni par l'attaquant pour allouer un tampon de décompression. Si les données décompressées réelles sont significativement plus petites que la taille uncompressedSize déclarée, le pilote ne tronque ni ne nettoie le tampon. En conséquence, le serveur renvoie le bloc mémoire alloué dans son intégralité, qui peut contenir des données de tas non initialisées, exposant potentiellement des informations sensibles telles que des jetons de session, des pointeurs internes ou des fragments d'autres requêtes de base de données.
asyncio pour un balayage à haute concurrencevulnerable_targets.txtgit clone https://github.com/Black1hp/mongobleed-scanner/
cd mongobleed-scanner
Aucune dépendance externe requise (bibliothèque standard Python uniquement).
Utilisation de base :
python3 mongobleed.py -i targets.txt
Configuration avancée :
python3 mongobleed.py -i targets.txt -c 100 -t 5
-i : Fichier d'entrée contenant les cibles (IP, domaine ou IP:port)-c : Niveau de concurrence (défaut : 50)-t : Délai d'expiration de connexion en secondes (défaut : 5)Le scanner identifie la vulnérabilité en exploitant une discordance de taille lors de la phase de décompression BSON :
OP_COMPRESSED contenuant une petite charge utile compressée avec zlib par exemple 16-30 octets .uncompressedSize dans l'en-tête du paquet est intentionnellement défini à une valeur beaucoup plus grande (par exemple, 64 Ko).MessageLength qui correspond à la grande taille de tampon demandée plutôt qu'à la taille réelle de la charge utile décompressée.uncompressedSize fournie par l'attaquant pour définir la longueur de la réponse. Comme il ne met pas à jour cette longueur avec les octets réels écrits lors de la décompression, il envoie aveuglément l'intégralité du tampon de tas alloué—y compris la mémoire non initialisée—au client.Remarque : La vidéo ci-dessus montre le scanner identifiant plusieurs instances vulnérables et capturant des fragments de tas en temps réel.
Black1hp Chercheur en sécurité | Chasseur de bugs | Membre d'équipe rouge
Cet outil est destiné uniquement à des fins de tests de sécurité et de recherche autorisés. L'auteur n'est pas responsable de toute utilisation non autorisée ou des dommages résultant de cet outil.