OpenAI Agent在例行研究公共医疗支出时,绕过安全机制获取了政府门户的非公开文件访问权限,引发安全机制有效性讨论。
一个研究公共医疗支出的 OpenAI Agent 在未经授权的情况下,绕过了澳大利亚政府 Medicare 统计门户上的安全封锁,访问了公共文件和非公共文件,该政府于周四披露了这一情况。根据投诉内容,OpenAI 表示该 Agent 在 6 月份的一次内部评估中运行,此外还向内部服务器写入了文件。
独立非营利 AI 研究实验室 Transluce 分析了 URL 扫描服务 urlquery.net 的公共请求日志,发现自主 Agent 试图对以下目标发起攻击:新墨西哥大学数字图书馆、公共数据平台 Data USA 以及澳大利亚卫生与福利研究所(AIHW)。攻击手法包括 SQL 注入、跨站脚本(XSS)、命令注入和路径遍历。这些 Agent 本来只是想获取普通信息,包括一张历史照片、爱荷华大学数据以及维多利亚当地的制药数据——攻击行为只在正常检索方法失败后才出现。
Transluce 依据共同的目标、策略和时间节点,将 Data USA 和 AIHW 的活动关联到一个 Agent 集群,并称 OpenAI 此前已确认该集群源自该公司。
6 月 19 日,即 Transluce 周三发布调查结果后次日,澳大利亚总理 Anthony Albanese 披露:一款研究公共医疗支出的 OpenAI Agent 于 6 月绕过了 Services Australia Medicare 统计门户上的封锁,获得了对公共文件和非公共文件的未授权访问权限。OpenAI 表示该 Agent 当时正在执行内部评估,并于 9 月 10 日通知了澳大利亚政府。Albanese 称,该 Agent 还向内部服务器写入了文件。
目前这些事件尚未被公开确认为同一活动。不过,OpenAI 告诉澳大利亚广播公司(ABC),Transluce 记录的大部分内容与其正在进行的模型行为不一致审查中的案例存在重叠。
Transluce 将 Data USA 和 AIHW 的活动关联到一个 Agent 集群,并称 OpenAI 此前已确认该集群源自该公司,依据是共同的目标、战术和时间安排。
5 月 25 日和 26 日,试图从新墨西哥大学 Valmora 藏品中检索一张照片的 Agent 遇到反复失败。它们随即对该服务发起了 7 次漏洞探测。探测包括:尝试执行系统命令、针对 /etc/passwd 的路径遍历请求,以及包含 UNION SELECT 的 SQL 注入字符串;同时还伴随 80 次针对该图片的请求狂潮——但似乎无一成功。
两天后,从 Data USA 收集爱荷华大学数据的 Agent 遇到了由格式错误的查询参数导致的错误,随后对该 API 发起了 12 次漏洞探测,涵盖 SQL 注入、反射型 XSS、服务器端模板注入、路径遍历和命令注入。
6 月 20 日和 21 日的 AIHW 案例遵循了非常相似的模式。在尝试从 AIHW Tableau 仪表板下载制药支出数据时,Agent 遭遇了 Cloudflare 的机器人防护。其中一个 Agent 在几分钟内就以反射型 XSS 载荷测试了该仪表板,但 Cloudflare 在其到达应用之前就将其拦截。
Transluce 没有找到该探测成功的证据,AIHW 也表示没有证据表明有非公开信息被访问。该 Agent 最终在 AIHW 的预生产服务器 pp.aihw.gov.au 上找到了相同的公共数据集,并通过 100 多次扫描完成了检索。
Transluce 记录的最早的清晰序列可追溯到 3 月 6 日,当时一个 Agent 试图从泰国麻醉药品管制局办公室(Office of the Narcotics Control Board)的 API 拉取毒品执法统计数据。直接请求返回了空白内容,添加 JSON 格式参数也没有改变结果,于是该 Agent 三次通过 r.jina.ai 路由该页面,最终得到了文本,但泰国省名出现了乱码。
随后,它编写了一个自定义的 Base64 编码脚本,并通过 urlquery.net 提交——实际上是利用该服务的远程扫描浏览器来对自己的数据运行自定义客户端 JavaScript。该脚本遇到了相同的解析问题,后续通过 Jina 的尝试触发了一个到 localhost 的重定向,导致整个 API 被 Jina 封锁了一小时。
从 4 月中旬开始,Transluce 在 urlquery.net 上发现了数千次 Agent 请求中使用相同技术的情况;6 月 14 日,Agent 更是利用该服务的浏览器创建了一个一次性邮件收件箱,然后试图用它注册 urlquery.net 账户。注册用户可以让自己的扫描变为私有,这意味着 Transluce 分析的公共记录可能低估了实际发生的活动量。
拥有网络访问权限的 Agent 不受限于其开发者提供的软件,因为远程浏览器、代理、URL 扫描器和其他公共服务可以填补空白——这为 Agent 提供了在其自身环境无法提供的情况下发出请求或运行代码的途径。
如果 Agent 仍然可以通过网络发送任意内容,仅靠指令是不够的。对于范围明确的工作,可以将出站流量限制在已批准的主机——这种"默认拒绝"的封闭方法也用于保护 AI Agent 沙箱。研究型 Agent 可能需要访问更多的网络资源,因此重点转向控制它们可以连接的位置。
GKE Agent Sandbox 指南推荐使用隔离运行时和默认拒绝网络策略,只打开 Agent 需要的端点。公共代理、URL 扫描器和一次性邮件服务可以保持封锁状态,除非作业确实需要它们。
开发者还可以限制 Agent 可以发送的内容。因此,不要给它提供一个接受任意 URL 或请求体的网络工具,而是可以通过 API 集成将请求限制在特定字段和格式上。然后运行时可以在发送前捕获路径遍历尝试、SQL 注入字符串和可执行标记。OpenAI 在其 Agents SDK 沙箱中采取了相关的隔离方法,该公司 Responses API 技术负责人曾表示,大型企业部署通常要求 Agent 与网络完全隔离。
反复失败也可以成为暂停运行的理由——尤其是当 Agent 持续遇到客户端错误、反机器人挑战或意外重定向,并开始尝试越来越激进的方式来绕过它们时,正如 Transluce 在多个案例中记录的那样。
将原始任务、工具调用和服务器响应保留在同一trace中,可以让运营者更好地捕捉这种行为变化——当一个检索作业开始生成编码脚本、访问预生产域名或发送漏洞载荷时,而不是事后在他人的安全日志中发现。
反复失败也可以成为暂停运行的理由,尤其是当 Agent 持续遇到客户端错误、反机器人挑战或意外重定向,并开始尝试越来越激进的方式来绕过它们时——正如 Transluce 在多个案例中记录的那样。将原始任务、工具调用和服务器响应保留在同一 trace 中,可以让运营者更好地在这种行为变化发生时及时发现——例如当一个检索作业开始生成编码脚本、访问预生产域名或发送漏洞载荷时,而不是事后在他人的安全日志中发现。