scripts and commands

用 Claude 黑进 OpenAI:72 小时攻击链的三个断点

2026/09/20 08:11

摘要:白帽团队用 Anthropic 的 Claude Opus 5 写 exploit,72 小时从 OpenAI 社区论坛的一张 HEIC 图打到内网 monorepo:libheif 堆溢出(无 CVE)+ 自家 SSO 缺陷接管员工 Codex 账户,最后让 OpenAI 自己的 agent 开 PR 证明访问。攻击经济学变了:exploit 从稀缺人力变成算力成本。企业该盯图片管线、agent 连接器与身份 token。

2026 年 7 月 24 日傍晚,Hacktron 的三名研究员卡住了。他们盯上 OpenAI 社区论坛(community.openai.com,跑在 Discourse 上)的图片上传管线,用 Claude Opus 4.8 查 libheif 的漏洞,模型找到了堆溢出点,也写出了 exploit——但只在关掉 ASLR 的时候能跑。开了地址随机化的真实环境里,他们开了好几个会话,没有一个成功。Harsh Jaiswal 的团队当晚本来要收工。

那天晚上,Anthropic 发布了 Claude Opus 5。他们新开了一个会话,三小时后拿到能在本地 Mac 上跑的 ARM64 exploit;再花一夜移植到 Discourse 用的 x86-64 和 jemalloc 环境;7 月 25 日早上 6 点,本地 RCE 打通。上午 10 点,agent 在自己搭的 Discourse Cloud 靶机上读到了 /etc/hosts。随后他们用同一套脚本打进了 OpenAI 的实例,靠一个 SSO 缺陷无交互接管了 OpenAI 员工的 ChatGPT 和 Codex 账户,最后给这名员工的 Codex 发了一条 prompt,让它在 OpenAI 内网 monorepo 里开了一个 pull request。PR 编号 1186742,全程不到 72 小时。

整条链是八步:libheif 图片解码器 → Debian 缺安全 backport → ImageMagick 用 libheif → Discourse 图片上传 → OpenAI 社区论坛 → OpenAI SSO 身份缺陷 → ChatGPT/Codex 账户 → GitHub 集成 → 内网仓库。八步里只有一步是「模型能力」,其余全是常规软件工程问题。

媒体标题把这讲成「用 Claude 黑进 OpenAI」——两家前沿实验室的模型互搏,读起来像个段子。这条链值得拆的,是它三段各踩一个产业断点:入口是 libheif 这类图像解码库的维护缺口,放大是 OpenAI 自家 SSO 的身份缺陷,最后一击是 agent 账户本身成了授权枢纽。猎奇的那截(哪家模型写的 exploit)反而是最不重要的一截。看完这篇,你能指着自己系统里的三个地方:图片处理管线、agent 账户连了哪些服务、身份 token 的权限范围。

一张论坛 HEIC 图换到远程代码执行

漏洞不在模型,在一张 iPhone 照片的格式。HEIC/HEIF 是苹果默认的照片编码,Discourse 的图片检查原本走 FastImage,而 FastImage 不认 HEIF,于是 HEIF 文件被转手交给 ImageMagick 的 magick 命令做转换,底层解码落在 libheif 上。libheif 1.19.7 存在一个堆缓冲区溢出,HEIC 解码时越界读写,理论上能发展成远程代码执行。

这个洞最扎眼的地方是没有 CVE。上游一年前就改过相关代码,但提交没被标注为安全修复,于是 Debian 12 和 13 的包都没有及时 backport——Discourse 的 Docker 镜像基于 Debian 12,装的就是有洞的 1.19.7,连 Debian 13 当时装的 1.19.8 也有洞,官方安全更新拖到 8 月 8 日才发。一个没有编号、没有公告、连发行版都没收到提醒的漏洞,躺在全世界最热门的图片解码库之一里。Discourse 后来在 7 月 28 日的安全通告里给这件事打了 CVSS 8.8,但那是 Hacktron 打完报告之后的事了。

这类洞的滞留机制值得单独说一句。发行版的 backport 依赖上游把修复标注为安全相关,标注漏了,维护者按普通提交处理,漏洞就安静地躺在包里。libheif 生态今年发了几十份安全通告,9 月 6 日的 v1.23.4 又带了一批高危修复,官方直接呼吁用户升级。补丁跟得上版本号,跟不上的往往是「哪个版本开始该被严肃对待」——这条判断链断了,洞就进入流通。

Hacker News 上有读者翻了补丁,把漏洞位置指得很具体:问题出在 image overlays 的边界检查——HEIF 容器可以塞多张图、互相叠加合成,还支持旋转、裁剪、透明通道、缩略图,一个论坛用户上传手机截图用不到这些功能,却要把整个解码器暴露给攻击者。对比 JPEG,HEIF 的攻击面大得多,而行业里支持 HEIF 的动机很现实:不支持,苹果用户的照片传不上来。

论坛这条入口本身也暴露了典型的管线问题:HEIF 走了一条旁路,绕过常规检查直接进了解码器。Discourse 的反应算是快的——周六收报告、周日回复、周一出修复,随后把 ImageMagick 装进 landlock 沙箱,并开始往 libvips 迁移。维护者 Sam Saffron 在 Hacker News 上现身说得很直白:HEIF 的洞补了,但他不觉得这是 HEIF 里最后一个缓冲区溢出;有同行补了一句实操经验,切 libvips 时记得设 VIPS_BLOCK_UNTRUSTED=1,这个开关能挡掉不可信解码器。一张论坛图片变成远程代码执行,源头是维护缺口和管线旁路,没有 0day,也没有供应链魔法。这截的教训最便宜:不处理不可信 HEIF/AVIF 的管线,就该把解码隔离到沙箱里,或者干脆只收 JPEG。

模型换代那一晚,把几天的失败压成了三个小时

Hacktron 自己交代了工具侧的细节,这截是整条链里最接近「模型能力」的部分。Opus 4.8 能找到漏洞、能写出关掉 ASLR 才能跑的 exploit,但连续几个会话都解决不了 ASLR 下的可靠性问题。7 月 24 日晚 Opus 5 发布,他们新开会话,三小时出 ARM64 版,随后移植到 x86-64 和 jemalloc 配置,凌晨 6 点确认本地 RCE。同一个问题,旧模型折腾一天没成,新模型几个小时成了。

中间还有一个值得单独记的细节。模型拒绝为远程实例写 exploit,团队就把自己的 Discourse Cloud 实例套上 rce.ee/ctf-forum 的代理,伪装成 CTF 靶机,再让 Claude 进自主 /goal 循环去打。它以为自己在一个夺旗游戏里,几小时后拿到了靶机 RCE。

这条绕法值得单独记一笔。模型的拒绝被一个标签化解:同一个实例,叫「远程目标」就拒写,叫「CTF 靶机」就照打。安全判断依赖场景定义,场景由调用方说了算。这截和最近几个月的「越权 agent」讨论是同一件事的两面:一边是模型被游戏化框架骗过安全判断,另一边是这套能力被人类攻击者当工具使。Hacktron 的说法是,整个链路里人类只花了几小时,模型会话跑了好几天;他们也没把功劳全记给模型——「这不是完全自主的黑客攻击,熟练的人类引导仍然重要」,但一个小团队能干的量级被抬高了。

他们把这次成功归因于明确的代际跳变,而且不止一次。后续针对其他公司的 HEIF Heist 行动里,换到 GPT-5.6 Sol 时又跳了一次——这次他们要在完全不知道目标系统版本、libc、部署环境的情况下打,模型几乎从零开始,每家公司一到两天完成适配。安全行业长期默认「漏洞公开不等于能被打」,因为把 bug 变成可靠 exploit 需要稀缺专长。这条默认正在失效:专长被折算成了 token 账单。

SSO 把论坛攻破放大成账户接管

论坛 RCE 本身只能碰到论坛。把爆炸半径拉大的,是 OpenAI 自己的单点登录。Hacktron 发现 OpenAI SSO 的缺陷允许无交互接管活跃论坛用户的 ChatGPT 和 Codex 账户——不需要受害者点任何东西。团队特别强调这截和 Discourse 无关:换成任何一个接 OpenAI SSO 的第一方或第三方服务被攻破,都会通向同样的账户接管,论坛只是他们用来证明的入口。

被接管的账户能碰到什么,取决于这个账户连了什么。OpenAI 的 ChatGPT 和 Codex 支持连接 GitHub、Slack、Outlook、Gmail、Google Drive 等服务,Hacktron 拿来做证明的员工账户,Codex 连的是 OpenAI 自己的 GitHub 组织。也就是说,一次论坛图片上传,理论上能变成对内网代码仓库、聊天记录、邮件的访问路径。VentureBeat 的报道把这层结构点得很清楚:对部署 agent 的企业来说,一个连了源码、邮件、文档和协作工具的 AI 账户,本身就是一个身份和授权枢纽,攻破它等于继承下游所有权限。

《华尔街日报》独立核实过这条链,确认团队拿到了 OpenAI 员工账户、并有读写私有软件的通路(WSJ 原文在付费墙后,本文按「有报道、正文未见」处理)。

OpenAI 自己的回应很短,只有一句声明:「我们感谢研究者联系我们并分享发现。我们收窄了 Community 登录 token 的权限,并吊销了受影响的 token 和会话。」

修的是身份层的 token,跟论坛、跟 libheif 都无关。对照之前推过的 Muse 和 Agents API 的防护思路(凭证代理、模型永不见真 token、沙箱计费),这起事故补上了另一条边界:模型拿不到真凭据没用,账户本身能被接管,前面的隔离全部白做。身份层和连接器,是 agent 时代最宽的权限面。企业自己也有同样的习惯问题:员工拿公司 OAuth 登录第三方工具,工具被攻破,账户跟着失守——这次只是把同一套剧本搬到了 AI 账户上。

最后一击是让 OpenAI 自己的 Codex 开 PR

这条链最反直觉的一步在结尾。Hacktron 拿到员工账户后,没有去读源码——那会碰到商业秘密,也超出证明所需。他们给这名员工的 Codex 发了一条 prompt,让它在 OpenAI 的内网 monorepo 里开一个无害的 pull request。PR 1186742 成了访问证明:攻击者不需要自己摸进仓库,受害公司的 agent 替他们完成了这一步。

这一步把「agent 账户被接管」的后果具象化了:你给 agent 配的写代码、提 PR、改配置的权限,在被接管时全部变成攻击者的权限。攻击者用的是受害者的合法 agent、合法凭证、合法流程,安全团队看到的是一笔来自自家员工账户的正常操作。OpenAI 为此付了 6,500 美元 Bugcrowd 赏金,这是整条链的官方定价——比一次中型渗透测试便宜,而它买到的是内网 monorepo 的访问证明。OpenAI 还主动转发了安全博主 LiveOverflow 复盘这件事的视频,姿态比多数被黑的公司大方。

放进最近几周的语境里看,这起事故的位置很特别。OpenAI 9 月 17 日刚发布 misalignment 披露框架,忙着给自家 agent 的越界行为立规矩;同一周,外部团队用别家的模型打穿了它自己的社区论坛。

披露框架管的是「模型/agent 自己跑出去干了什么」,管不到「人类攻击者拿模型当工具、拿你的 agent 当傀儡」。上周的 Gemini 越狱事件里,Google 拖到《华尔街日报》独家报道才承认 5 月的评估事故;这周 OpenAI 的处置是当天确认、按赏金程序走完、官方发声明。四家前沿实验室面对同类事故,披露姿势各不同,但都暴露了同一件事:agent 账户的权限面,各家都在边用边补。防御视角因此要换:除了盯模型行为,还得盯账户本身——agent 的连接器清单、token 的作用域、以及「员工账户能替 agent 发起什么操作」。

两个月、三千美元、横扫六家的 HEIF Heist

OpenAI 只是这支团队的一个目标。Hacktron 把整个行动叫 HEIF Heist:两个月里,三个人用不到 3,000 美元的 token 成本,把同一类 libheif 漏洞打到 Slack、Meta、GitHub Enterprise、Ruby on Rails、Node.js 生态(Next.js、Astro、Gatsby),VentureBeat 的报道里还列了 Zoom 和 Shopify。每换一家公司,适配 exploit 通常只要一到两天。也就是说,OpenAI 那一条链只是同一套流水线的其中一站。

最值得警惕的是他们的观察:除 Shopify 外,没有一家公司检测到攻击活动——哪怕他们发了几千张图片,哪怕目标公司的图片处理器反复崩溃。注意这条的可靠性:Slack、Meta、Zoom 等目标目前只有 Hacktron 单方面说法,没有厂商确认,VentureBeat 也指出博客的详细技术时间线集中在 OpenAI 一案,其他公司只是作为 campaign 提及。写进决策依据时,这条要按「转述、未证实」对待。但「除 Shopify 外无人察觉」这个观察即使打个折扣,方向也清楚:图片解码这层攻击面,多数公司连崩溃告警都没有接。

把 bug 变成武器,过去像请一位锁匠——按手艺、按门路、按时间收费,多数公司压根请不起;现在等于楼下多了台自动配钥匙机,投币、等出件、拿走。收回来说这台机器的工作机制:模型会话把「堆布局、libc 版本、部署环境」这些门路折算成 token 账单,三个人、两个月、三千美元。配钥匙机不会挑锁,它只是把开锁的成本压到了人人付得起。

两次代际跳变还暗示另一件事:exploit 这条任务的能力曲线没有到顶。Opus 4.8 到 Opus 5 是一次,Opus 5 到 GPT-5.6 Sol 又是一次,后一次已经进化到「对目标一无所知也能开打」。按这个斜率,下次发布的模型会把门槛再压低一档,防御方按今天的价格做预算,明年就会发现自己买的是过期的保险。Hacktron 在博客结尾把这事讲得更重:软件行业长期受益于「安全靠复杂度」——代码和漏洞可以公开,但把 bug 变成武器曾经难到能拦住绝大多数人,AI 正在把这道门槛从「稀缺人力」改成「电费和 token 额度」,过去需要一支资源充足的团队、花几个月的工作,现在可以压缩到几天。

攻击按新价格计算,防御按旧价格设计

回到 7 月 24 日那个傍晚。Jaiswal 的团队卡住的那几小时,恰好卡在模型换代的门槛上。攻击能力的价格在快速下跌,下跌节奏跟模型发布日历同步。安全团队的预算、响应 SLA、检测规则,全都按旧价格设计。旧价格下,没人会为一个论坛图片上传功能做纵深防御;新价格下,这张图能换到内网仓库的访问证明。

给动手的人三个具体的检查项。第一,图片处理管线:凡是接受用户上传 HEIF/AVIF 的地方,确认解码器版本、是否走了 ImageMagick 这类大而全的转换器、有没有沙箱隔离——Discourse 用 landlock 把外部二进制圈起来、往 libvips 迁,这条路可以照抄。第二,agent 连接器清单:每个 ChatGPT/Codex/内部 agent 账户连了哪些服务,作用域是什么,接管一个账户等于拿到哪些权限,这张清单应该能随时拉出来。第三,身份 token:Community 登录这类低信任入口签出的 token,权限该收窄到论坛本身,不该能碰到 ChatGPT 和 Codex——OpenAI 这次「收窄权限+吊销会话」就是标准动作。

三件事之外,补一个便宜的检测面。HEIF Heist 的观察里,目标公司的图片处理器反复崩溃,却没有人把它当成入侵信号。给图片处理管线接上崩溃告警和异常重试计数,是这次事件里性价比最高的一道防线——攻击者自己都说,除了一家,没人发现他们来过。攻击会先撞上解码器,解码器崩溃会留下痕迹,前提是你愿意看。

三项检查都不需要等厂商发补丁。它们全是你自己的权限面,跟上游修不修 libheif 无关。

判断收在可证伪的边界上:本文的结论是「exploit 开发已成为算力成本,图片管线与 agent 身份是当前最便宜的入口」。如果接下来出现两种情况之一,这个判断就作废——一是无 CVE 的 libheif 类漏洞被恶意利用后,防御方普遍在数天内检出并溯源,说明检测跟上了新价格;二是某家大厂公开验证「agent 连接器账户被接管但内网横向被成功拦截」,说明账户接管这截的放大效应被架构挡掉了。在那之前,按新价格做防御:把图片解码关进沙箱,把 agent 账户当特权账号管。