
MongoDB CVE-2025-14847 힙 메모리 누수 스캐너 | OP_COMPRESSED zlib 취약점 | 버그 바운티 & 레드팀 도구
MongoBleed는 CVE-2025-14847에 대한 고성능 PoC 스캐너로, MongoDB C++ 드라이버의 인증 전 힙 메모리 노출 취약점입니다. 이 도구는 대규모 네트워크 범위에서 취약한 인스턴스를 빠르게 식별하도록 설계되었습니다.
이 취약점은 MongoDB 와이어 프로토콜에서 OP_COMPRESSED 메시지를 처리할 때 발생하는 out-of-bounds (OOB) 읽기에서 비롯됩니다.
서버가 OP_COMPRESSED 패킷을 수신하면, 압축 해제를 위해 버퍼를 할당할 때 공격자가 제공한 uncompressedSize 필드에 의존합니다. 실제 압축 해제된 데이터가 주장된 uncompressedSize보다 훨씬 작은 경우, 드라이버는 버퍼를 자르거나 지우지 못합니다. 결과적으로 서버는 할당된 전체 메모리 블록을 반환하며, 이 블록에는 초기화되지 않은 힙 데이터가 포함될 수 있어 세션 토큰, 내부 포인터 또는 다른 데이터베이스 쿼리의 조각과 같은 민감한 정보가 노출될 가능성이 있습니다.
asyncio를 사용한 비동기 I/O로 높은 동시성 스캐닝vulnerable_targets.txt)git clone https://github.com/Black1hp/mongobleed-scanner/
cd mongobleed-scanner
외부 종속성 불필요 (Python 표준 라이브러리만 사용).
기본 사용법:
python3 mongobleed.py -i targets.txt
고급 설정:
python3 mongobleed.py -i targets.txt -c 100 -t 5
-i : 대상이 포함된 입력 파일 (IP, 도메인 또는 IP:포트)-c : 동시성 수준 (기본값: 50)-t : 연결 타임아웃 (초 단위, 기본값: 5)스캐너는 BSON 압축 해제 단계에서 크기 불일치를 이용하여 취약점을 식별합니다:
OP_COMPRESSED 패킷을 전송합니다.uncompressedSize 필드는 의도적으로 훨씬 큰 값(예: 64KB)으로 설정됩니다.MessageLength로 응답하면 취약함(VULNERABLE) 상태로 확인됩니다.uncompressedSize를 신뢰하여 응답 길이를 정의합니다. 압축 해제 중 실제로 기록된 바이트로 이 길이를 업데이트하지 못하기 때문에, 초기화되지 않은 메모리를 포함한 할당된 전체 힙 버퍼를 맹목적으로 클라이언트로 스트리밍합니다.참고: 위 동영상은 스캐너가 여러 취약한 인스턴스를 식별하고 힙 조각을 실시간으로 캡처하는 모습을 보여줍니다.
Black1hp 보안 연구원 | 버그 헌터 | 레드팀
이 도구는 승인된 보안 테스트 및 연구 목적으로만 사용됩니다. 작성자는 이 도구로 인한 무단 사용이나 손해에 대해 책임을 지지 않습니다.