PoC发布:MongoBleed漏洞利用允许未认证攻击者耗尽MongoDB内存
数据库管理员正面临一个严重的安全紧急事件,因为广泛使用的MongoDB数据库系统中披露了一个高危漏洞。该漏洞编号为CVE-2025-14847,允许远程、未经身份验证的攻击者诱骗服务器泄露其内存(堆)中的敏感内容,可能暴露内部状态和指针。 安全研究员Joe Desimone已经发布了该漏洞的概念验证(PoC)利用代码。该漏洞的CVSS评分为8.7,对未打补丁的系统构成高风险。
该漏洞存在于MongoDB处理Zlib压缩协议头的方式中。被描述为“长度参数不一致的的不当处理”。本质上,服务器盲目信任客户端声明的长度,即使与实际数据大小不匹配。
漏洞利用通过一个巧妙的五步过程实现:
- 发送一条压缩消息,其中包含一个被夸大的
uncompressedSize声明。 - MongoDB根据攻击者的声明分配一个大的缓冲区。
- zlib将实际数据解压到缓冲区的起始位置。
- 该错误导致MongoDB将整个缓冲区视为有效数据。
- BSON解析从未初始化的内存中读取“字段名”,直到遇到空字节。
CVE描述警告称:“Zlib压缩协议头中不匹配的长度字段可能允许未经身份验证的客户端读取未初始化的堆内存。” CVE-2025-14847最令人担忧的方面是它不需要任何身份验证。MongoDB在其公告中确认:“客户端可以利用服务器的zlib实现,在未经服务器认证的情况下返回未初始化的堆内存。”
OP Innovate的专家指出,这可能导致“敏感内存数据的泄露,包括内部状态信息、指针或其他可能协助攻击者进一步利用的数据”。 该漏洞影响了非常广泛的MongoDB版本,从现代版本到遗留系统均有波及。受影响版本包括:
- 8.2.0 至 8.2.3
- 8.0.0 至 8.0.16
- 7.0.0 至 7.0.26
- 6.0.0 至 6.0.26
- 5.0.0 至 5.0.31
- 4.4.0 至 4.4.29
- 所有版本的4.2、4.0和3.6
MongoDB已发布修复版本,并强烈建议立即升级。已修复的版本为8.2.3、8.0.17、7.0.28、6.0.27、5.0.32和4.4.30。
对于无法立即更新的组织,存在一个变通方案:禁用Zlib。管理员可以使用net.compression.compressors选项启动他们的mongod或mongos实例,该选项明确排除Zlib,转而选择像snappy或zstd这样的替代方案。
随着PoC代码已在GitHub上可用,防御者必须争分夺秒地在威胁行为者开始从易受攻击服务器暴露的内存中窃取秘密之前修补他们的数据库。