CVE-2025-14847 — MongoBleed
- CVE-2025-14847 (MongoBleed) fuit la mémoire heap du serveur MongoDB sans authentification.
- La cause racine est la confiance faite à l'uncompressedSize fourni par le client lors de la décompression OP_COMPRESSED.
- La mémoire fuitée peut exposer identifiants, mots de passe, jetons et configuration ; appliquez les versions corrigées.
CVE-2025-14847, également connue sous le nom de MongoBleed, est une vulnérabilité qui permet aux attaquants de lire des données non autorisées depuis la mémoire du tas du serveur exécutant MongoDB — sans aucune authentification.
MongoDB est une base de données NoSQL open source orientée document. Elle stocke les données dans des formats tels que JSON, BSON et XML, et prend en charge les opérations de recherche, de suppression et de mise à jour sur ces données.
Contexte
MongoDB utilise un protocole basé sur les sockets, appelé le MongoDB Wire Protocol, entre le client et le serveur. Une fois la connexion établie, la communication s'effectue par l'envoi et la réception de paquets de messages OP_MSG. Pour un transfert performant de charges utiles volumineuses, MongoDB utilise le format de paquet OP_COMPRESSED.
Le paramètre qui compte est uncompressedSize — « la taille que les données compressées envoyées du client au serveur occuperont en mémoire une fois décompressées sur le serveur ».
Cause racine
// ligne 72 — la valeur du client est affectée à length length = uncompressedSize; // ligne 73 — uncompress calcule la taille réelle dans length uncompress(output.data(), &length, input.data(), input.size()); // ligne 83 — CAUSE RACINE // length a été mis à jour, mais output.length() renvoie toujours la taille du client ! return SharedBuffer::allocate(output.length());
À l'intérieur de decompressData, la mémoire est allouée selon la valeur uncompressedSize fournie par le client. Les données sont lues depuis le tas du serveur à la taille choisie par le client, puis renvoyées au client comme s'il s'agissait du résultat de la décompression. La mémoire ainsi divulguée peut contenir des noms d'utilisateur, des mots de passe, des jetons et des données de configuration du système.
La fuite BSON
Les objets de MongoDB sont sérialisés/désérialisés vers le client au format BSON (Binary JSON). Lors de l'analyse, la fin d'une valeur est détectée par un terminateur nul \0. Lorsque le BSON fourni par le client ne se termine pas par \0, Mongo continue de parcourir la région allouée à sa recherche. Comme aucun objet BSON valide ne se forme, une erreur est levée — et ce message d'erreur divulgue le contenu de la mémoire.
Le correctif
La vulnérabilité a été corrigée en utilisant la longueur réelle des données décompressées lors de l'opération decompressData, plutôt que la valeur fournie par le client.
- 8.2.x — 8.2.2 et versions antérieures
- 8.0.x — 8.0.16 et versions antérieures
- 7.0.x — 7.0.27 et versions antérieures
- 6.0.x — 6.0.26 et versions antérieures
- 5.0.x — 5.0.31 et versions antérieures
Questions fréquentes
Qu'est-ce que MongoBleed (CVE-2025-14847) ?
Une fuite de mémoire heap non authentifiée dans MongoDB. En envoyant un paquet OP_COMPRESSED forgé, un attaquant fait renvoyer au serveur plus de mémoire que prévu, fuitant le contenu du heap — identifiants, jetons — vers le client.
Quelles versions de MongoDB sont touchées et comment corriger ?
Les versions jusqu'à 8.2.2, 8.0.16, 7.0.27, 6.0.26 et 5.0.31 sont touchées. Le correctif utilise la vraie longueur décompressée au lieu de la valeur du client ; la mise à niveau vers une version corrigée referme la fuite.

