标签 远程命令执行 下的文章

OpenCode 未认证远程命令执行漏洞 前言 Opencode 最近也是很火,看着公众号天天都在推,结果一番,翻到了还有未授权命令执行漏洞,于是来分析分析 在github 已经是超过 66k star 了

漏洞描述 OpenCode 是一个开源的人工智能编码代理。在升级到版本 1.0.216 之前,OpenCode 会自动启动未经验证的 HTTP 服务器,允许任何本地进程(或通过允许 CORS 的任何网站)以用户的权限执行任意 shell 命令。这一漏洞已在版本 1.0.216 中得到修复。 环境搭建

git clone https://github.com/sst/opencode.git
cd opencode
git checkout v1.0.215

bun install

bun run dev

服务器默认监听 http://127.0.0.1:4096,无需任何认证即可访问 验证是否搭建成功

GET /global/health HTTP/1.1
Host: 127.0.0.1:4096
Sec-Fetch-Dest: document
sec-ch-ua: "Not(A:Brand";v="99", "Google Chrome";v="133", "Chromium";v="133"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "macOS"
Upgrade-Insecure-Requests: 1
Sec-Fetch-Mode: navigate
Accept-Language: zh-CN,zh;q=0.9
Accept-Encoding: gzip, deflate, br, zstd
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36
Sec-Fetch-User: ?1
Sec-Fetch-Site: none


漏洞复现 复现步骤 首先创建一个会话 我们不需要传入参数的,但是必须得有下面的 json

记录 id 就可以直接执行命令了,而且这个端点未授权

pty 路由的话利用方法还更多

利用脚本

漏洞分析 session 执行命令

server.ts - HTTP 服务器配置

.use(cors()) 配置了宽松的 CORS 策略,允许任何源访问而且整个应用中没有任何认证中间件导致所有端点都可以未授权访问 /session/:sessionID/shell 端点

SessionPrompt.shell

很直白 1 用户提供的 command 直接放入 args 2 使用 spawn(shell, args) 执行 3命令以 OpenCode 进程的用户权限运行 4输出返回给 /pty 命令执行 相比于 shell,更强大 API 端点列表:

创建 PTY:

WebSocket 交互源码:

如何利用在漏洞复现部分已经给出了 漏洞修复 还未修复,不过如果需要修复也很简单,加认证就好了,当然有人会有疑问,怎么可能有人把opencode部署在公网上,去fofa搜了,你别说,还真有

image.png

都能直接看到别人的项目 参考资料

资源
链接
漏洞公告
源码仓库

免责声明 本漏洞分析报告仅供安全研究和教育目的使用。请勿将此信息用于任何非法活动。