漏洞详情#

一个名为 MongoBleed (CVE-2025-14847) 的严重漏洞已被发现,该漏洞几乎影响过去十年发布的所有 MongoDB 版本。未经身份验证的远程攻击者可以读取服务器内存(RAM)中的大块数据。
此漏洞源于 MongoDB 处理 zlib 压缩数据包 时的缺陷,可能导致凭证、API 密钥、客户个人身份信息和内部服务器状态泄露。


什么是 MongoBleed?#

MongoDB 使用特定的网络协议与客户端通信。为了节省带宽,该协议支持压缩,其中最常用的是 zlib。漏洞在于内部的解压缩逻辑未能正确验证解压后的数据长度,从而导致服务器可能返回未初始化的内存数据给攻击者。

src/mongo/transport/message_compressor_zlib.cpp

影响版本#

MongoDB 版本系列 易受攻击版本 已修复版本
8.2 8.2.0 – 8.2.2 8.2.3
8.0 8.0.0 – 8.0.16 8.0.17
7.0 7.0.0 – 7.0.27 7.0.28
6.0 6.0.0 – 6.0.26 6.0.27
5.0 5.0.0 – 5.0.31 5.0.32
4.4 4.4.0 – 4.4.29 4.4.30
4.2/4.0/3.6 全版本受影响 生命周期结束(可能不会修复)
*注:这些受影响版本信息来自文章复现部分。

漏洞复现#

以下示例演示如何使用 PoC 脚本来触发 MongoBleed 漏洞:

docker-compose up -d

漏洞流程图 漏洞流程图 漏洞流程图

python3 poc.py
  • 注意:使用前请根据目标 host 和端口调整 PoC 脚本参数。

修复建议#

📌 方案 A:升级至修复版本(推荐)#

  • 确保升级到官方包含补丁的 MongoDB 版本,例如:
mongo:8.0.17
mongo:7.0.28
  • 这是确保代码路径真正被修补的唯一方法。 适用于 Debian/Ubuntu 系统:
sudo apt-get update
sudo apt-get install -y mongodb-org
# Verify version
mongod --version
  • 对于 Docker:请更新您的配置 docker-compose.yml,以获取特定的已修补标签。
image: mongo:8.0.17

警告:在进行主要版本升级之前,务必备份数据目录。

⚠️方案 B:变通方法(禁用 Zlib)#

  • 如果无法立即升级,可通过配置禁用 zlib:这将阻止攻击,因为服务器会拒绝格式错误的压缩数据包。
net:
  compression:
    compressors: snappy,zstd  # 移除 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

POC 及漏洞环境#

POC 及漏洞环境