参考 CVE : CVE-2025-14847
本仓库是一个教育性实验,用于演示数据库线缆协议中常被描述为“压缩帧/大小元数据内存泄露”的一类问题的概念。
它旨在支持防御性理解:MongoDB 网络压缩如何协商和组帧,大小字段为何重要,以及健壮的解析器如何防止意外的内存暴露。
关于 CVE 参考的说明:本实验围绕被引用为 CVE-2025-14847 的概念框架构建。本仓库并未验证、复现或利用特定供应商的错误,也未声称任何特定 MongoDB 版本受到影响。它侧重于通用故障模式(压缩载荷周围大小元数据不匹配)及缓解措施。
本仓库未包含(也不应被用作)任何特定 CVE 的 MongoDB 版本是易受影响或已修复的证据。
要为报告正确地记录“易受影响”与“已修复”版本,请使用该 CVE 的官方供应商公告/发布说明并进行引用。
验证您正在运行的版本的实际步骤:
docker compose exec mongodb mongod --versiondocker compose exec mongodb mongosh --quiet --eval "db.version()"mongod --versionmongosh --quiet --eval "db.version()"如果您分享所使用的公告链接,我可以格式化一个简洁的“受影响/已修复”表格放在自述文件中,无需猜测。
本实验说明了压缩帧/大小元数据不匹配的故障模式:
OP_COMPRESSED 信封增加了更多大小字段(外部消息长度、声明的未压缩大小以及内部消息自身的长度)。详见 protocol_overview.md 中的详细帧结构讲解。
完成本实验后,您应能够:
它具备以下功能:
compression: ["zlib"] 的未压缩 hello 消息OP_COMPRESSED 消息它不具备以下功能:
docker-compose.yml – 运行一个启用了 zlib 压缩且仅监听 localhost 的 MongoDB 容器。protocol_overview.md – 线缆协议 + BSON + 压缩工作流程 + 概念性漏洞解释。mitigation.md – 防御指导:打补丁、配置和检测思路。lab_probe.py – 原始探测程序,协商压缩并安全记录消息大小。在本仓库目录下:
docker compose up -d
确认正在运行:
docker compose ps
python .\lab_probe.py
预期输出:
hello 中协商的压缩器hello 并记录压缩和解压缩后的消息大小python .\lab_probe.py --toy-demo
仅运行本地解析检查,以说明大小验证为何重要。
docker compose down
127.0.0.1:27017。