
MongoDB的zlib消息解压缩功能中存在一个缺陷,该缺陷会返回已分配的缓冲区大小而非实际的解压数据长度。这使得攻击者能够读取未初始化的内存,具体方式为:
版本 | 受影响版本 | 已修复版本 |
|---|---|---|
8.2.x | 8.2.0 - 8.2.2 | 8.2.3 |
8.0.x | 8.0.0 - 8.0.16 | 8.0.17 |
7.0.x | 7.0.0 - 7.0.27 | 7.0.28 |
6.0.x | 6.0.0 - 6.0.26 | 6.0.27 |
5.0.x | 5.0.0 - 5.0.31 | 5.0.32 |
1.安装MongoDB漏洞测试环境(这里默认使用ubuntu系统并且已安装docker环境)
docker-compose.yml
version: '3.8'
services:
mongodb-vulnerable:
image: mongo:8.2.2
container_name: mongobleed-target
ports:
- "27017:27017"
environment:
MONGO_INITDB_ROOT_USERNAME: admin
MONGO_INITDB_ROOT_PASSWORD: SuperSecret123!
MONGO_INITDB_DATABASE: secretdb
volumes:
- ./init/init-mongo.js:/docker-entrypoint-initdb.d/init-mongo.js:ro
- mongodb_data:/data/db
command: ["mongod", "--networkMessageCompressors", "zlib", "--bind_ip_all"]
restart: unless-stopped
volumes:
mongodb_data:使用如下命令安装MongoDB漏洞环境,如下所示
docker compose up -d
2.运行poc获取泄露的内存数据,命令、获取到的结果如下所示
sudo python3 mongobleed.py

3.参考链接如下
https://github.com/joe-desimone/mongobleed.git
https://github.com/Neo23x0/mongobleed-detector.git