
Mongobleed Detector CVE-2025-14847
CVE-2025-14847 (MongoBleed)에 대한 전문 취약점 스캐너 - MongoDB 메모리 누수 취약점.
+================================================================+
| MongoBleed Scanner v1.3.0 |
| CVE-2025-14847 - MongoDB Memory Leak Vulnerability |
+================================================================+
**CVE-2025-14847 (MongoBleed)**는 MongoDB의 zlib 압축 처리에서 발생하는 심각한 메모리 누수 취약점입니다.
압축된 메시지(zlib을 사용한 OP_COMPRESSED)를 처리할 때 MongoDB는 클라이언트가 제공한 uncompressedSize 필드를 기반으로 버퍼를 할당합니다. 악의적인 클라이언트는 실제 데이터보다 더 큰 크기를 지정하여 MongoDB가 이전 작업의 민감한 데이터가 포함된 초기화되지 않은 힙 메모리를 반환하도록 할 수 있습니다.
| 브랜치 | 취약한 버전 | 수정된 버전 |
|---|---|---|
| 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 |
| 4.4.x | 4.4.0 - 4.4.29 | 4.4.30 |
| ≤4.2 | 모든 버전 | 단종 - 패치 없음 |
추가 패키지가 필요하지 않습니다. 스캐너는 Python 표준 라이브러리만 사용합니다.
# 기본 포트 (27017)
python scanner.py -t 192.168.1.100
# 사용자 지정 포트
python scanner.py -t 192.168.1.100:27018
# 쉼표로 구분
python scanner.py -t 192.168.1.100,192.168.1.101:27018,db.example.com
# targets.txt (한 줄에 하나, #은 주석)
# 192.168.1.100
# 192.168.1.101:27018
# mongodb.example.com
python scanner.py -f targets.txt
# 일반 텍스트
python scanner.py -t 192.168.1.100 -o report.txt
# JSON (상세)
python scanner.py -t 192.168.1.100 -o report.json
# CSV (스프레드시트)
python scanner.py -t 192.168.1.100 -o report.csv
| 옵션 | 설명 |
|---|---|
-t, --targets | 쉼표로 구분된 대상 (호스트 또는 호스트:포트) |
-f, --file | 대상이 포함된 파일 (한 줄에 하나) |
-o, --output | 내보내기 파일 (.txt, .json, .csv) |
-q, --quiet | 요약만 표시 |
-v, --version | 버전 표시 |
-h, --help | 도움말 표시 |
| 기호 | 상태 | 설명 |
|---|---|---|
[!] | 취약 | 취약점 확인됨, 즉시 조치 필요 |
[?!] | 취약 가능성 있음 | 버전 추정됨, 수동 확인 필요 |
[+] | 안전 | 패치된 버전 |
[~] | 완화됨 | 취약한 버전이지만 zlib 비활성화 |
[?] | 알 수 없음 | 상태를 확인할 수 없음 |
[-] | 연결 불가 | 연결 실패 |
+================================================================+
| MongoBleed Scanner v1.3.0 |
| CVE-2025-14847 - MongoDB Memory Leak Vulnerability |
+================================================================+
| LEGAL: Authorized security testing only. Obtain permission |
| before scanning systems you do not own. |
+================================================================+
[*] Loaded 4 target(s)
SCAN RESULTS:
----------------------------------------------------------------------
[!] 192.168.1.100:27017 VULNERABLE v8.0.16 zlib:ON -> Update to 8.0.17
[?!] 192.168.1.101:27018 POSSIBLY VULNERABLE v~8.2.x zlib:ON -> Check version, update to 8.2.3
[+] 192.168.1.102:27017 SAFE v8.0.17 zlib:ON
[~] 192.168.1.103:27017 MITIGATED v8.0.16 zlib:OFF (zlib disabled)
======================================================================
SCAN SUMMARY
======================================================================
Total targets scanned: 4
Reachable: 4
Unreachable: 0
----------------------------------------------------------------------
[!] VULNERABLE: 1
[?!] POSSIBLY VULN: 1 (version estimated, needs verification)
[+] SAFE (patched): 1
[~] MITIGATED: 1 (vulnerable version but zlib disabled)
[?] UNKNOWN: 0
======================================================================
VULNERABLE TARGETS REQUIRING IMMEDIATE ACTION:
----------------------------------------------------------------------
192.168.1.100:27017 v8.0.16 zlib:ON -> Upgrade to 8.0.17
v8.0.16 — 정확한 버전 감지됨v~8.2.x — 와이어 프로토콜로부터 추정 (~는 추정임을 나타냄)MongoDB 8.2 이상에서 버전 명령어에 인증이 필요한 경우 추정이 발생합니다. 스캐너는 와이어 프로토콜 버전 매핑으로 대체합니다.
1. TCP Connection
└── Connect to MongoDB port
2. Version Detection
├── Send 'hello' command (get wire version, no auth required)
└── Send 'buildInfo' command (get exact version, may need auth)
3. Compression Check
└── Send zlib-compressed message, check if server accepts
4. Assessment
└── Compare version + zlib status against vulnerability database
정확한 버전을 사용할 수 없는 경우(인증 필요), 스캐너는 maxWireVersion에서 추정합니다.
| 와이어 버전 | MongoDB 브랜치 |
|---|---|
| 25 | 8.0.x |
| 27 | 8.2.x |
| 21 | 7.0.x |
| 17 | 6.0.x |
| 13 | 5.0.x |
VULNERABLE = (version in vulnerable range) AND (zlib enabled)
MITIGATED = (version in vulnerable range) AND (zlib disabled)
SAFE = (version >= fixed version)
| 현재 버전 | 업데이트 대상 |
|---|---|
| 8.2.0 - 8.2.2 | 8.2.3+ |
| 8.0.0 - 8.0.16 | 8.0.17+ |
| 7.0.0 - 7.0.27 | 7.0.28+ |
| 6.0.0 - 6.0.26 | 6.0.27+ |
| 5.0.0 - 5.0.31 | 5.0.32+ |
| 4.4.0 - 4.4.29 | 4.4.30+ |
# mongod.conf
net:
compression:
compressors: snappy,zstd # Remove 'zlib'
또는 명령줄:
mongod --networkMessageCompressors snappy,zstd
THIS TOOL IS PROVIDED FOR AUTHORIZED SECURITY TESTING ONLY.
You must obtain proper authorization before scanning any systems
you do not own or have explicit written permission to test.
Unauthorized access to computer systems is illegal.
The authors assume no liability for misuse of this tool.
| 코드 | 의미 |
|---|---|
| 0 | 모든 대상이 안전하거나 완화됨 |
| 1 | 연결 오류 발생 |
| 2 | 취약한 대상 발견됨 |
스크립트에 유용:
python scanner.py -t mongodb.example.com
if [ $? -eq 2 ]; then
echo "ALERT: Vulnerable MongoDB detected!"
fi
권한이 부여된 보안 테스트 및 연구 목적으로만 사용하세요.