
MongoBleed(CVE-2025-14847) 실습 및 PoC: MongoDB의 심각한 인증되지 않은 메모리 누수를 재현하기 위한 완전한 교육 환경입니다. 다중 데이터베이스 시딩(PII, API 키)이 포함된 취약한 Docker 컨테이너와 데이터 추출을 시연하는 Python 익스플로잇이 포함되어 있습니다. 보안 연구 및 인식에 이상적입니다. 1-day 분석.
이 실험실은 MongoDB의 심각한 취약점인 MongoBleed(CVE-2025-14847)를 재현하고 분석하기 위해 설계되었습니다. 이 결함은 압축된 메시지를 부적절하게 처리하여 인증되지 않은 공격자가 서버 메모리에서 민감한 데이터를 읽을 수 있도록 합니다.
환경에는 취약한 MongoDB 인스턴스가 포함되어 있으며, 누출의 심각성을 입증하기 위해 더미 민감 데이터(PII, API 키, 금융 기록)가 채워져 있습니다.
CVE ID: CVE-2025-14847
이름: MongoBleed
구성 요소: Wire Protocol (OP_COMPRESSED)
취약한 버전: MongoDB 6.0.x < 6.0.27, 7.0.x < 7.0.28, 8.0.x < 8.0.17 (및 기타)
URL: 클릭하세요 -> NVD CVE-2025-14847
취약점은 MongoDB가 zlib 압축 알고리즘을 사용하여 OP_COMPRESSED 메시지를 처리하는 방식에 있습니다.
uncompressed_size 필드를 실제 압축 해제된 데이터 크기보다 훨씬 큰 값으로 의도적으로 설정합니다.uncompressed_size를 기준으로 메모리 버퍼를 할당합니다.zlib 압축 해제기는 실제 (작은) 페이로드를 이 버퍼의 시작 부분에 씁니다. 버퍼의 나머지 부분은 초기화되지 않은 상태로 남아 이전 작업의 잔여 데이터(RAM 아티팩트)를 포함합니다.실험실은 다음으로 구성됩니다:
admin / secretpassword).init-mongo.js):
compute_instances: 민감한 메타데이터 (사용자 데이터 스크립트, API 키).deployment_secrets: 고가치 대상 (K8s 토큰, CI/CD 키, Slack 웹훅).users: 사용자 자격 증명, 비밀번호 해시(Argon2), MFA 백업 코드(일반 텍스트로 유출됨).query_logs: 과거 쿼리를 포함하며, 일부는 유출된 자격 증명(예: AWS 키)을 포함합니다.exploit.py).취약한 컨테이너를 실행합니다. 그러면 자동으로 데이터베이스가 생성되고 데이터가 채워집니다.
docker-compose up -d
데이터베이스 초기화 및 데이터 로딩을 위해 약 10-15초 기다리십시오.
참고: 이전에 이 실험실을 실행한 경우, 최신 데이터 구조를 로드하기 위해 볼륨을 재설정했는지 확인하십시오:
docker-compose down -v
docker-compose up -d
레거시 requirements.txt 또는 최신 pyproject.toml을 사용하여 pip로 필요한 의존성을 설치할 수 있습니다.
옵션 A: requirements.txt 사용 (표준)
pip install -r requirements.txt
옵션 B: pyproject.toml 사용 (최신) 이 방법은 현재 환경에 프로젝트와 의존성을 설치합니다.
pip install .
데이터베이스에 접근 가능하고 데이터가 올바르게 시딩되었는지 확인하는 검증 스크립트를 제공했습니다.
python verify_lab.py
이 스크립트는 관리자 자격 증명을 사용하여 sensitive_db, legacy_crm 등의 데이터베이스 존재 여부를 확인합니다.
Python 스크립트를 실행하여 서버를 공격합니다. 이 단계에서는 자격 증명이 필요하지 않으며, 취약점의 인증되지 않은 특성을 보여줍니다.
python exploit.py --host localhost --port 27017 --min 100 --max 5000
스크립트는 다음 단계를 수행합니다:
OP_COMPRESSED 헤더로 래핑합니다.예상 출력: 다양한 오프셋에서 누출이 발견되었음을 나타내는 출력과 감지된 비밀의 요약이 표시되어야 합니다.
[*] MongoBleed Exploit (Custom Implementation)
[*] Target: localhost:27017
[*] Scanning memory offsets 100 to 5000...
[+] Offset 120 | ... dbmongotesting ... compute_instances ...
[+] Offset 145 | ... field name 'AKIAIOSFODNN7EXAMPLE' is not valid ... [!] FOUND AKIA
[+] Offset 210 | ... "token": "eyJhbGciOiJSUzI1NiIsImtpZCI6Ik16UTBOVFZ... [!] FOUND token
[*] Scan completed in 12.45s
[*] Total bytes leaked: 4502
[*] Unique fragments: 156
[*] Secrets Summary:
[!] Found pattern: AKIA
[!] Found pattern: token
[!] Found pattern: password
프로덕션 환경에서 이 취약점을 수정하려면:
이 프로젝트는 MIT 라이선스에 따라 라이선스가 부여됩니다. 자세한 내용은 LICENSE 파일을 참조하십시오.
이 자료는 교육 및 연구 목적으로만 제공됩니다. 소유하지 않거나 명시적 테스트 허가를 받지 않은 시스템에서 이 익스플로잇을 사용하지 마십시오. 저자는 이 정보나 도구의 오용에 대해 책임을 지지 않습니다.
Joseph Meneses (ElJoamy)
백엔드 및 AI 개발자 · 사이버보안 엔지니어 · DBA · 침투 테스터