本文最后更新于106 天前,其中的信息可能已经过时。
漏洞详情
一个名为MongoBleed (CVE-2025-14847) 的严重漏洞已被发现,该漏洞几乎影响过去十年发布的所有 MongoDB 版本。
威胁:未经身份验证的远程攻击者可以读取服务器内存(RAM)中的大块数据。
原因: MongoDB 处理 zlib 压缩数据包的方式存在缺陷。
影响:泄露凭证、API密钥、客户个人身份信息和内部服务器状态。
解决方法:立即升级到最新补丁版本(例如 8.0.17、7.0.28)或禁用 zlib 压缩。
什么是 MONGOBLEED?(技术深度解析)
MongoDB 使用特定的网络协议与客户端通信。为了节省带宽,该协议支持压缩。最常用的压缩算法之一是zlib,在许多发行版中,它默认启用,或者客户端可以轻松地协商启用。
漏洞在于内部的解压缩逻辑:
src/mongo/transport/message_compressor_zlib.cpp
漏洞:服务器未能正确验证解压缩数据的长度是否与其分配的缓冲区大小匹配。
影响版本
| 版本系列 | 易受攻击的版本 | 已修复(补丁版本) |
|---|---|---|
| MongoDB 8.2 | 8.2.0 – 8.2.2 | 8.2.3 |
| MongoDB 8.0 | 8.0.0 – 8.0.16 | 8.0.17 |
| MongoDB 7.0 | 7.0.0 – 7.0.27 | 7.0.28 |
| MongoDB 6.0 | 6.0.0 – 6.0.26 | 6.0.27 |
| MongoDB 5.0 | 5.0.0 – 5.0.31 | 5.0.32 |
| MongoDB 4.4 | 4.4.0 – 4.4.29 | 4.4.30 |
| MongoDB 4.2 | 所有版本 | 生命周期结束(可能不会修复) |
| MongoDB 4.0 | 所有版本 | 生命周期结束(可能不会修复) |
| MongoDB 3.6 | 所有版本 | 生命周期 |
漏洞复现
docker-compose up -d

python3 poc.py
POC需要手动修改目标host和端口


修复建议
方案A:升级(永久修复)
这是确保代码路径真正被修补的唯一方法。
适用于 Debian/Ubuntu 系统:
sudo apt-get updatesudo apt-get install -y mongodb-org# Verify versionmongod --version
对于 Docker:请更新您的配置 docker-compose.yml,以获取特定的已修补标签。
image: mongo:8.0.17
警告:在进行主要版本升级之前,务必备份数据目录。
方案 B:变通方法(禁用 Zlib)
如果您无法立即升级(例如,由于节假日服务器冻结或旧版本兼容性问题),则必须禁用 zlib 压缩。这将阻止攻击,因为服务器会拒绝格式错误的压缩数据包。
编辑您的 mongod.conf(通常在 /etc/mongod.conf):
查找以下 net部分:
net:compression:compressors: snappy,zstd # REMOVE "zlib" FROM THIS LIST
如果该 compressors行允许 zlib,请将其删除。如果该行缺失,MongoDB 可能正在使用默认值。为了安全起见,请显式地将其设置为snappy,zstd或disabled
重启服务:
sudo systemctl restart mongod

