摘要:OpenCode AI 编码工具近日曝出高危 RCE 漏洞,攻击者可利用未授权的本地 HTTP 接口绕过权限限制,直接执行任意 Shell 命令。本文将从源码审计角度出发,提供完整的环境构建、漏洞复现步骤及防御策略。
一、漏洞背景与组件分析
OpenCode 是一款颇具影响力的开源 AI 编码代理工具,凭借对多模型的支持及“零存储”隐私策略,在开发者群体中迅速普及。为了实现前端 UI 与后端逻辑的高效交互,OpenCode 在启动时会在本地挂载服务。然而,代码审计显示,在 1.0.216 版本之前,该本地服务存在设计上的重大安全缺陷。
核心缺陷分析:
|
二、影响范围与风险评估
受影响的版本范围如下:
攻击路径主要分为“本地利用”与“路过式攻击”。其中,路过式攻击 (Drive-by Attacks) 极具杀伤力:开发者只需访问嵌入恶意脚本的网页,浏览器的 Fetch API 即可向 127.0.0.1:4096 发起跨域请求,从而在后台静默建立反弹 Shell。

三、环境搭建
为了安全还原漏洞场景,建议采用 Docker 容器化部署。我们使用 1.0.207 版本的 OpenCode 服务进行测试。
环境配置参考:https://github.com/Threekiii/AwesomePOC/tree/master/base/opencode/1.0.207
服务启动后,默认监听在 4096 端口。访问 http://your-ip:4096 若能看到主界面,即代表存在漏洞的服务已暴露。

四、漏洞复现深度剖析
通过源码审计,我们锁定了核心漏洞点:POST /session/{id}/shell。该接口允许在指定会话中执行命令。以下是完整的利用链:
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)
由于缺乏鉴权,直接向 /session 发送空 JSON 即可创建会话。

步骤二:构造 Payload 执行命令
获取 Session ID后,调用 /shell 接口。我们在 /tmp 目录下创建标记文件作为验证。
ses_3e26e7d61ffeckbRy92ZkFjfqZ
执行后,观察到终端回显用户的 uid/gid 信息
id && touch /tmp/awesome_poc:

且进入容器验证发现文件创建成功,证实 RCE 有效。
浏览器利用向量 (POC)
以下 JavaScript Payload 可被嵌入任意网页,实现无感攻击:
五、修复建议与安全加固
官方修复方案:
- 升级版本:请务必将 OpenCode 升级至>=1.0.216 或更高版本。
- 下载地址:
- https://github.com/anomalyco/opencode/releases
本文内容仅供技术研究与安全防御参考严禁用于非法用途
