
Explication et laboratoire pour CVE-2025-14847
Référence CVE : CVE-2025-14847
Ce dépôt est un laboratoire éducatif qui illustre le concept derrière une classe de problèmes souvent décrits comme « compression framing / divulgation mémoire via les métadonnées de taille » dans les protocoles filaires de bases de données.
Il est conçu pour favoriser la compréhension défensive : comment la compression réseau MongoDB est négociée et structurée, pourquoi les champs de taille sont importants, et comment des analyseurs robustes empêchent une exposition mémoire involontaire.
Note sur la référence CVE : Ce laboratoire est construit autour de l'idée référencée sous le nom CVE-2025-14847. Ce dépôt ne valide, ne reproduit, ni n'exploite un bogue spécifique d'un fournisseur, ni ne prétend qu'une version particulière de MongoDB est affectée. Il se concentre sur le mode de défaillance général (métadonnées de taille incohérentes autour des charges utiles compressées) et les mesures d'atténuation.
Ce dépôt n'inclut pas (et ne doit pas être utilisé comme) une preuve des versions de MongoDB vulnérables ou corrigées pour une CVE spécifique.
Pour documenter correctement les versions « vulnérables » vs « corrigées » dans un rapport, utilisez un avis officiel du fournisseur / notes de version pour la CVE et citez-le.
Étapes pratiques pour vérifier ce que vous exécutez :
docker compose exec mongodb mongod --versiondocker compose exec mongodb mongosh --quiet --eval "db.version()"mongod --versionmongosh --quiet --eval "db.version()"Si vous partagez le lien de l'avis que vous utilisez, je peux formater un tableau propre « Affecté / Corrigé » dans le README sans avoir à deviner.
Ce laboratoire illustre un mode de défaillance de compression framing / inadéquation des métadonnées de taille :
OP_COMPRESSED ajoute plus de champs de taille (longueur du message externe, taille décompressée déclarée, et la propre longueur du message interne).Voir protocol_overview.md pour la description détaillée du cadrage.
À la fin du laboratoire, vous devriez être capable de :
Il fait :
hello non compressé incluant compression: ["zlib"]OP_COMPRESSED correctement cadré utilisant zlibIl ne fait PAS :
docker-compose.yml – Exécute un conteneur MongoDB avec la compression zlib activée et une exposition locale uniquement.protocol_overview.md – Protocole filaire + BSON + flux de compression + explication conceptuelle de la vulnérabilité.mitigation.md – Conseils de défense : correction, configuration et idées de détection.lab_probe.py – Sonde originale qui négocie la compression et journalise les tailles de messages en toute sécurité.Depuis le répertoire de ce dépôt :
docker compose up -d
Confirmez qu'il tourne :
docker compose ps
python .\lab_probe.py
Sortie attendue :
hellohello compressé et journalise les tailles de messages compressés et décompresséspython .\lab_probe.py --toy-demo
Ceci exécute uniquement des vérifications d'analyse locales pour illustrer pourquoi la validation de taille est importante.
docker compose down
127.0.0.1:27017 sur l'hôte.