Les clients Akamai Hunt concernés ont déjà reçu une cartographie détaillée des actifs vulnérables, accompagnée de mesures d'atténuation exploitables.
Synthèse
Le 19 décembre 2025, une nouvelle vulnérabilité affectant la majorité des déploiements MongoDB a été rendue publique sur des instances MongoDB.
Cette vulnérabilité, baptisée MongoBleed, réside dans la gestion par MongoDB des messages compressés zlib et permet à des clients non authentifiés de divulguer de la mémoire de tas non initialisée à partir de la base de données.
Cette CVE s'est vu attribuer un score CVSSv4 de 8,7.
Le 29 décembre 2025, la Cybersecurity and Infrastructure Security Agency (CISA) a ajouté la CVE-2025-14847 à son catalogue Known Exploited Vulnerabilities (KEV), confirmant une exploitation active. En parallèle, la télémétrie d'Akamai indique des communications MongoDB dans environ 62 % des réseaux d'entreprise.
Dans cet article, nous proposons une analyse technique détaillée de MongoBleed, une présentation des versions MongoDB affectées (avec une analyse des correctifs), ainsi que des recommandations d'atténuation pratiques, notamment des requêtes Akamai Guardicore Segmentation Insight pour identifier les actifs vulnérables.
Informations sur cette vulnérabilité
MongoBleed provient de la façon dont MongoDB traite les messages compressés du protocole wire, une fonctionnalité activée par défaut.
MongoDB communique au moyen de messages marqués par l'opcode OP_MSG, dont les charges utiles sont encodées au format Binary JSON (BSON). Lorsqu'un message compressé est envoyé, la charge utile OP_MSG d'origine est encapsulée dans une structure OP_COMPRESSED.
Un message OP_COMPRESSED inclut la charge utile OP_MSG et la taille attendue de la charge utile après décompression.
struct OP_COMPRESSED {
struct MsgHeader {
int32 messageLength;
int32 requestID;
int32 responseTo;
int32 opCode;
};
int32_t originalOpcode;
int32_t uncompressedSize;
uint8_t compressorId;
char *compressedMessage;
};
Un attaquant peut manipuler le champ uncompressedSize et le rendre supérieur à la taille réelle de la charge compressée. Cette valeur n'étant pas validée, cette manipulation entraîne l'allocation d'un tampon surdimensionné, rempli de mémoire de tas non initialisée.
La mémoire divulguée peut contenir, selon ce qui occupait précédemment le tas, des fragments de mots de passe en texte clair, des identifiants, des clés API ou d'autres données sensibles conservées dans le tas.
La fuite est encore amplifiée par la logique de gestion des erreurs de MongoDB. Lorsqu'un objet BSON malformé envoyé ne contient pas de caractère de terminaison nul, le serveur continue à analyser la mémoire jusqu'à en rencontrer un. En cas d'échec de l'analyse, le serveur renvoie une réponse d'erreur qui inclut le message d'origine et le contenu de la mémoire de tas divulguée.
Au moment de la rédaction de cet article, Shodan recense plus de 213 000 instances MongoDB exposées sur Internet, tandis que Censys en recense plus de 87 000, illustrant l'ampleur de l'exposition.
Disponibilité d'exploits publics
Quelques jours après la divulgation, un exploit fonctionnel a été publié sur GitHub. Cet exploit repose sur l'envoi répété de requêtes compressées mal formées, ce qui permet aux attaquants de divulguer progressivement de larges portions de mémoire de tas.
Versions concernées
MongoBleed affecte les versions MongoDB suivantes :
8.2.0 à 8.2.2
8.0.0 à 8.0.16
7.0.0 à 7.0.27
6.0.0 à 6.0.26
5.0.0 à 5.0.31
4.4.0 à 4.4.29
Toutes les versions v3.6, v4.0 et v4.2
Analyse du correctif
Le correctif en une ligne calcule la taille réelle du message à partir de la taille de sortie, au lieu de se fier uniquement à la valeur fournie dans l'objet BSON OP_COMPRESSED. Cela garantit qu'aucune mémoire supplémentaire n'est allouée au-delà de la taille réelle du message.
- return {output.length()};
+ return length;
Atténuation
Mise à niveau vers une version corrigée
Un correctif a été introduit dans les versions 8.2.3, 8.0.17, 7.0.28, 6.0.27, 5.0.32 et 4.4.30.
La mise à niveau vers l'une de ces versions corrige complètement la vulnérabilité.
Réduction de l'exposition grâce à la segmentation du réseau
Dans l'attente de l'application d'un correctif, l'exposition peut être fortement réduite par une segmentation du réseau consistant à :
bloquer l'accès Internet entrant aux instances MongoDB sur le port TCP/27017 ;
autoriser uniquement les connexions provenant de sources explicitement approuvées.
Identification des hôtes vulnérables avec Akamai Guardicore Segmentation
Les requêtes Akamai Guardicore Segmentation Insight suivantes permettent d'identifier les hôtes exécutant des versions MongoDB vulnérables.
Actifs Linux
WITH LINUX AS (
SELECT DISTINCT name, version, source
FROM deb_packages
WHERE name = 'mongodb-org-server'
UNION ALL
SELECT DISTINCT name, version, source
FROM rpm_packages
WHERE name = 'mongodb-org-server'
),
PARSED AS (
SELECT name, source, version,
CAST(REGEX_MATCH(version, '([0-9]+)\.([0-9]+)\.([0-9]+)', 1) AS INTEGER) AS major,
CAST(REGEX_MATCH(version, '([0-9]+)\.([0-9]+)\.([0-9]+)', 2) AS INTEGER) AS minor,
CAST(REGEX_MATCH(version, '([0-9]+)\.([0-9]+)\.([0-9]+)', 3) AS INTEGER) AS patch
FROM LINUX
)
SELECT name, source, version
FROM PARSED
WHERE
(major = 8 AND minor = 2 AND patch BETWEEN 0 AND 2)
OR
(major = 8 AND minor = 0 AND patch BETWEEN 0 AND 16)
OR
(major = 7 AND minor = 0 AND patch BETWEEN 0 AND 27)
OR
(major = 6 AND minor = 0 AND patch BETWEEN 0 AND 26)
OR
(major = 5 AND minor = 0 AND patch BETWEEN 0 AND 31)
OR
(major = 4 AND minor = 4 AND patch BETWEEN 0 AND 29)
OR
(major = 3 AND minor = 6)
OR
(major = 4 AND minor IN (0, 2))
Actifs Windows
WITH WINDOWS AS (
WITH MONGO_PROGRAMS AS (
SELECT DISTINCT name, version, install_source AS source, REGEX_MATCH(name, 'MongoDB [0-9].*', 0) AS mongo_match
FROM programs
WHERE name LIKE "MongoDB%"
)
SELECT DISTINCT name, version, source
FROM MONGO_PROGRAMS
WHERE LENGTH(mongo_match) > 0
),
PARSED AS (
SELECT name, source, version,
CAST(REGEX_MATCH(version, '([0-9]+)\.([0-9]+)\.([0-9]+)', 1) AS INTEGER) AS major,
CAST(REGEX_MATCH(version, '([0-9]+)\.([0-9]+)\.([0-9]+)', 2) AS INTEGER) AS minor,
CAST(REGEX_MATCH(version, '([0-9]+)\.([0-9]+)\.([0-9]+)', 3) AS INTEGER) AS patch
FROM WINDOWS
)
SELECT name, source, version
FROM PARSED
WHERE
(major = 8 AND minor = 2 AND patch BETWEEN 0 AND 2)
OR
(major = 8 AND minor = 0 AND patch BETWEEN 0 AND 16)
OR
(major = 7 AND minor = 0 AND patch BETWEEN 0 AND 27)
OR
(major = 6 AND minor = 0 AND patch BETWEEN 0 AND 26)
OR
(major = 5 AND minor = 0 AND patch BETWEEN 0 AND 31)
OR
(major = 4 AND minor = 4 AND patch BETWEEN 0 AND 29)
OR
(major = 3 AND minor = 6)
OR
(major = 4 AND minor IN (0, 2))
Désactivation des requêtes compressées (mesure temporaire)
Si la mise à niveau ou la segmentation n'est pas possible, les requêtes compressées zlib peuvent être désactivées afin d'empêcher l'exploitation. Des instructions détaillées sont disponibles dans le MongoDB Issue Tracker officiel.
Résumé
MongoBleed (CVE-2025-14847) est une vulnérabilité MongoDB exploitable à distance qui permet à des attaquants non authentifiés de divulguer de la mémoire de tas non initialisée.
Avec des exploits publics disponibles et des dizaines de milliers d'instances exposées sur Internet, le risque de fuite de données sensibles est immédiat. Les organisations exécutant des versions affectées doivent passer sans attendre à une version corrigée ou déployer des règles de segmentation du réseau afin de limiter leur exposition.
Restez à l'écoute
Le groupe Security Intelligence d'Akamai continuera de surveiller, générer des rapports et créer des mesures d'atténuation des menaces telles que celles-ci pour nos clients et la communauté de sécurité dans son ensemble. Pour rester au fait des dernières actualités du groupe Security Intelligence d'Akamai, consultez notre page d'accueil de recherche et suivez-nous sur les réseaux sociaux.
Mots-clés