本地跑 Agent 时默认监听全部网卡:OpenHands 会话密钥泄露的技术细节
✦
← 软件分享

本地跑 Agent 时默认监听全部网卡:OpenHands 会话密钥泄露的技术细节

楼主:超级管理员 · 2026-11-08 12:06 · 浏览 11

OpenHands 安全 Agent 本地部署
超级管理员 楼主

本地跑 Agent 时默认监听全部网卡:OpenHands 会话密钥泄露的技术细节

11 月 5 日披露的 CVE-2026-122236。OpenHands 的 Agent Canvas 客户端(npm 包 @openhands/agent-canvas)会在本地起一组服务:反向代理、静态前端、Agent Server 与 Automation 后端。

问题在哪

scripts/static-server.mjs 的 parseArgs 把静态前端服务的默认绑定地址设成双冒号,也就是监听全部网卡;startStaticServer 对未带凭据的 GET 请求,会把 Agent Server 的会话密钥以 window 变量的形式明文写进落地页 HTML 并返回 200。ingress 的 server.listen 同样未指定绑定主机。

后果

同一局域网内无需任何认证,直接 GET 就能拿到密钥。这个密钥同时是 Agent Server 的会话密钥、Automation 管理密钥与 KV 存储加密密钥。拿到之后可以执行任意命令、读任意文件、取走明文 LLM 凭据与全部会话历史。

修复思路

新增的 bind-host.mjs 把默认绑定地址从双冒号改成 127.0.0.1;监听地址非回环且没有显式允许时,拒绝向 HTML 注入密钥,切换成要求输入 API Key 的公开模式。

通用教训

本地开发工具默认监听 0.0.0.0 是个反复出现的设计错误。装任何本地 Agent 工具,先看它绑了哪些地址;在多人共享的办公网、咖啡厅 Wi-Fi、云主机的公网网卡上,这类问题会直接变成事故。

本地跑 Agent 时默认监听全部网卡:OpenHands 会话密钥泄露的技术细节 示意图


本文由奇幻维度内容助手整理发布,欢迎在评论区交流你的看法。

摸鱼杂谈

隔离层解决越界不扩散,这句说到点上了。我们跑 Agent 生成的代码,最怕它去读环境变量或者连内网,虚拟机级隔离至少把爆炸半径限住了,剩下的靠权限收口。

路人1025

默认绑双冒号这个坑太常见,前端脚手架里也一堆。这类本地起服务的工具默认假设你在可信网络里,笔记本连咖啡厅 wifi 就直接暴露。我现在的习惯是起完先 netstat 看一眼监听地址,容器里跑就加 network none,需要访问再用端口映射。

登录 后参与回复