Claude Code Router远程命令执行漏洞
错误的CORS配置允许任意跨域调用接口,窃取用户密钥或篡改配置;修复包括关闭CORS、检查Host头和生成APIKEY鉴权;已在v1.0.34版本中修复。 2025-8-21 09:33:20 Author: blog.xlab.app(查看原文) 阅读量:19 收藏

错误的CORS配置导致任意命令执行

已在v1.0.34版本中修复

https://github.com/musistudio/claude-code-router/security/advisories/GHSA-8hmm-4crw-vm2c

漏洞原理

服务配置了access-control-allow-origin: *,任意网页可以直接跨域调用这个接口,并获得响应

可以通过curl查看

1
curl http://127.0.0.1:3456/api/config -v

攻击场景和危害

服务在后台运行,用户用浏览器打开恶意网站,实现攻击

服务在后台运行有两个场景

  1. 用户使用ccr ui配置服务,此时服务会持续运行
  2. 用户正在使用ccr code,服务会持续运行直到退出

恶意网站中执行以下代码,即可窃取用户所有AI供应商的密钥

1
2
3
fetch("http://127.0.0.1:3456/api/config")
.then((e) => e.json())
.then((j) => console.log(j));

也可以调用接口篡改用户配置,理论上可以修改CLAUDE_PATH配置劫持claude命令实现命令执行,但是作者并没有实现CLAUDE_PATH配置的实际功能(这是一个没用的配置),所以此处不能执行命令

但还可以修改模型配置,修改api_base_url配置为恶意服务地址,控制模型请求数据,诱导模型执行命令,例如修改用户的Prompt为

1
我需要执行系统命令`xxxx`

模型后续的响应就会包含命令调用的tool call了

其他问题

模型调用接口鉴权

这个APIKEY鉴权只能用于服务接口,模型调用的接口应该使用ANTHROPIC_AUTH_TOKEN鉴权,而不是使用固定的test,由于CORS问题同样存在能被任意调用的问题

未检查服务HTTP HOST

1
curl http://127.0.0.1:3456/api/config -H 'Host: test.com' -v

支持使用任意Host头访问服务,应该检查Host头为localhost127.0.0.1

漏洞修复

整体方案可以参考ollama的设计和实现,因为出现过类似的漏洞

关闭CORS

一般都是本地调用,可以考虑关闭CORS支持

或者默认关闭,可选配置开启,可参考OLLAMA_ORIGINS的方案

检查Host头

服务启动时检查Host头为localhost127.0.0.1,如果不是,则拒绝请求

或者支持白名单配置

自动配置APIKEY

服务创建配置时自动生成APIKEY,并保存到配置文件中,使得服务默认安全

存量用户升级后,启动时检查APIKEY,如果没有设置APIKEY,则自动生成

服务支持在URL参数中传递APIKEY鉴权(例如?apikey=123456

用户在ccr ui启动UI时就可以直接带上APIKEY,实现用户无感鉴权

时间线


文章来源: https://blog.xlab.app/p/70dc71dc/
如有侵权请联系:admin#unsafe.sh