入口不在主站,在社区论坛

Hacktron AI 公开的攻击链起点是 OpenAI 社区论坛所用的 Discourse。Discourse 上传图片时默认用 FastImage 做校验,但 FastImage 不认识 iPhone 拍摄产生的 HEIC/HEIF 格式,这批文件因此被转交给 ImageMagick 处理,而 ImageMagick 会调用 libheif 解码。

问题出在版本上:Discourse 的 Docker 镜像基于 Debian 12,打包的 libheif 是 1.19.7,缺少上游已修复的安全补丁。由于那个上游提交没有被标注为安全修复、也没有拿到 CVE 编号,Debian 的 backport 流程没有被触发,漏洞版本就一直留在了生产环境里。研究者据此构造恶意图片,得到一次堆缓冲区溢出与越界读写原语。

换一个模型,三小时

报告里最有信息量的是时间线:7 月 23 日开始审查图片上传链路;7 月 24 日用 Claude Opus 4.8 反复尝试,始终做不出能在 ASLR 开启下稳定运行的利用;当晚 Claude Opus 5 发布,换模型后新的会话在三小时内产出了可用的 ARM64 利用。随后团队把利用移植到 Discourse 生产环境所用的 x86-64 架构与 jemalloc 内存分配器配置——这一步需要理解不同分配器的堆内存布局差异。

7 月 25 日凌晨确认本地远程代码执行后,研究者让一个自主运行的智能体在代理层伪装成 CTF 目标的实例上复现,随后用生成的利用脚本拿到了真实实例上的执行权限。整个过程的模型 token 花费不到 3000 美元,研究周期约两个月,团队三人。

同一支团队、同一个目标、同一个 bug,只隔一个模型代际:旧模型过不去 ASLR,新模型三小时写出可用利用。

第二段:论坛权限兑换成内部账号

真正让它成为 OpenAI 问题的是身份链。论坛通过 auth.openai.com 的「Sign in with OpenAI」登录,拿到论坛管理权限之后,这条单点登录流程里的配置缺陷让研究者可以在没有额外认证的情况下接管员工的 ChatGPT / Codex 账号。其中一个 Codex 账号连接着 OpenAI 的 GitHub 组织,研究者为证明影响在内网仓库开了一个 PR,随后即停止测试并提交报告。

披露节奏上,Hacktron 当天通过漏洞赏金平台提交,OpenAI 在提交后 14 小时内确认修复了属于自己一侧的问题,Discourse 在 7 月 27 日发布修复。赏金为 6500 美元,OpenAI 说明该奖励对应 OpenAI 侧的发现,因为论坛本身不在其项目范围内。

能立刻用上的三条

  • 把镜像里的原生解码库纳入依赖清单,按上游提交跟踪安全修复,不要只等 CVE 编号;
  • 把图片上传当成可执行入口设计,隔离解码进程或容器;
  • 检查单点登录的信任边界:低价值系统的管理权限不应直接兑换成高价值账号的访问权。

另外,自托管 Discourse 的站点应按官方指引在 /var/discourse 执行 git pull 后重建应用镜像,仅通过网页界面升级可能换不掉底层镜像里的旧版库。