分析 Anthropic 和 OpenAI 最近的安全事件:Claude 在评测环境中误认为有互联网访问并发布恶意 PyPI 包,Hugging Face 遭类似突破。强调 Agent 能力边界的配置至关重要。
AI 智能体之所以变得有用,是因为我们赋予它们的能力已经远超仅仅回答问题。它们可以运行命令、浏览网页、使用 API、读取和修改文件、安装包,以及与其他系统交互。
但是,AI 智能体能做的事情越多,围绕它设立的边界就越重要。
在读了 Anthropic 在 7 月 30 日发表的报告后,我开始思考这个问题。该报告描述了在其网络安全评估过程中发现的三起事件。Claude 模型本应在模拟环境内工作,并被明确告知它们没有网络访问权限。
然而,由于评估环境配置存在问题,互联网访问实际上是可用的。
在尝试完成分配的网络安全练习时,这些模型到达了真实系统,并最初将它们视为模拟的一部分。在其中一起事件中,一个 Claude 模型甚至向真实的 PyPI 仓库发布了一个恶意 Python 包,同时相信它仍然在练习中运行。
这件事发生后不久,发生了涉及 Hugging Face 的另一起 OpenAI 事件。这两个故事乍一听可能相似,但这些模型以重要的不同方式到达了真实的网络。
这将我们带回了一个相当熟悉的软件工程理念:
提示不是安全边界。
告诉智能体「你没有网络访问权限」与实际上移除网络访问权限是不同的。告诉它「只使用这些文件」与限制它对这些文件的权限也是不同的。
模型也只是系统的一部分。我们连接的工具、我们给予它的权限和凭据、它运行的环境,以及围绕它的监控和护栏都会影响发生什么。
因此,当出现问题时,我不认为仅仅停留在「AI 做的」就够了。模型的行为很重要,但我们围绕它构建的系统和边界也很重要。当我们赋予智能体更多的行动能力时,我们也必须深思熟虑地考虑我们实际上允许它们做什么。
我不是网络安全研究员。我只是喜欢阅读像这样的研究和技术报告,并试图理解作为开发者的我们能从中学到什么。这就是我想在这里探索的。
不是「AI 逃脱了,我们完蛋了」的论调 😄 只是一个有趣的真实事件和一些令人惊讶的、熟悉的工程教训。
7 月 31 日,我在阅读 Anthropic 新发表的报告,该报告描述了在网络安全评估期间发现的三起事件。
我偶尔喜欢阅读这样的报告。这是我在攻读硕士学位期间从事调查论文工作时变得更感兴趣的事情,即使现在,我有时也会出于好奇打开技术报告,然后突然意识到我花在阅读它上的时间比计划的要长得多 😄
这绝对是那样的时刻之一。

报告以一个相当令人惊讶的发现开始。Anthropic 审查了 141,006 次网络安全评估运行,并发现了三起事件,其中 Claude 到达了互联网,并对属于三个不同组织的真实系统获得了未授权的访问。
这句话听起来令人警惕,但我继续阅读,细节使这个故事比标题更有趣得多。
这不仅仅是「Claude 被告知不要访问互联网,但决定这样做」的情况。也不是「Claude 突然决定入侵随机公司」。这些模型参与了网络安全练习,其任务本质上是找到并利用弱点以检索隐藏的信息。
他们被告知环境是模拟的,他们还被告知了其他变得对接下来发生的一切都极其重要的信息:他们没有网络访问权限。
但这个假设与他们实际操作的环境不匹配。
这真的让我陷入了兔子洞。我想理解一个参与模拟网络安全练习的 AI 模型如何最终与真实系统交互,同时仍然相信它正在完成被给予的任务。
我读得越多,这开始感觉像一个比单个不寻常的网络安全事件要广泛得多的问题。
我们大多数人现在可能都遇到过 AI 智能体,所以我不会花太多时间解释它们是什么。对于这个故事重要的部分是,智能体不一定停留在生成答案。给它合适的工具,它也可以采取行动,无论是读取和修改文件、运行命令、调用 API、浏览网页,还是与其他系统交互。
这就是使智能体如此有用的原因,但这也是使围绕它们的边界重要的原因。我们给智能体的工具和访问权限越多,我们就越需要考虑它实际上能到达什么以及它被允许做什么。
这正是这个故事变得有趣的地方,因为 Claude 被给予了一个任务、一个环境和对这些边界在哪里的理解。
问题是真实的边界与它被告知的不太匹配。

Anthropic 定期进行网络安全评估,以了解其模型的能力。其中一些涉及 CTF(夺旗)挑战,其中模型被放在受控环境中并被给予一个目标,通常是某个称为「flag」的隐藏信息片段,来找到。
如果你以前从未接触过 CTF,基本概念很简单。环境被故意设计为可被攻击。找到 flag 可能涉及发现漏洞、查找凭据或获得对另一台机器的访问。这是测试网络安全能力而不会危害真实系统的一种方式。
Claude 参与了这样的练习,关于设置有两个细节对接下来发生的事情变得真正重要。模型被告知它们在模拟内运行,并且它们没有网络访问权限。
因此,从模型的角度来看,它能到达的任何东西都应该是那个模拟的一部分。
问题是这实际上不是真的。
根据 Anthropic 的说法,由于公司与其第三方评估合作伙伴之间的误解,一些评估机器在不应该的时候可以访问真实的互联网。
这造成了一个相当不寻常的情况。Claude 被给予了一个任务,其中找到并利用弱点是练习的一部分。它也被明确告知互联网不可用。所以当它设法到达预期环境之外的系统时,它最初将它们视为挑战的另一部分。
除了其中一些系统是真实的。

Anthropic 的审查最终发现了三起涉及三个不同 Claude 模型的事件。每种情况下的情况都不同,当有迹象表明它们可能与真实系统交互时,模型的反应也不相同。
但其中一个事件特别是这个故事变得真正有趣的地方。
如果你用过 Python,你可能以前输入过类似 pip install something 的命令。该包通常来自 PyPI,即公开的 Python 包索引。
在其中一次评估期间,Claude 找到了看起来像是虚构公司开发人员设置说明的东西。说明告诉员工安装一个特定的 Python 包,但该包实际上并不存在。
Claude 意识到,如果它创建了一个同名的软件包,虚构公司的系统可能会下载并运行这个版本。在这个网络安全挑战的背景下,这为它提供了一条可能的路来达成目标。
因此,该模型创建了一个恶意包并尝试发布它。
问题是,它不是在与为评估创建的虚假 PyPI 交互,而是与真实的 PyPI 交互。
接下来发生的事情可能是报告中最令我惊讶的部分。要发布这个包,Claude 需要创建一个账户,这意味着它需要一个电子邮件地址,有时候还需要一个电话号码。它尝试了多种方法,包括尝试找到获取电话号码的方式,但都没有成功。最后它找到了一个免费的电子邮件提供商来注册账户。
随后它成功地将恶意包上传到了 PyPI。

根据 Anthropic 的说法,这个包在公网上保持可用大约一小时,在这段时间内被下载并在 15 个真实系统上运行。其中一个系统属于一家安全公司,该公司会自动安装 Python 包来扫描恶意软件。当扫描器安装这个包时,Claude 的代码执行并暴露了凭证,该模型随后使用这些凭证访问属于该公司的其他基础设施。
不过这里有一个重要细节。Claude 并不是有意针对这家安全公司。Anthropic 表示,在上传包时,该模型甚至不知道这家公司的存在。该公司受到影响只是因为它的扫描器碰巧安装了 Claude 无意间发布到真实互联网的包。
而故事变得更有趣的是...
在这个过程中更早的时候,Claude 其实曾考虑过它可能在与真实互联网交互。它自己的推理意识到,如果这是真实的,发布这个包就相当于真实的攻击,那是不对的。
你可能会以为这就是它停下来的地方,但它没有。模型反而找到了理由说服自己它仍在模拟中。它用作证据的事物之一是系统日期:2026。它显然将其解释为环境已被构建的另一个迹象。
我必须承认,在 2026 年读到这个特殊细节给了我一个小小的"嗯..."时刻 😅

这是一个在不得不说很严肃的事件中略显有趣的细节,但我认为有更深层的东西。模型遇到了表明它对环境的理解可能有误的信息,但最终还是推理着回到了最初的假设:这一切都是模拟的一部分。
这就是之后我一直在思考的事件的部分。
读完 PyPI 事件后,一个问题似乎很明显:Claude 为什么没有意识到它已经接触到真实的互联网?
但我越想,越开始从另一个角度来看这个问题。
模型被明确告知它没有互联网访问。它还被告知它在参与一个模拟,发现和利用弱点是任务的一部分。所以当它遇到看起来真实的东西时,它试图用已被告知的关于其环境的信息来理解这个新信息。
这两个信息之间存在不匹配。模型的运作逻辑是这样的:
模拟 → 无互联网 → 所有可达到的东西都应该是练习的一部分
但实际上环境看起来更像是:
模拟 → 互联网可用 → 真实系统可访问
这个差异看起来很小,但却完全改变了局面。
当然,这并不能解释模型所做的所有事情。Anthropic 自己指出了模型行为未达预期的时刻,包括出现迹象表明系统可能是真实的情况。
但我认为这个不匹配仍然很重要。

这些模型不是在大家认为它们运作的环境中做决定。它们的决定部分基于对环境的理解,而这种理解实际上是错误的。
这就是故事不再仅仅关乎网络安全评估的地方。
因为一旦我们开始给 AI 智能体工具和采取真实行动的能力,所有这些之下就有一个更大的问题:
当 AI 智能体被告知的边界不是实际存在的边界时会怎样?
这导致了我从整个故事中得出的可能是最简单的工程教训:
提示词不是安全边界。
这可能是我能解释我从这一切中学到的最简单的方式:告诉 AI 智能体不要做某事,和实际阻止它做这事,两者是不同的。
想象我在构建一个 AI 编码智能体,并告诉它只访问 /my-project 内的文件。如果运行这个智能体的进程仍然有权限读我的整个计算机,我只是给了它一条关于应该去哪里的指示,但实际上没有限制它能去哪里。
同样的道理也适用于互联网访问。我可以在指令中写"不要访问互联网",但如果环境仍然允许不受限制的网络访问,这句话就不是阻止智能体访问互联网的原因。
当我这样想时,它开始感觉像一个非常熟悉的软件工程概念。
我们不会构建一个管理员仪表板,然后简单地写"请只在你是管理员时使用此页面"。我们实现身份验证和授权,确保没有适当访问权限的人根本无法使用它。
我们不会给每个应用不受限制的数据库访问,然后礼貌地要求它避开不需要的表。我们使用权限来控制它实际能访问什么。
这个思路对 AI 智能体同样适用。
提示词仍然很重要。它们告诉模型我们希望它如何表现、任务是什么,以及它应该或不应该做什么。但当某事重要到一定不能发生时,我不认为提示词应该单独承担这个责任。
模型周围的系统也很重要:我们连接了什么工具、这些工具有什么权限、什么凭证可用、网络是否受限,以及如果我们对环境的假设有误会发生什么。
这就是我不断回到的区别:
提示词可以引导行为。基础设施可以限制能力。

当 AI 从主要为我们提供答案转向实际采取行动时,这种差异就变得更加重要。
是的,这个时间不是巧合。Anthropic 表示,它在 OpenAI 于 7 月 21 日公布了一个涉及 Hugging Face 的独立网络安全评估事件后启动了大规模审查。
当我第一次读到这两个事件时,我想知道本质上是不是发生了两次同样的事。但一旦我看了细节,在模型如何到达真实互联网方面就有重要的差异。
在 OpenAI 的情况下,模型在一个直接互联网访问受限的评估环境中运行。根据 OpenAI 的说法,模型发现并利用了 Artifactory 中的一个先前未知的漏洞。Artifactory 是用作包注册表的代理和缓存的软件。这种先前未知的漏洞通常被称为 zero-day(零日漏洞)。
利用这个漏洞后,模型能够在 OpenAI 的研究环境中横向移动,直到到达具有互联网访问权限的系统。从那个系统,他们最终在尝试获取网络安全评估的解决方案时破坏了 Hugging Face 的基础设施。
所以,非常粗略地说,OpenAI 事件看起来像这样:
受限环境 → 发现并利用漏洞 → 达到互联网访问 → 破坏 Hugging Face
Anthropic 的事件则不同:
评估环境 → 互联网意外可用 → 真实系统可访问 → 模型最初将它们视为模拟的一部分
这个差异很重要。

在 OpenAI 事件中,模型找到了一种方法突破了本应限制互联网访问的边界。在 Anthropic 的情况下,那道边界实际上并不像大家以为的那样存在。互联网访问早就无意中可用了。
这两个事件都引发了一个重要问题:日益强大的 AI 系统应该如何被测试,但我认为把它们都放在"AI 又逃脱了"这样的标题下,无法告诉我们太多东西。
如果说有什么的话,深入阅读细节让我意识到,工程差异才是这个故事中更有用的部分。两个事件从表面看可能非常相似,但指向了不同的潜在问题。
我们大多数人都不是在前沿 AI 实验室运行网络安全评估,所以你可能合理地在想:
有趣的故事,Hema……但我该怎么办呢?😄

我在阅读这些报告时也有同样的疑问。思考得越多,我就越意识到,有些经验教训根本不限于大型 AI 实验室。它们也适用于我们自己可能构建的更小型智能体和 AI 驱动工具。
如果一个智能体只需要读取几个文件,它真的需要访问整个文件系统吗?如果它只需要从数据库读取,它需要同时能够修改或删除数据的凭证吗?如果它只需要一个 API,就没有理由只是因为它们可用就暴露多个其他 API。
这实际上就是熟悉的安全原则——最小权限原则:只给予完成工作所需的访问权限。
这并不是因为我们应该假设每个智能体都会做恶意的事。错误会发生。指令可能被误解。我们自己的配置可能是错误的。智能体也可能遇到我们根本没有预见的情况。
限制访问不能防止所有可能的问题,但可以限制问题能造成的影响范围。
我在这里发现特别有趣的一点是,问题不仅仅在于模型的假设。运行评估的人也有假设。
模型被告知没有互联网访问是因为环境应该这样工作。但实际配置与这种预期不匹配。
我认为这里有一个有用的开发者教训。当我们构建一个智能体时,很容易从系统应该如何表现的角度思考:这个工具只能做这个,这些凭证只能连接那项服务,这个环境无法访问互联网。
但我们实际上多经常验证这些假设呢?
如果某些东西真的很重要,测试边界本身可能和定义它一样重要。因为有时意外行为不是由智能体忽视我们设计的系统引起的。
有时候这个系统根本不是我们认为设计的那个。
当普通软件表现不正常时,我们已经依赖日志了。我认为当智能体能够自主执行一系列操作时,这变得更加重要。
如果出了问题,我们可能需要了解它使用了哪些工具、访问了什么、做了什么请求、在哪里出现故障,以及之后尝试了什么。
Anthropic 通过查看其评估副本中的内容找到了这些事件。如果没有模型实际执行操作的记录,理解那个顺序会困难得多。
因此,当智能体变得能够做更多事情时,可观测性不仅对调试有用。它还可以帮助我们了解系统是否在我们预期的边界内表现。
Anthropic 在其回应中讨论了纵深防御。听起来非常网络安全,但这个概念本身相当简单:不要依赖一件事顺利进行。
也许智能体不应该有互联网访问。那是一道边界。但如果某些东西配置错误而互联网访问意外变得可用怎么办?网络限制仍然可以限制它能连接的地点。