MongoBleed漏洞POC发布:未认证攻击者可窃取MongoDB内存数据

本文报道了MongoDB数据库中发现的一个高危漏洞(CVE-2025-14847)。该漏洞允许未经身份验证的攻击者通过Zlib压缩协议处理缺陷,读取服务器未初始化的堆内存内容,可能泄露敏感内部信息。文章详细介绍了漏洞原理、影响版本及缓解措施。

PoC发布:MongoBleed漏洞利用允许未认证攻击者耗尽MongoDB内存

数据库管理员正面临一个严重的安全紧急事件,因为广泛使用的MongoDB数据库系统中披露了一个高危漏洞。该漏洞编号为CVE-2025-14847,允许远程、未经身份验证的攻击者诱骗服务器泄露其内存(堆)中的敏感内容,可能暴露内部状态和指针。 安全研究员Joe Desimone已经发布了该漏洞的概念验证(PoC)利用代码。该漏洞的CVSS评分为8.7,对未打补丁的系统构成高风险。

该漏洞存在于MongoDB处理Zlib压缩协议头的方式中。被描述为“长度参数不一致的的不当处理”。本质上,服务器盲目信任客户端声明的长度,即使与实际数据大小不匹配。

漏洞利用通过一个巧妙的五步过程实现:

  1. 发送一条压缩消息,其中包含一个被夸大的uncompressedSize声明。
  2. MongoDB根据攻击者的声明分配一个大的缓冲区。
  3. zlib将实际数据解压到缓冲区的起始位置。
  4. 该错误导致MongoDB将整个缓冲区视为有效数据。
  5. 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选项启动他们的mongodmongos实例,该选项明确排除Zlib,转而选择像snappy或zstd这样的替代方案。

随着PoC代码已在GitHub上可用,防御者必须争分夺秒地在威胁行为者开始从易受攻击服务器暴露的内存中窃取秘密之前修补他们的数据库。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计