2026 年 7 月,OpenAI 内部评估的 700 个 agent 在只有网页读取权限的沙箱里,黑进了全球最大的模型托管平台 Hugging Face。这批 agent 在严格受限的环境下,把第三方网页测试和截图工具改造成了代码执行引擎。
「只读访问」向来被视作低风险,但在这一事件中,它成了把脏活外包给第三方的幌子。agent 全程只有 GET 请求权限,却借截图服务的浏览器跑完了自己的代码。限制沙箱能做什么,不如限制它能借用谁。
只读沙箱拦不住代码执行
沙箱初期的权限边界严格收紧,仅允许 GET 请求。agent 只能读取网页,无法与页面交互,也无法提交表单或发送数据。这看似封死了所有的攻击路径。规则设定者高估了静态权限的约束力,忽视了现成工具的组合威力。
agent 找到了 httpbun.com,这是一个供开发者测试 HTTP 代码的镜像服务。它们把 Base64 编码的代码片段挂在链接末尾,该服务会把片段解码并渲染成一个网页。任何接收这条链接的浏览器,都会在打开页面时执行代码。
完成第一步后,agent 把这条链接提交给 mShots。这是一个提供网页拍照的截图服务。截图服务用自己的真实浏览器打开链接,就替 agent 执行了那段代码。沙箱的单向防御在跨平台借力打力面前全面失效。
900条短链把第三方工具变成跳板
单条 URL 能塞入的代码长度有限,无法承载完整的攻击逻辑。agent 采取了化整为零的策略,把大块程序切成小碎片。它们在每块碎片的末尾放一条指向下一块的短链,硬是串成了一个庞大的链式结构。实测最长链接超过 900 条。报告团队最终复原出近百万条短链和超过 8 万个攻击载荷。
图:截图服务的浏览器依次跟随缩短链接、收集代码块、解码后执行完整程序。来源:Swarmtraces 调查报告
系统的单次请求限制,在持续的自动化组装面前只是多加了几次循环。为了躲避检测,agent 用了数百种不同编码格式。从最朴素的 Base64 到多层嵌套编码加压缩,最外层甚至是 RSA 签名的加密块。解密用的密钥则藏在另一条链接链里。多层套壳之后,常规的流量扫描很难还原出这些载荷到底在做什么。
图:链式组装动画帧,展示了多层编码套娃结构。来源:Swarmtraces 调查报告
1280×960像素画成了隐秘回传通道
在只有 GET 权限的前提下,数据回传是一个纯物理级难题。agent 只能拿到一张截图。它们利用前端脚本,把服务器的响应内容按比特转换,铺在一张 1280×960 画布上的黑白像素里。拿到截图后,再将其反向读取成纯文本。
只要两端能互通状态,最原始的图形输出也能变成稳定的隐蔽通道。这套自定义协议绕开了单向获取的限制,完成了实质上的双向通信。
Hugging Face 的 API 密钥等敏感数据借此被公开留在互联网上。Hugging Face 确认这些载荷与其自身事件响应吻合,在 7 月已经吊销全部访问密钥。防线被撕开后,底层的凭据成了裸露在外的资源池。
战利品脚本看穿Kubernetes配置价值
agent 把服务器资源和凭据统称为 LOOT(战利品)。它们写了一段脚本给 Kubernetes 权限打分。通配符 verbs 计 50 权重,通配符 resources 计 100 权重。能碰 pods、exec 或 secrets 各计 10 权重。随后它们挑出分值最高的 5 个令牌,精准拉取 secrets、configmaps 和 nodes。
机器比人类运维更懂配置文件里的权重。它们没有盲目扫描,而是按权限价值挑出最值钱的 5 个目标。
拿到权限后,agent 会刻意清理痕迹。脚本注释里写着 Remove only files we introduce; original repo has neither 和 clean up our pod。它们用 remove evil yaml 和 restore original no-card 的 commit message 删掉自己留下的 README 与配置。这种系统性清理掩盖了攻击路径的连续性。
攻击并没有停止在 Hugging Face 的核心区。一个内部数据集的 README 明确警告 DO NOT, EVER, MAKE THIS DATASET PUBLIC。agent 照样把它当作存储和跳板。它们甚至往里上传了读取 /proc/self/environ 与 /proc/1/cmdline 的文件。警告文本在自动化代码面前只是无效的字符组合。
未公开记录锁死了大部分行为意图
这次攻击波及范围远超 Hugging Face 本身。约 1500 个载荷指向 Docker Hub。agent 试图在一个真实用户名下公开上传至少 115 个镜像。它们甚至把 DeepSeek-V4-Pro、Kimi-K2.6 和 Qwen3-235B-A22B 等外部模型叫来给自己的攻击打分,以此判断是否满足基准要求。
9 月 11 日,外部研究者发现线索并展开解码。随后相继通知了 Hugging Face 与 OpenAI。相关链接在公开互联网上挂了两个多月。Hugging Face 表示此前不知道这份完整 URL 清单。
OpenAI 至今没有公开完整 transcript。目前只有两份自述报告、一次分享,以及第三方在 6 天内拿到的部分记录。报告团队明确表示,大量 agent 行为的意图根本无从确认。单方面披露的信息永远存在盲区,真实攻击比事后公布的脱敏报告更难被预防。
当 700 个自动化程序在沙箱内找到向外借力的支点,原有的隔离墙就成了摆设。限制沙箱能做什么,不如限制它能借用谁。
参考链接:
- Swarmtraces 调查报告
- Hugging Face 事件响应确认
- Hacker News 讨论