
MongoBleed: CVE-2025-14847 메모리 누수 발견 도구
MongoBleed는 CVE-2025-14847을 탐지하고 입증하도록 설계된 고성능 보안 감사 도구입니다. 이 취약점은 인증되지 않은 원격 공격자가 zlib 압축 해제 로직의 길이 불일치 결함을 악용하여 MongoDB 서버에서 초기화되지 않은 힙 메모리 조각을 유출할 수 있게 합니다.
이 스크립트를 안전하게 테스트하려면 다음 docker-compose.yml을 사용하여 취약한 MongoDB 8.2.2 인스턴스를 실행하세요.
인스턴스 실행 명령어:
docker-compose up -d
Python 3.8+가 설치되어 있어야 합니다. 외부 라이브러리가 필요하지 않습니다(내장 socket, zlib, concurrent.futures 사용).
기본 스캔
python mongobleed.py --host 127.0.0.1 --port 27017
고급 옵션
python mongobleed.py --host 127.0.0.1 --threads 50 --range 100 10000 --output leak_dump.bin
스크립트는 조작된 OP_COMPRESSED(opcode 2012) 메시지를 전송합니다. 페이로드의 압축되지 않은 길이에 대해 거짓말을 합니다. MongoDB 서버는 "거짓된" 크기의 힙 버퍼를 할당하고, 소량의 데이터를 압축 해제한 후 실수로 초기화되지 않은 전체 버퍼를 클라이언트로 반환합니다.
CVE-2025-14847을 해결하는 유일한 영구적인 방법은 OP_COMPRESSED 길이 검증 로직에 대한 수정이 포함된 MongoDB 바이너리 버전으로 업그레이드하는 것입니다.
영구 수정 (업그레이드)
MongoDB의 공식 패치를 적용하세요. 이 버전들은 압축 해제된 데이터 크기가 메시지 헤더의 uncompressedSize 필드와 일치하는지 확인하는 필수 검사를 포함합니다.
가동 시간 요구 사항으로 인해 즉시 업그레이드가 불가능한 경우 서버 구성을 수정하여 공격 벡터를 차단할 수 있습니다.
취약한 압축기 비활성화 (권장)
이 취약점은 zlib 구현에 특화되어 있습니다. zlib을 비활성화하고 서버가 이 특정 힙 오버리드 버그의 영향을 받지 않는 snappy 또는 zstd를 사용하도록 강제할 수 있습니다.
명령줄을 통해: 다음 플래그를 사용하여 mongod 인스턴스를 다시 시작합니다(zlib 제외 참고):
mongod --networkMessageCompressors snappy,zstd
구성 파일(mongod.conf)을 통해:
net:
compression:
compressors: snappy,zstd
이 도구는 교육 및 승인된 보안 테스트 목적으로만 사용됩니다. 컴퓨터 시스템에 대한 무단 액세스는 불법입니다. 저자는 이 도구의 오용에 대해 책임을 지지 않습니다. MongoDB 인스턴스를 즉시 8.2.3+ 또는 8.0.17+ 버전으로 패치하세요.
| 주요 브랜치 | 권장 보안 버전 |
|---|
| MongoDB 8.2 | 8.2.3 이상으로 업그레이드 |
| MongoDB 8.0 | 8.0.17 이상으로 업그레이드 |
| MongoDB 7.0 | 7.0.28 이상으로 업그레이드 |
| MongoDB 6.0 | 6.0.27 이상으로 업그레이드 |
| MongoDB 5.0 | 5.0.32 이상으로 업그레이드 |
| MongoDB 4.0 | 4.4.30 이상으로 업그레이드 |