Vitest API 服务器导致远程代码执行CVE-2025-24964
Vitest是一个由Vite驱动的测试框架,旨在将自己定位为 Vite 项目的首选测试框架,即使对于不使用 Vite 的项目也是一个可靠的替代方案。
Vite 天然支持常见的 Web 模式,同时支持 glob 导入和 SSR 等功能,而且拥有许多插件和集成框架,从而慢慢形成一个活跃的生态社区。
一、基本情况
Vitest与应用使用相同配置(通过 vite.config.js ),在开发、构建和测试中共享相同转换流水线提供可扩展的插件AP与Vite进行一流集成。
Vitest 从一开始的时候,就考虑了与 Vite协同工作,因此,充分利用Vite在开发体验方面的改进,比如说即时的热模块重载( HMR )等。
栋科技漏洞库关注到Vitest API 服务器正在监听时访问恶意网站会导致远程代码执行,漏洞追踪为CVE-2025-24964,漏洞CVSS评分9.7。
二、漏洞分析
CVE-2025-24964是Vitest API 服务器某些受影响版本中,当使用Vitest API服务器时访问恶意网站可能遭受远程任意代码执行攻击的漏洞。
CVE-2025-24964漏洞具体分析来说,就是当Vitest 启动时,如果启用`api`选项(Vitest UI会启用它),就会启动一个 WebSocket 服务器。
该WebSocket服务器没有检查Origin标头,也没有任何授权机制,如此的设定,则可能导致受到跨站WebSocket劫持CSWSH攻击的影响。
毕竟,WebSocket服务器具有`saveTestFile` API的权限,不仅可以编辑测试文件,以及`rerun` API,甚至还可以用于重新运行等测试操作。
因此来说,攻击者可通过在测试文件中注入代码,使用`saveTestFile` API保存文件,然后通过调用`rerun` API运行该文件来执行任意代码。
该漏洞可能导致使用Vitest serve API的用户遭受远程代码执行攻击,漏洞已在版本1.6.1、2.1.9和3.0.5中得到修复,建议受影响用户升级。
三、漏洞分析
1、api启用选项(Vitest UI启用)时Vitest启动的Websocket服务器
vitest/packages/vitest/src/api/setup.ts Lines 32 to 46 in 9a581e1 server.httpServer?.on('upgrade', (request, socket, head) => { if (!request.url) { return } const { pathname } = new URL(request.url, 'http://localhost') if (pathname !== API_PATH) { return } wss.handleUpgrade(request, socket, head, (ws) => { wss.emit('connection', ws, request) setupClient(ws) }) })
2、该Websocket服务器具有可以编辑可以重新运行测试的saveTestFile测试文件和API的API。
rerun攻击者可以通过API在测试文件中注入代码saveTestFile,然后通过调用rerunAPI运行该文件来执行任意代码。
vitest/packages/vitest/src/api/setup.ts Lines 32 to 46 in 9a581e1 server.httpServer?.on('upgrade', (request, socket, head) => { if (!request.url) { return } const { pathname } = new URL(request.url, 'http://localhost') if (pathname !== API_PATH) { return } wss.handleUpgrade(request, socket, head, (ws) => { wss.emit('connection', ws, request) setupClient(ws) }) })
四、POC概念验证
1、打开vitest UI。
2、访问具有以下脚本的恶意网站。
3、如果在env var中具有calc可执行文件PATH(如果在Windows上运行,则可能拥有它),则该应用程序将被执行。
五、影响范围
1.0.0 <= Vitest <= 0.0.125,<=1.6.0
2.0.0 <= Vitest <= 2.1.8
3.0.0 <= Vitest <= 3.0.4
六、修复建议
1.6.1 < Vitest < 2.0.0
2.1.9 < Vitest < 3.0.0
Vitest >=3.0.5
七、参考链接