
CVE-2025-10951용 PoC 검사기입니다. ml-logger의 인증되지 않은 경로 탐색 취약점을 통해 /glob 및 /stream 엔드포인트에서 임의 파일 읽기를 검증합니다.
CVE-2025-10951 / GHSA-8x9j-2p8r-7xc6에 대한 존재 증명 검사기 — geyang/ml-logger (≤ 0.10.36)의 ml_logger/server.py에 있는 log_handler / stream_handler 함수에 영향을 주는 인증되지 않은 경로 탐색(path traversal) 취약점입니다.
테스트 승인을 받은 시스템에만 사용하십시오.
| Endpoint | Method | Purpose |
|---|---|---|
/glob | POST | 서버가 앱의 의도된 범위를 벗어난 파일시스템 경로를 열거하는지 확인합니다 |
/stream | GET | 앞에 이중 슬래시를 사용하는 경로 탐색 트릭(//path/to/file)을 통해 임의 파일 읽기가 가능한지 확인합니다 |
기본적으로 증명 단계는 /etc/hostname만 읽습니다. 이는 사실상 모든 Linux 호스트에 존재하는 무해한 한 줄이며, 민감한 데이터가 절대 아닙니다.
pip install requests
기본 확인:
python3 check_mllogger_traversal.py http://TARGET:PORT
결과를 JSON으로 저장(작업 문서화/증거용):
python3 check_mllogger_traversal.py http://TARGET:PORT --json results.json
원하는 특정 파일 가져오기(취약점이 확인된 경우에만 실행):
python3 check_mllogger_traversal.py http://TARGET:PORT \
--fetch /etc/passwd --output passwd.txt
전체 옵션 함께 사용:
python3 check_mllogger_traversal.py http://TARGET:PORT \
--json results.json --fetch /etc/passwd --output passwd.txt
0 — 취약점 확인됨 (완전 또는 가능성 높음)1 — 취약점 미확인 / 대상에 연결 불가{
"target": "http://192.xxx.xxx.xxx:8081",
"timestamp": "2026-00-12T10:15:32.123456+00:00",
"cve": "CVE-2025-10951",
"glob_endpoint_confirmed": true,
"stream_endpoint_confirmed": true,
"vulnerable": true,
"likely_vulnerable": true,
"fetch": {
"remote_path": "/etc/passwd",
"local_path": "passwd.txt",
"success": true
}
}
--fetch는 취약점 확인이 성공한 후에만 실행됩니다. 확인되지 않은 대상에 대해서는 가져오기를 시도하지 않습니다.| Flag | Description |
|---|
target | 기본 URL, 예: http://192.xxx.x.xx:8081 |
--timeout | 요청 제한 시간(초) (기본값: 8.0) |
--json FILE | 구조화된 결과를 JSON 파일로 저장 |
--fetch REMOTE_PATH | 지정한 특정 원격 파일 가져오기 |
--output LOCAL_PATH | --fetch 출력의 로컬 파일 이름 (기본값: 원격 경로의 basename) |