-
MongoBleed(CVE-2025-14847) 은 2017년 이후 모든 MongoDB 버전에 존재한 심각한 메모리 누출 취약점으로, 공격자가 데이터베이스의 힙 메모리 임의 데이터를 읽을 수 있음
- 취약점은 zlib 압축 경로의 버그로 인해 발생하며, 인증 없이 단순히 데이터베이스에 연결만 해도 악용 가능
- 공격자는 조작된 압축 요청을 보내 서버가 잘못된 크기의 버퍼를 할당하도록 유도하고, 그 안의 이전 작업 메모리(비밀번호, API 키 등) 를 노출시킬 수 있음
- MongoDB는 2025년 12월 19일 패치를 배포했으나, EOL 버전(3.6, 4.0, 4.2) 은 수정되지 않음
- 8년간 존재한 이 취약점은 인터넷에 노출된 21만 개 이상 MongoDB 인스턴스에 영향을 주며, 클라우드·온프레미스 환경 모두에서 즉각적 패치 또는 압축 비활성화가 필요함
MongoBleed 개요
-
MongoBleed(CVE-2025-14847) 은 MongoDB의 zlib 1 메시지 압축 경로에서 발견된 취약점으로, 2017년 이후 모든 버전에 영향을 미침
- 공격자는 인증 없이 데이터베이스에 연결만 하면 임의의 힙 메모리 데이터를 읽을 수 있음
- MongoDB 3.6, 4.0, 4.2 등 지원 종료(EOL) 버전은 수정되지 않음
- 이 버그는 2017년 5월의 PR에서 도입되었으며, 2025년 12월 19일 공식적으로 공개됨
- MongoDB는 Atlas 클라우드 서비스를 포함한 모든 인스턴스에 패치를 적용했다고 발표
MongoDB 통신 구조
- MongoDB는 HTTP 대신 자체 TCP 프로토콜을 사용하며, 메시지는 BSON(Binary JSON) 형식으로 전송됨
- 모든 요청은 OP_MSG 명령으로 구성되며, 압축 시 OP_COMPRESSED 메시지로 감싸짐
- 메시지에는 uncompressedSize, originalOpcode, compressorId 등의 필드가 포함됨
-
uncompressedSize는 압축 해제 후의 예상 크기를 나타냄
익스플로잇 단계 1 — 잘못된 버퍼 할당
- 공격자는 uncompressedSize 값을 실제보다 과도하게 큰 값으로 설정해 서버가 큰 버퍼를 할당하도록 만듦
- MongoDB 서버는 압축 해제 후 실제 크기를 검증하지 않고 사용자가 지정한 크기를 신뢰함
- 결과적으로 메모리에는 [실제 데이터 | 미참조 힙 쓰레기] 형태의 구조가 남음
- C++ 기반 MongoDB는 메모리 초기화를 수행하지 않기 때문에, 이 영역에는 이전 작업의 민감 데이터가 포함될 수 있음
- 예: 비밀번호, 세션 토큰, API 키, 고객 데이터, 시스템 설정 등
익스플로잇 단계 2 — 데이터 유출
- 공격자는 잘못된 BSON 입력을 전송해 서버가 메모리의 쓰레기 데이터를 문자열로 파싱하도록 유도
- BSON의 첫 필드는 문자열이며, C 언어의 널 종료 문자열(null-terminated string) 규칙을 따름
- 공격자가 널 종료 문자가 없는 문자열을 보내면, 서버는 메모리 내 다른 데이터까지 읽어들임
- 예시: [ { "a | password: 123\0 | apiKey: jA2sa | ip: 219.117.127.202 ]
- 서버는 이를 잘못된 BSON 필드로 인식하고 오류 메시지에 해당 내용을 포함해 응답
-
"errmsg": "invalid BSON field name 'a | password: 123'"
- 이 과정을 반복하면 공격자는 힙 메모리 전체를 스캔하며 민감 정보를 수집 가능
영향 및 위험성
-
인증 전(pre-auth) 단계에서 발생하므로, 공격자는 로그인 없이 데이터에 접근 가능
-
인터넷에 노출된 MongoDB 인스턴스는 즉시 위험에 노출됨
- Shodan 검색 기준 213,000개 이상의 MongoDB 인스턴스가 공개 상태
-
2017년부터 2025년까지 약 8년간 존재한 취약점으로, 단순한 구조 탓에 실제 악용 가능성이 높음
- MongoDB는 “현재까지 악용 증거는 없다”고 밝혔으나, 공식 사과나 상세 타임라인은 공개하지 않음
완화 방법
-
최신 패치 버전(8.0.17 이상) 으로 업데이트
- 단기적으로는 zlib 네트워크 압축 비활성화로도 완화 가능
- MongoDB Atlas 사용자는 이미 패치 적용 완료
추가 정보 및 관련 논의
- Elastic 보안팀 리드가 ‘MongoBleed’ 라는 이름을 붙이고 PoC(Python 스크립트) 를 공개
- MongoDB와 Elastic은 검색 및 분석 기능 영역에서 경쟁 관계
- 관련 리소스:
요약
- MongoBleed는 zlib 압축 처리 버그로 인해 발생한 메모리 누출 취약점
- 공격자는 조작된 압축 요청을 통해 이전 메모리 데이터(비밀번호, API 키 등) 를 획득 가능
-
2017~2025년 모든 MongoDB 버전이 영향받으며, 패치 또는 압축 비활성화가 필수
-
인터넷 노출 인스턴스 21만 개 이상이 잠재적 피해 대상
- MongoDB는 패치를 배포했으나, EOL 버전 미지원 및 공개 대응 지연이 지적됨