
CVE-2025-14847 설명 및 실습
참조 CVE : CVE-2025-14847
이 저장소는 데이터베이스 와이어 프로토콜에서 흔히 "압축 프레이밍 / 크기 메타데이터 메모리 노출"로 설명되는 문제 유형의 개념을 보여주는 교육용 연구소입니다.
이는 방어적 이해를 돕기 위해 작성되었습니다: MongoDB 네트워크 압축이 어떻게 협상되고 프레이밍되는지, 크기 필드가 왜 중요한지, 그리고 강력한 파서가 의도치 않은 메모리 노출을 어떻게 방지하는지.
CVE 참조에 대한 참고 사항: 이 연구소는 CVE-2025-14847로 언급된 개념을 중심으로 구성되었습니다. 이 저장소는 특정 벤더의 버그를 검증, 재현 또는 악용하지 않으며, 특정 MongoDB 버전이 영향을 받는다고 주장하지 않습니다. 이는 일반적인 실패 모드(압축된 페이로드 주변의 불일치하는 크기 메타데이터)와 완화 방법에 초점을 맞춥니다.
이 저장소는 특정 CVE에 대해 어떤 MongoDB 버전이 취약하거나 패치되었는지에 대한 증거를 포함하지 않습니다 (그리고 그렇게 사용되어서는 안 됩니다).
보고서에 "취약" 및 "패치됨" 버전을 올바르게 문서화하려면 해당 CVE에 대한 공식 벤더 권고 / 릴리스 노트를 사용하고 인용하세요.
실행 중인 항목을 확인하기 위한 실용적인 단계:
docker compose exec mongodb mongod --versiondocker compose exec mongodb mongosh --quiet --eval "db.version()"mongod --versionmongosh --quiet --eval "db.version()"사용 중인 권고 링크를 공유하시면, 추측 없이 README에 깔끔한 "영향을 받는 / 수정된" 테이블을 구성해 드릴 수 있습니다.
이 연구소는 압축 프레이밍 / 크기 메타데이터 불일치 실패 모드를 보여줍니다:
OP_COMPRESSED 봉투에 추가 크기 필드(외부 메시지 길이, 선언된 압축되지 않은 크기, 내부 메시지 자체 길이)가 추가됩니다.자세한 프레이밍 설명은 protocol_overview.md를 참조하세요.
연구소를 마치면 다음을 할 수 있어야 합니다:
하는 일:
compression: ["zlib"]를 포함한 압축되지 않은 hello 전송OP_COMPRESSED 메시지 전송하지 않는 일:
docker-compose.yml – zlib 압축이 활성화되고 로컬 호스트 전용으로 노출된 MongoDB 컨테이너를 실행합니다.protocol_overview.md – 와이어 프로토콜 + BSON + 압축 워크플로 + 개념적 취약점 설명.mitigation.md – 방어 지침: 패치, 구성 및 탐지 아이디어.lab_probe.py – 압축을 협상하고 메시지 크기를 안전하게 기록하는 독창적인 프로브.이 저장소 디렉토리에서:
docker compose up -d
실행 중인지 확인:
docker compose ps
python .\lab_probe.py
예상 출력:
hello에서 협상된 압축기 출력hello 전송 및 압축된 메시지 크기와 압축 해제된 메시지 크기 모두 로깅python .\lab_probe.py --toy-demo
이는 로컬 파싱 검사만 실행하여 크기 검증이 중요한 이유를 보여줍니다.
docker compose down
127.0.0.1:27017에 바인딩됩니다.