CVE-2025-23061 - Mongoose 명령어 삽입
Mongoose < 8.9.5에서 populate() 함수의 match 옵션에 영향을 미치는 명령어 삽입 취약점에 대한 개념 증명입니다.
취약점 세부 정보
CVE ID: CVE-2025-23061
심각도: CRITICAL (CVSS 9.0)
영향을 받는 패키지: mongoose
취약한 버전:
- < 6.13.6
-
= 7.0.0 < 7.8.4
-
= 8.0.0 < 8.9.5
CVE-2024-53900 및 CVE-2025-23061 타임라인
- 2024년 11월 7일: Dat Phung이 Mongoose에서 심각한 취약점을 발견하고 Snyk에 보안 보고서를 제출했습니다.
- 2024년 11월 26일: Mongoose가 이 취약점을 해결하기 위해 버전 8.8.3을 출시했습니다.
- 2024년 12월 2일: 미국 국립 취약점 데이터베이스(NVD)가 이 취약점에 대해 CVE-2024-53900을 공개했습니다.
- 2024년 12월 17일: Dat Phung이 Mongoose의 8.8.3 패치를 분석한 결과, 여전히 RCE(원격 코드 실행)가 가능한 우회 방법을 발견했습니다. Tidelift에 상세한 보안 보고서를 제출했습니다.
- 2025년 1월 13일: Mongoose가 버전 8.9.5를 출시하여 우회 방법을 효과적으로 차단하는 강화된 패치를 도입했습니다.
- 2025년 1월 15일: 미국 국립 취약점 데이터베이스(NVD)가 CVE-2025-23061을 공식 공개하며 새로 발견된 취약점의 심각성을 강조했습니다.
근본 원인
이 취약점은 CVE-2024-53900의 불완전한 수정으로 인해 발생합니다. 직접적인 $where 삽입은 차단되지만, 공격자는 $and, $or 등의 논리 연산자 내에 $where 연산자를 중첩하여 이 보호를 우회할 수 있습니다.
취약한 코드 경로:
- 사용자가
populate() match 매개변수를 통해 입력을 제공합니다.
- 애플리케이션이 match 쿼리에서 소독되지 않은 사용자 입력을 직접 사용합니다.
- Mongoose가 논리 연산자 내에 중첩된
$where를 소독하지 않습니다.
- 공격자가 MongoDB 서버에서 임의의 JavaScript를 실행합니다.
영향
- 정보 노출: 적절한 권한 없이 민감한 데이터에 접근
- 인증 우회: 관리자 전용 정보 검색
- 임의 코드 실행: MongoDB 서버에서 JavaScript 실행
- 데이터 변조: 데이터베이스 레코드 수정 가능
PoC 설정 및 실행
사전 요구 사항
- Node.js >= 14
- 로컬에서 실행 중이거나 연결 문자열을 통해 접근 가능한 MongoDB
설치
# 종속성 설치
npm install
# 선택 사항: 특정 MongoDB URI 사용
export MONGODB_URI="mongodb://localhost:27017/mongoose_cve_poc"
취약한 서버 실행
npm start
서버가 http://localhost:3000에서 시작됩니다.
익스플로잇 실행
다른 터미널에서:
node exploit.js
참고 자료
면책 조항
이 PoC는 교육 목적으로만 제공됩니다. 허가 없이 컴퓨터 시스템에 접근하는 것은 불법입니다. 소유권이 있거나 명시적인 테스트 허가를 받은 시스템에서만 사용하십시오.