CVE-2025-14847 MongoDB内存泄露漏洞分析

一、漏洞简介

MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

该漏洞源于Zlib解压缩协议头中长度字段可控,导致服务器端Zlib存在安全缺陷,攻击者可以利用此漏洞,获取服务器进程内存中数据库运行时的部分数据。

二、影响范围

MongoDB Server 8.2.0 - 8.2.2

MongoDB Server 8.0.0 - 8.0.16

MongoDB Server 7.0.0 - 7.0.27

MongoDB Server 6.0.0 - 6.0.26

MongoDB Server 5.0.0 - 5.0.31

MongoDB Server 4.4.0 - 4.4.29

MongoDB Server 4.2.0 及以上版本

MongoDB Server 4.0.0 及以上版本

MongoDB Server 3.6.0 及以上版本

三、漏洞分析

3.1 利用条件

无需登录,发送特定的数据包就能实现数据泄露。

3.2 漏洞原理

3.2.1 POC代码分析

参考文件为作者joe-desimone 的mongobleed代码,关键分析如下

1.构建bson数据

2.构建OP_MSG数据

3.zlib压缩OP_MSG数据

4.创建zlib数据块,其中buffer_size为修改的大小

5.封装消息并发送

6.解析返回的错误信息,就能泄露部分信息

修改poc代码,打印实际泄露的内容:

最终拼接到一起,能够泄露出一些信息,只不过实际危害性还得评估。

3.2.2 源码分析

通过对源码8.22和8.2.3版本比对,发现8.2.3版本更改了ZlibMessageCompressor::decompressData()函数的返回值,返回的是实际解压的大小。

具体分析如下:

MessageCompressor消息压缩方式(src/mongo/transport/message_compressor_base.h),zlib对应2

NetworkOP 网络操作码 (src/mongo/rpc/message.h),2013对应标准格式发送消息,2012对应使用压缩包装其他操作码

也可以参考官方文档(https://www.mongodb.com/zh-cn/docs/manual/reference/mongodb-wire-protocol/

CompressionHeader(src/mongo/rpc/op_compressed.h),构建压缩头

bson格式 (https://www.mongodb.com/zh-cn/docs/manual/reference/bson-types/#std-label-bson-types)。

decompressMessage()函数(src/mongo/transport/message_compressor_manager.cpp),解压后的大小会与compressionHeader.uncompressedSize比较,如果不一致就失败,最后返回output的数据。

漏洞点:compressData()函数(src/mongo/transport/message_compressor_zlib.cpp),然而返回的值大小就是输入的大小,length并没有作为返回值返回。

3.2.3 调试分析

根据POC作者提供的docker环境,加入可调试的参数并安装gdb即可进行调试

gdb附加调试mongd程序,使用命令“b decompressData”下断点

查看当前调用栈的回溯信息

获取outLength值大小,为0x208=520,可以对应poc的里面伪造的大小

解压之后,实际大小length为0x10=16,对应poc中zlib压缩前的消息的大小。

然而,实际返回的大小,还是0x208,因为返回值不是length,所以服务端解析的时候会处理实际的解压后的数据之外的内容,最终报错返回到客户端,泄露部分的数据。

四、漏洞修复

这个漏洞影响范围较广,官方已发布安全补丁,请及时更新至最新版本。

MongoDB Server 8.2.* 升级至 8.2.3

MongoDB Server 8.0.* 升级至 8.0.17

MongoDB Server 7.0.* 升级至 7.0.28

MongoDB Server 6.0.* 升级至 6.0.27

MongoDB Server 5.0.* 升级至 5.0.32

MongoDB Server 4.4.* 升级至 4.4.30

六、参考链接

https://nvd.nist.gov/vuln/detail/CVE-2025-14847

https://github.com/advisories/GHSA-4742-mr57-2r9j

https://github.com/joe-desimone/mongobleed

https://baike.baidu.com/item/mongodb/60411

https://mp.weixin.qq.com/s/my9xPv1eHp7cXKDYUxD-MQ

https://www.secrss.com/articles/86431

留下评论

您的电子邮箱地址不会被公开。 必填项已用*标注