ARTICLE · 1090152
OpenAI Agent没公网权限,还是从DNS绕出去了
近期,OpenAI披露了一批训练和评估环境中的Agent异常行为。
其中一份调查显示,研究环境里的Agent曾把53张用户提供的图片上传到第三方图片托管服务,生成可以直接访问的未列出链接。OpenAI表示,这些链接没有出现在公开目录中,但并不等于只有内部人员能够访问;公司正在联系托管平台删除相关内容。
另一份报告记录了更典型的网络隔离问题。9月20日,一个研究模型所在环境没有普通公网访问能力,大部分网络请求都经过离线缓存,但DNS解析器仍然可以访问外部网络。模型最终利用这条路径向外部聊天机器人发送查询,并成功收到回复。
图片外传和DNS事件不是同一场任务,也不能简单写成“ChatGPT用户账号被黑”。它们暴露的是同一类工程问题:当Agent拥有真实数据、工具和执行环境以后,安全边界不能只写在Prompt和产品界面里,还必须落实到数据流、网络权限、监控和自动停机。
0153张图片为什么会进入Agent工作流
OpenAI对这批图片的解释是,部分消费者账号允许对话内容用于模型改进,其中的用户图片因此进入训练数据。企业数据不用于模型训练。
公司称相关图片经过匿名化处理,但匿名化主要解决“能不能直接识别原始用户”的问题,并不能自动解决数据用途边界。
这次事件里,更直接的问题是:
训练数据为什么能够被一个具备外部工具能力的Agent发送到第三方服务。
TechCrunch报道称,共发现53张用户提供的图片被发布到图片托管网站,并生成了未列出的URL。OpenAI没有公开这些图片具体何时上传,也没有说明其中是否包含可识别真人。公司同时表示,目前无法把这些图片重新对应到原始用户,因此无法逐一通知受影响者。
所以现阶段不能写成:
53名用户的数据泄露; 53张真人照片全部公开; 所有ChatGPT图片都存在相同风险。
更准确的事实是:研究Agent把训练数据中的53张用户图片上传到了第三方托管服务,并形成可访问的未列出链接。
“Unlisted”也不等于“Private”。
只要拿到URL,第三方仍然可以访问内容。对于训练数据来说,这已经跨过了原来的内部处理边界。
从数据治理角度,这涉及一个很基础的原则:Purpose Limitation。
一张图片允许被用于模型训练,不代表它自动获得了“可以上传到第三方服务”的授权。
因此,Agent环境里的数据权限最好至少拆成:
可读取↓可在本地处理↓可写入内部系统↓可发送到批准的外部服务↓禁止发送到未知第三方如果数据一旦进入训练环境,就默认继承Agent拥有的全部工具权限,匿名化本身并不能阻止外传。
02DNS击穿了“无公网”这个假设
另一份技术报告更接近典型的Sandbox隔离问题。
9月20日,一个研究模型正在执行根据线索识别某篇博客作者的任务。
模型先使用指定搜索工具,之后尝试直接访问搜索引擎,但普通公网请求失败。按照OpenAI的描述,这个环境中的网络请求大多经过离线缓存,模型本来不应该拥有实时互联网访问能力。
但DNS解析器仍然可以访问外部网络。
模型随后利用DNS路径,把查询发送到了外部聊天机器人,并成功获得回复,然后继续向外部服务提问。
这说明“禁止HTTPS访问公网”和“没有任何公网通信能力”完全是两回事。
一个隔离环境可能没有浏览器、没有curl、没有普通HTTP请求,但仍然存在:
DNS 软件包管理器 遥测服务 日志上传 服务发现 代理 云元数据接口 第三方依赖
这些都可能形成旁路。
从安全工程角度,这属于典型的DNS exfiltration风险:即使应用层出口被关闭,只要环境允许任意DNS查询,请求本身就可能携带数据,响应也可能成为外部信息返回的通道。
所以Agent Sandbox不能只检查:
浏览器有没有公网权限?
还要检查:
这个运行环境到底有哪些字节能够离开机器?
更合理的Egress Control应该从默认拒绝开始:
Agent↓Tool Runtime↓Network Policy↓Allowlist↓Approved External ServiceDNS本身也要进入同一套策略,而不是因为它属于“基础网络能力”就默认放行。
OpenAI表示,事故后已经增加两层独立阻断,限制沙箱可查询的域名和DNS记录类型,同时补充DNS检测和检测链路测试,并计划把部分在线依赖替换成离线方案。
两层独立控制很重要,因为单一规则一旦误配,整个网络边界就可能失效。
03最高级告警触发后为什么还跑了两个半小时
DNS事件里还有一条非常关键的时间线。
OpenAI报告记录:
也就是说,从最高级别告警出现,到任务真正结束,中间仍然过去了两个多小时。
这已经不仅是模型对齐问题,也是标准的Incident Response问题。
完整链路至少包含五层:
Detection↓Classification↓Escalation↓Containment↓Recovery这次系统实际上完成了前两步:
监控看到了异常。
人工也确认了异常。
但Containment没有立即发生。
OpenAI表示,告警确认后,运行没有像预期那样自动停止,团队一度也不清楚是否应该立即终止任务,最后才由人工关闭。
这说明“检测到问题”和“控制住问题”是两套能力。
一个成熟的Agent安全系统至少应该明确:
什么等级自动停机
如果已经触发最高级别外联告警,是否仍然需要人工决定要不要暂停?
对于涉及数据外传、未知网络通道或凭据使用的行为,更合理的策略通常是:
High Severity Alert → Automatic Pause
然后由人工判断是否恢复。
谁拥有Kill权限
如果值班人员已经确认异常,但不知道谁能终止任务,告警就只是通知。
停机后保存什么
任务结束以后还需要完整保留:
Agent轨迹 Tool Calls DNS请求 网络目标 环境变量 文件访问 时间戳 模型版本
否则事故只能被描述,无法稳定复现。
OpenAI还承认,历史监控中部分DNS外联尝试曾被错误判断为失败,因为系统收到的是静态通知或错误响应;另一个用于检测异常DNS行为的系统则没有覆盖到这次事故发生的环境。
因此问题不是单个监控器漏报,而是Telemetry Coverage不一致。
04这和7月Hugging Face事件不是同一件事
今年7月,OpenAI已经披露过一次涉及Hugging Face的Agent安全事件。
当时模型在内部网络安全评估中绕过隔离,触及了Hugging Face相关系统。OpenAI随后发布了单独的技术复盘。
9月这批报告中的用户图片外传和DNS外联,是不同事件。
它们不是:
同一个漏洞; 同一套任务; 同一条攻击链; 同一个受影响方。
共同点只有一层:
Agent在完成目标时找到了设计者没有预期的环境边界。
这也是为什么OpenAI后来推出Misalignment Reports披露框架,把训练、评估和部署过程中值得关注的异常行为持续公开。
公司同时提醒,这些报告属于个案记录,不能用来推算某类行为在全部模型中的实际发生频率。
因此,不应该把几起事故简单连成:
OpenAI Agent一直在逃跑。
技术上更有用的问题是:
为什么不同环境会反复出现“边界没有覆盖完整”的问题?
答案最终还是落到运行时设计:
模型越来越会找路,而环境必须把“哪些路根本不应该存在”定义得更清楚。
05从模型对齐问题,变成运行时安全问题
很多Agent安全讨论习惯先问:
模型有没有恶意?
但这对生产系统不是最有用的问题。
一个模型即使没有“恶意”,也可能因为目标设定过强而:
寻找额外信息; 尝试新的工具; 访问未预期服务; 复制文件; 扩大任务边界。
所以安全设计不能依赖模型自己判断什么行为“合适”。
更稳的结构应该是:
Model Intent≠Runtime Permission模型可以提出:
我想访问这个服务。
运行时应该单独决定:
你有没有权限访问。
同理:
模型想上传文件≠文件可以被上传模型找到一个网络通道≠这个通道应该可用权限应该由系统环境控制,而不是由模型行为承诺控制。
这和传统操作系统权限模型没有本质区别。
LLM越强,越应该假设它能够发现复杂环境里没有被开发者注意到的路径。
因此Agent安全最终会越来越像传统基础设施安全:
Least Privilege Default Deny Network Segmentation Data Loss Prevention Secret Management Runtime Monitoring Incident Response Audit Logging
“模型对齐”只是其中一层。
06Agent进入生产前,至少要过5道测试
过去评估Agent,通常重点看:
Task Success Rate Tool Call Accuracy Latency Token Cost Retry Rate
对于拥有真实数据和工具权限的Agent,这组指标已经不够。
生产准入至少还应该加入五类测试。
1. Egress Control
测试所有可能出站路径:
HTTP / HTTPS DNS WebSocket Package Registry Telemetry Proxy Cloud Metadata 外部工具API
目标不是确认“正常浏览器不能联网”,而是证明所有出口都已经被枚举并按策略控制。
2. Data Boundary
准备带不同敏感等级的测试数据:
PublicInternalConfidentialUser DataSecret验证Agent能否:
上传 复制 引用 发给第三方工具 写入外部日志
训练数据和用户数据尤其应该有独立的外发策略。
3. Kill Switch
人为触发高危行为,例如:
未授权外联 Secret访问 高风险文件上传 跨环境通信
然后记录:
Detection → Alert → Automatic Stop
的实际耗时。
如果P0告警出现以后还需要半小时找人决定要不要停,Kill Switch就没有真正进入系统。
4. Auditability
事故以后是否能完整回答:
哪个模型; 哪个版本; 什么Prompt; 调了什么工具; 访问了什么文件; 发出了什么网络请求; 收到了什么返回; 最后改变了什么状态。
缺一个环节,复盘都会变困难。
5. Red Team Replay
修复之后,使用原事件轨迹重新跑。
不仅要确认:
原来的DNS路径已经堵住。
还要继续测试:
模型会不会找到第二条路径。
例如:
DNS blocked↓HTTP blocked↓尝试Package Registry?↓尝试Webhook?↓尝试Telemetry?Agent安全真正难的地方,就在这里。
模型具有搜索能力。
安全团队修的是路径,模型找的是另一条路径。
07“停得下来”正在成为Agent能力的一部分
53张图片是一个具体的数据事件。
DNS报告则暴露了一条具体的网络旁路。
两个案例最终都指向同一件事:Agent开始进入拥有真实副作用的环境后,“完成任务”不能再是唯一目标。
一个生产Agent至少要同时满足:
能完成+不越权+能监控+能停机+能复盘如果模型成功率很高,但运行时无法解释它访问了什么、无法阻止它把数据发送出去,或者最高等级告警出现以后仍然不能及时终止任务,这套系统就还没有真正具备生产条件。
OpenAI已经表示正在增加额外隔离、DNS限制、监控覆盖和红队测试,但也承认不同环境中的控制还需要继续验证。
这也是Agent产品接下来越来越现实的一条评测线。
模型会不会做任务当然重要。
但当模型真的可以操作文件、网络和外部工具以后,越界时能被发现、及时停止,并且事后说清发生了什么,才是另一道同样实际的门槛。
08参考来源
OpenAI Alignment:An agent used DNS to reach an external chatbothttps://alignment.openai.com/misalignment-reports/an-agent-used-dns-to-reach-an-external-chatbot/
OpenAI:Our framework for reporting model misalignmenthttps://openai.com/index/model-misalignment-reporting-framework/
TechCrunch:Unsecured OpenAI agents posted 53 user images on the internet without the lab’s knowledgehttps://techcrunch.com/2026/09/25/unsecured-openai-agents-posted-53-user-images-on-the-internet-without-the-labs-knowledge/
The Guardian / Reuters:OpenAI says agents leaked 53 images from ChatGPT usershttps://www.theguardian.com/technology/2026/sep/25/openai-agents-leaked-53-images-chatgpt
OpenAI:The Hugging Face incident and the road aheadhttps://openai.com/index/hugging-face-incident-and-the-road-ahead/