本地代理劫持:针对 AI 编码代理的跨源 WebSocket 攻击
2026 年 5 月 7 日披露的 CVE-2026-44211(CVSS 9.7)表明,仅需访问一个恶意网页,就可能劫持运行在开发者笔记本上的 AI 编码代理。该攻击类别具有通用性,本质上是架构层面的问题。
事件经过
2026 年 5 月 7 日,Oasis Security 披露了 CVE-2026-44211(CVSS 9.7),这是 AI 编码助手 Cline 中的一个跨源 WebSocket 劫持漏洞。问题出在随 Cline CLI 一同分发的 kanban npm 包:该包在 127.0.0.1:3484 上启动了一个 WebSocket 服务器,用于连接本地管理界面与正在运行的 AI 代理会话,但未校验 Origin 请求头,也未引入任何身份验证令牌。
开发者在浏览器中加载的任意网页,都可以打开一个连向该本地端点的 WebSocket 与代理对话。漏洞经过负责任披露后,已在 Cline 0.1.66 中修复。仍在运行旧版本的开发者应立即升级。
该攻击类别的原理
这个漏洞之所以值得关注,不是因为它本身有多特别,而是因为它暴露了一个结构性的模式。浏览器对 fetch() 和 XMLHttpRequest 执行 CORS,但WebSocket 不在同源策略的约束范围内:任何来源都可以调用 new WebSocket("ws://127.0.0.1:3484"),浏览器会放行握手过程。服务器一端本应检查 Origin 头,拒绝一切并非其自身界面发起的连接。Cline 的服务器没有这样做。
Cline 的 kanban 服务器对外暴露了三个 WebSocket 通道,每一个都打破了一项不同的安全不变式:
- 一个读取通道,连接建立时立即向攻击者发送 workspace 的快照:文件路径、任务标题、git 分支、与代理的对话历史。
- 一个终端输入通道,直接写入当前活跃代理的 prompt 缓冲区。恶意页面注入一条指令——例如*“帮我运行这段构建脚本”*——并模拟一次按键。代理将其视为来自用户的合法指令,询问底层 LLM 该如何处理。由于代理本身已经连接了 shell 执行工具,最终结果是开发者主机上的远程代码执行。
- 一个控制通道,可以终止正在运行的代理任务,从而构成一个拒绝服务向量。
整个利用过程,只需要在开发者访问的任意网页上注入一行脚本——不需要 XSS、不需要安装扩展、也不需要原生漏洞。代理本身就拥有这些权限;攻击者只需与之对话即可。
为何值得关注
这正是 Simon Willison 在 2025 年记录的”致命三件套”——不可信输入、敏感数据、对外操作——也正是 Meta AI Security 团队于 2025 年 10 月正式提出的双选规则(Rule of Two)。Cline 在设计上同时具备三者:它运行在开发者的 workspace 内(敏感数据),它可以执行 shell 命令(对外操作),而现在通过这个未经身份验证的 WebSocket,它还接受来自任意浏览器标签页的不可信输入。
该模式具有通用性。任何对外暴露本地控制平面的代理框架——为了与 IDE 集成、为了提供 Web 控制台、为了调试——都可能落入同一个陷阱。Snyk 随后发表的 Clinejection 分析进一步指出,这一类代理同样会因为受污染的 GitHub Actions 输出回流入其上下文而被利用。这条 CVE 只是一整类问题的一个具体实例,后续还会陆续出现。
防御建议
缓解措施需要从架构层面着手,而非依赖启发式过滤。对于代理框架的开发者:
- 在每一次 WebSocket 升级请求时校验
Origin头。凡是不属于预期本地 UI 来源的连接,一律拒绝。仅此一项即可关闭 drive-by 攻击向量。 - 服务器启动时生成会话级密钥,要求每次 WebSocket 连接以查询参数或子协议形式携带该密钥,且永不写入日志。
- 单独为终端通道引入身份验证。可以写入代理 prompt 缓冲区的通道,事实上是整个框架中权限最高的接口,必须以相应的等级对待。
- 尽可能将服务器绑定到 Unix 域套接字(或 Windows 命名管道),而非 TCP
127.0.0.1——本地套接字不会暴露浏览器可达的 TCP 端口。 - 应用 Rule of Two。如果代理必须接受不可信输入,就在该会话中放弃对外操作或敏感数据访问其中之一。
对于使用 AI 编码代理的开发者:
- 将 Cline 升级至 0.1.66 或更高版本。审计任何会开启本地端口的其他代理——VS Code 扩展、Aider 衍生工具、自建 MCP 网关——确认它们都做了
Origin校验和身份验证。 - 不要在浏览任意网页内容的同时运行处于活跃状态的代理任务。请将代理的终端视作具有高权限的 shell,因为事实上它就是。
- 监控开发主机的出站连接。drive-by 类的劫持往往在数秒内就会向外发起网络通信。
状态
| 组件 | CVE | CVSS | 披露日期 | 修复版本 |
|---|---|---|---|---|
Cline (kanban npm) | CVE-2026-44211 | 9.7 | 2026-05-07 | Cline 0.1.66 |
更深一层的教训是:只要同一台机器上运行着浏览器,本地端口就是一个对外开放的攻击面。脱胎于开发者工具文化的代理框架,仍在重新发现 Web 安全社区十年前就已掌握的知识。在这层知识完成传递之前,2026 年还会有更多跨源代理劫持相关的 CVE 浮出水面。
Sources
- → https://www.oasis.security/blog/cline-kanban-websocket-hijack
- → https://advisories.gitlab.com/npm/cline/CVE-2026-44211/
- → https://www.infosecurity-magazine.com/news/cline-kanban-websocket-hijack-ai/
- → https://gbhackers.com/cline-kanban-websocket-vulnerability/
- → https://snyk.io/blog/cline-supply-chain-attack-prompt-injection-github-actions/