CVE-2025-14847:关于 MongoBleed 漏洞的关键信息

受影响的 Akamai Hunt 客户已收到包含脆弱资产详细映射及可操作抵御措施的报告。

分享

内容提要

  • 2025 年 12 月 19 日,一项影响大多数 MongoDB 部署的新漏洞在 MongoDB 公开实例中被披露。

  • 该漏洞被命名为 MongoBleed,存在于 MongoDB 处理 zlib 压缩消息的过程中,可使未经身份验证的客户端从数据库中泄漏未初始化的堆内存。

  • 该 CVE 漏洞的 CVSSv4 评分为 8.7。

  • 2025 年 12 月 29 日,网络安全和基础设施安全局 (CISA) 将 CVE-2025-14847 纳入其“已知被利用的漏洞”(KEV) 目录,证实该漏洞已被主动利用。与此同时,Akamai 遥测数据显示,约 62% 的企业网络中存有 MongoDB 通信流量。

在这篇博文中,我们将对 MongoBleed 漏洞进行技术剖析,概述受影响的 MongoDB 版本(含补丁分析),并提供实用的抵御指南,包括 Akamai Guardicore Segmentation Insight 查询语句,以帮助识别存在漏洞的资产

漏洞详情

MongoBleed 漏洞源于 MongoDB 处理压缩有线协议消息的方式,该功能在默认配置下处于启用状态。

MongoDB 使用以 OP_MSG 操作码标记的消息进行通信,其请求攻击负载以二进制JSON (BSON) 格式编码。当发送压缩消息时,原始的 OP_MSG 攻击负载会被封装在 OP_COMPRESSED 结构体中。

OP_COMPRESSED 消息包含 OP_MSG 攻击负载以及解压后攻击负载的预期大小。


struct OP_COMPRESSED {
    struct MsgHeader {
        int32  messageLength;
        int32  requestID;
        int32  responseTo;
        int32  opCode;
    };
    int32_t  originalOpcode;
    int32_t  uncompressedSize;
    uint8_t  compressorId;
    char     *compressedMessage;
};

攻击者可以操纵 uncompressedSize 字段,使其大于压缩攻击负载的实际大小。由于该值未经验证,这种操纵会导致分配过大的缓冲区,其中填充了未初始化的堆内存数据。

这些泄漏的内存可能包含明文密码片段、凭据、API 密钥或其他敏感的驻留内存数据,具体内容取决于先前堆内存的使用情况。

MongoDB 的错误处理逻辑进一步放大了信息泄露的风险。当发送的畸形 BSON 对象未包含空终止符时,服务器将持续解析内存直至遇到空终止符为止。当解析最终失败时,服务器会返回错误响应,其中包含原始消息及泄漏的堆内存内容

截至撰写本文时,Shodan 报告显示有超过 21.3 万个暴露于互联网的 MongoDB 实例,而 Censys 的数据则超过 8.7 万个,这表明该漏洞的影响范围极为广泛。

公开漏洞利用代码已出现

在漏洞披露后数日内,GitHub 上已出现可运行的漏洞利用程序。该利用程序通过重复发送畸形的压缩请求,使攻击者能够逐步泄漏大量堆内存数据

受影响的版本

MongoBleed 影响以下 MongoDB 版本:

  • 8.2.0–8.2.2

  • 8.0.0–8.0.16

  • 7.0.0–7.0.27

  • 6.0.0–6.0.26

  • 5.0.0–5.0.31

  • 4.4.0–4.4.29

  • 所有 v3.6、v4.0 和 v4.2 版本

修补分析

单行补丁改为根据输出结果计算消息大小,而非直接信任 OP_COMPRESSED BSON 中提供的值。这确保了分配的内存不会超过消息的实际大小。

-    return {output.length()};
+    return length;

抵御方案

升级到已修复的版本

修复补丁已在以下版本中发布:8.2.3、8.0.17、7.0.28、6.0.27、5.0.32 及 4.4.30。
升级至上述任一版本即可完全修复该漏洞。

通过网络分段减少暴露面

在应用补丁前,可通过以下分段措施显著降低暴露风险:

  • 阻止对 TCP/27017 端口上 MongoDB 实例的入站互联网访问

  • 仅允许来自明确可信来源的连接

使用 Akamai Guardicore Segmentation 识别有漏洞的主机

以下 Akamai Guardicore Segmentation Insight 查询可用于识别运行存在漏洞的 MongoDB 实例的主机。

Linux 资产

WITH LINUX AS (
  SELECT DISTINCT name, version, source
  FROM deb_packages 
  WHERE name = 'mongodb-org-server'
  UNION ALL
  SELECT DISTINCT name, version, source
  FROM rpm_packages
  WHERE name = 'mongodb-org-server'
),
PARSED AS (
  SELECT name, source, version,
    CAST(REGEX_MATCH(version, '([0-9]+)\.([0-9]+)\.([0-9]+)', 1) AS INTEGER) AS major,
    CAST(REGEX_MATCH(version, '([0-9]+)\.([0-9]+)\.([0-9]+)', 2) AS INTEGER) AS minor,
    CAST(REGEX_MATCH(version, '([0-9]+)\.([0-9]+)\.([0-9]+)', 3) AS INTEGER) AS patch
  FROM LINUX
)
SELECT name, source, version
FROM PARSED
WHERE
    (major = 8 AND minor = 2 AND patch BETWEEN 0 AND 2)
    OR
    (major = 8 AND minor = 0 AND patch BETWEEN 0 AND 16)
    OR
    (major = 7 AND minor = 0 AND patch BETWEEN 0 AND 27)
    OR
    (major = 6 AND minor = 0 AND patch BETWEEN 0 AND 26)
    OR
    (major = 5 AND minor = 0 AND patch BETWEEN 0 AND 31)
    OR
    (major = 4 AND minor = 4 AND patch BETWEEN 0 AND 29)
    OR
    (major = 3 AND minor = 6)
    OR
    (major = 4 AND minor IN (0, 2))

Windows 资产

WITH WINDOWS AS (
  WITH MONGO_PROGRAMS AS (
  SELECT DISTINCT name, version, install_source AS source, REGEX_MATCH(name, 'MongoDB [0-9].*', 0) AS mongo_match
  FROM programs
  WHERE name LIKE "MongoDB%"
  )
  SELECT DISTINCT name, version, source
  FROM MONGO_PROGRAMS
  WHERE LENGTH(mongo_match) > 0
),
PARSED AS (
  SELECT name, source, version,
    CAST(REGEX_MATCH(version, '([0-9]+)\.([0-9]+)\.([0-9]+)', 1) AS INTEGER) AS major,
    CAST(REGEX_MATCH(version, '([0-9]+)\.([0-9]+)\.([0-9]+)', 2) AS INTEGER) AS minor,
    CAST(REGEX_MATCH(version, '([0-9]+)\.([0-9]+)\.([0-9]+)', 3) AS INTEGER) AS patch
  FROM WINDOWS
)
SELECT name, source, version
FROM PARSED
WHERE
    (major = 8 AND minor = 2 AND patch BETWEEN 0 AND 2)
    OR
    (major = 8 AND minor = 0 AND patch BETWEEN 0 AND 16)
    OR
    (major = 7 AND minor = 0 AND patch BETWEEN 0 AND 27)
    OR
    (major = 6 AND minor = 0 AND patch BETWEEN 0 AND 26)
    OR
    (major = 5 AND minor = 0 AND patch BETWEEN 0 AND 31)
    OR
    (major = 4 AND minor = 4 AND patch BETWEEN 0 AND 29)
    OR
    (major = 3 AND minor = 6)
    OR
    (major = 4 AND minor IN (0, 2))

禁用压缩请求(临时抵御措施)

如果无法升级实例或进行分段,可禁用 zlib 压缩请求以防止漏洞被利用。详细说明可在官方 MongoDB Issue Tracker 中找到。

总结

MongoBleed (CVE-2025-14847) 是一个可远程利用的 MongoDB 漏洞,允许未经身份验证的攻击者泄露未初始化的堆内存数据。

由于公开的漏洞利用代码已出现,且数以万计的实例暴露于互联网,敏感数据泄露的风险迫在眉睫。运行受影响版本的企业应升级至已修复的版本,或实施网络分段规则以最大限度减少暴露风险。

关注最新动态

Akamai 安全情报组将继续监控此类威胁,并随时向我们的客户及整个安全社区报告相关情况以及创建抵御措施。如需及时了解 Akamai 安全情报组发布的更多最新动态,请查看我们的研究首页并关注我们的社交媒体频道

标签

分享

相关博文

安全研究
在 AI 赋能下重启防御:重新思考 Web 应用程序和 API 防御策略
April 22, 2025
如今,攻击者正部署由 AI 生成的攻击链,使整个攻击周期实现自动化。了解在此背景下如何保护您的企业。
网络安全
漏洞修复深度解析:对 CVE-2026-21513 漏洞在野利用情况的分析
February 20, 2026
查阅 PatchDiff-AI 报告,了解黑客频繁利用 MSHTML 漏洞 CVE-2026-21513 的根本原因,以及 APT28 黑客组织如何在实际攻击中利用该漏洞。
安全研究
AI 赋能漏洞挖掘:呼吁加强人工监督与审慎应用
March 13, 2026
了解识别安全漏洞时为何人工监督对于负责任地使用 AI 系统至关重要,以及如何避免误报。