---
service: "Publicasta"
schema_version: "1.0"
article_id: 976
title: "恶意 AGENTS.md 文件将 Downloads 文件夹变成编码代理的信任边界"
language: "zh"
default_language: "en"
canonical_url: "https://publicasta.com/it_today_news/agents_md_downloads_folder_coding_agent_trust_boundary?lang=zh"
json_url: "https://publicasta.com/it_today_news/agents_md_downloads_folder_coding_agent_trust_boundary.json?lang=zh"
api_url: "https://publicasta.com/api/public/v1/channels/it_today_news/articles/agents_md_downloads_folder_coding_agent_trust_boundary?lang=zh"
channel_url: "https://publicasta.com/api/public/v1/channels/it_today_news"
channel_articles: "https://publicasta.com/api/public/v1/channels/it_today_news/articles"
search_url: "https://publicasta.com/api/public/v1/search"
documentation_url: "https://publicasta.com/api-docs#reading-publicasta"
openapi_url: "https://publicasta.com/api-docs/openapi.json"
published_at: "2026-10-26T13:38:04+00:00"
updated_at: "2026-10-26T13:38:04+00:00"
translations:
  - language: "ar"
    html_url: "https://publicasta.com/it_today_news/agents_md_downloads_folder_coding_agent_trust_boundary?lang=ar"
    markdown_url: "https://publicasta.com/it_today_news/agents_md_downloads_folder_coding_agent_trust_boundary.md?lang=ar"
    json_url: "https://publicasta.com/it_today_news/agents_md_downloads_folder_coding_agent_trust_boundary.json?lang=ar"
  - language: "de"
    html_url: "https://publicasta.com/it_today_news/agents_md_downloads_folder_coding_agent_trust_boundary?lang=de"
    markdown_url: "https://publicasta.com/it_today_news/agents_md_downloads_folder_coding_agent_trust_boundary.md?lang=de"
    json_url: "https://publicasta.com/it_today_news/agents_md_downloads_folder_coding_agent_trust_boundary.json?lang=de"
  - language: "en"
    html_url: "https://publicasta.com/it_today_news/agents_md_downloads_folder_coding_agent_trust_boundary?lang=en"
    markdown_url: "https://publicasta.com/it_today_news/agents_md_downloads_folder_coding_agent_trust_boundary.md?lang=en"
    json_url: "https://publicasta.com/it_today_news/agents_md_downloads_folder_coding_agent_trust_boundary.json?lang=en"
  - language: "es"
    html_url: "https://publicasta.com/it_today_news/agents_md_downloads_folder_coding_agent_trust_boundary?lang=es"
    markdown_url: "https://publicasta.com/it_today_news/agents_md_downloads_folder_coding_agent_trust_boundary.md?lang=es"
    json_url: "https://publicasta.com/it_today_news/agents_md_downloads_folder_coding_agent_trust_boundary.json?lang=es"
  - language: "fr"
    html_url: "https://publicasta.com/it_today_news/agents_md_downloads_folder_coding_agent_trust_boundary?lang=fr"
    markdown_url: "https://publicasta.com/it_today_news/agents_md_downloads_folder_coding_agent_trust_boundary.md?lang=fr"
    json_url: "https://publicasta.com/it_today_news/agents_md_downloads_folder_coding_agent_trust_boundary.json?lang=fr"
  - language: "pl"
    html_url: "https://publicasta.com/it_today_news/agents_md_downloads_folder_coding_agent_trust_boundary?lang=pl"
    markdown_url: "https://publicasta.com/it_today_news/agents_md_downloads_folder_coding_agent_trust_boundary.md?lang=pl"
    json_url: "https://publicasta.com/it_today_news/agents_md_downloads_folder_coding_agent_trust_boundary.json?lang=pl"
  - language: "ru"
    html_url: "https://publicasta.com/it_today_news/agents_md_downloads_folder_coding_agent_trust_boundary?lang=ru"
    markdown_url: "https://publicasta.com/it_today_news/agents_md_downloads_folder_coding_agent_trust_boundary.md?lang=ru"
    json_url: "https://publicasta.com/it_today_news/agents_md_downloads_folder_coding_agent_trust_boundary.json?lang=ru"
  - language: "zh"
    html_url: "https://publicasta.com/it_today_news/agents_md_downloads_folder_coding_agent_trust_boundary?lang=zh"
    markdown_url: "https://publicasta.com/it_today_news/agents_md_downloads_folder_coding_agent_trust_boundary.md?lang=zh"
    json_url: "https://publicasta.com/it_today_news/agents_md_downloads_folder_coding_agent_trust_boundary.json?lang=zh"
---

# 恶意 AGENTS.md 文件将 Downloads 文件夹变成编码代理的信任边界

> 一项安全调查显示，浏览器下载与 AI 编码代理的指令系统结合后，可能形成实际攻击路径。眼下最直接的控制措施很简单：不要让代理进入未经刻意审查内容的文件夹。

开发者 Downloads 文件夹中的一个纯文本文件，就足以让 AI 编码代理尝试安装一个已知的恶意 npm 软件包。Forever Security 于 10 月 22 日披露了这起事件，10 月 25 日至 26 日期间得到更广泛报道。对于那些已经开始把编码代理当作普通开发者工具使用的团队来说，这是一则值得重视的警告。

 ![笔记本电脑显示下载到 Downloads 文件夹中的 AGENTS.md 文件，旁边是编程工作区，展现 AI 编程代理的信任边界。](https://publicasta.com/storage/projects/17/pages/976/2026/10/744f0b7e-640c-44e8-b1d9-1431f07971f2.webp)

 关键不在于攻击者发现了一个新的 npm 软件包，而在于安装请求来自一个指令文件，而不是仓库依赖、拉取请求或开发者明确下达的任务。该文件名为 `AGENTS.md`，Codex 的设计目标之一就是发现并注入这类文件的内容。Forever 表示，这个文件位于客户的 `~/Downloads` 目录中，其安全软件在恶意负载于客户机器上运行之前，阻止了安装恶意 `function-color` 软件包的尝试。

 这并不能说明文件是如何到达那里的。Forever 表示无法确定最初的投递路径。该公司单独进行的演示显示，网页可以将这个名称的文件保存到浏览器的默认下载目录；BleepingComputer 也复现了无害的下载行为。这个区别很重要：客户事件和复现结果都支持这一风险，但并不能证明客户拿到的文件就是通过同一种浏览器技术投递的。

 ## 用一句话概括这一发现

 Downloads 文件夹通常被视为不受信任文件的临时落点。AI 编码代理却可能把同一个文件夹当作指令来源。当这两种假设相遇时，一份对操作系统来说没有作用的文档，就可能成为特权自动化流程的输入。

 OpenAI 自己的 Codex 文档解释了 `AGENTS.md` 为何重要。Codex CLI 会自动从全局 Codex 目录开始，沿仓库路径和当前工作目录搜索这些文件，然后把文件内容注入模型对话。这个机制原本用于将项目规范、测试命令、架构说明及其他本地指导带入代理会话。在团队控制的仓库中，这很有用；在内容可能因下载而被改动的文件夹中，它就变成了来源追踪问题。

 因此，安全边界不只是模型、Shell 或软件包注册表，也包括代理加载指令的目录。

 ## Forever 观察到的情况

 Forever 的报告描述了一次真实客户告警：一个代理尝试安装 `function-color`，而安全数据库将该软件包列为恶意软件。研究人员追溯后发现，指令来自客户 Downloads 文件夹中的一个 `AGENTS.md` 文件。报告称，该文件采用普通工程指导的写法，并包含设置说明，导致代理修改自身配置并启动软件包安装活动。

 随后，Forever 在隔离的虚拟机中测试了恢复出的文件。报告称，Codex 在超过 90% 的尝试中遵循了这套攻击流程。研究人员还使用 `CLAUDE.md` 文件，针对 Claude Code 构建了相关测试。该版本试图把工具的模型流量改道至攻击者控制的端点，并暴露工具的身份验证令牌。Forever 报告称，这项演示的成功率较低，约为全部试验的一半。

 这些百分比应被理解为测试结果，而不是随机用户遭到入侵的概率。测试使用了精心构造的文档、受控环境和已知的执行路径。它们表明，在适当条件下，指令文件机制可能被滥用；但并未衡量这类攻击在整个开发者群体中的普遍程度。

 这个软件包并不只是可疑。开放源代码漏洞数据库记录了 `function-color` 的恶意版本，其中包括 `1.0.0` 和 `1.7.3`，并建议将安装或运行过该软件包的系统视为已遭入侵。npm 此后已用安全占位版本替换了该软件包。这使它成为防御人员判断风险的一个有用指标，但更广泛的教训并不取决于这个特定名称。另一份指令文件可能会引导代理转向其他软件包、凭据文件、内部端点或配置变更。

 ## 为什么下载文件夹不同于代码仓库

 源代码仓库通常有明确的所有权链条：分支控制、变更审查、签名提交、访问日志，以及已知的克隆操作。用户的 Downloads 文件夹不会自动享有这些控制措施。

 浏览器通常会将下载文件默认保存到这里。BleepingComputer 测试了 Forever 的概念验证，并报告称，Chrome、Edge 和 Firefox 都会在 Downloads 中下载一个无害的 `AGENTS.md` 文件，同时正常显示下载通知。测试没有执行代码，也没有绕过浏览器的常规警告。这正是该示例重要的原因：文件不必是可执行文件，之后也可能影响代理。

 但攻击仍需要第二个条件：用户、自动化任务或其他代理必须在该目录中启动编码代理，或者以其他方式将该目录纳入代理的指令搜索路径。单纯下载并不等于执行。躺在 Downloads 中的恶意 Markdown 文件，只有在某个信任本地指令的工具读取它，并且拥有足够权限依照其内容行动时，才会构成危险。

 这个条件也让正确的控制措施更清晰。团队不必禁止浏览器下载，也不必废弃 `AGENTS.md`。需要改变的是：不要把每个工作目录都视为同等可信。

 ## 内容与权限的区别

 问题的核心不在于文件扩展名。Markdown 通常是被动内容。在传统应用中，打开 Markdown 文件不应安装软件或重写配置文件。然而在代理工作流中，运行框架会把文件内容转化为行为指引。

 部署代理时，很容易产生一种类别错误。开发者可能会想：“代理可以阅读文档，但要做危险的事情仍然需要我的批准。”实际上，代理可以把文档与自身的工具、权限、记忆中的约定及可用集成结合起来。如果文档说服代理相信某项配置变更只是例行的项目设置，最终执行的操作就可能越过用户从未打算授权的边界。

 更安全的思维方式，是把代理可读取的指令文件视为会产生可执行后果的配置。它们也许不是操作系统意义上的可执行文件，却会影响代理读取、写入、调用和信任的对象。因此，它们更接近 shell 配置文件、CI 工作流文件、编辑器设置和包清单，而不是普通的 README。

 这并不意味着每个指令文件都怀有恶意，而是意味着文件来源必须明确。文件之所以应被视为可信，是因为已知所有者在已知仓库中创建或审查了它，而不是因为其中的文字听起来专业，或因为文件以 `.md` 结尾。

 ## 已确认的事实与仍不确定之处

 以下几项事实得到主要报告及独立报道的支持：

 - Forever 在调查一次试图安装 `function-color` 的事件时，于客户的 Downloads 目录中发现了 `AGENTS.md` 文件。
- Forever 在隔离环境中针对 Codex 重现了取证得到的技术，并报告称其在 90% 以上的尝试中成功执行。
- Forever 还演示了针对 Claude Code 的相关配置重定向技术。
- OSV 已将 `function-color` 包记录为恶意包，受影响版本位于 1.x 系列。
- BleepingComputer 测试了无害的浏览器下载演示，并确认常见浏览器能够在正常下载行为下，将具有相关名称的文件保存到 Downloads 中。
- OpenAI 的文档说明，Codex 会根据目录位置发现 `AGENTS.md` 指令，并将其注入会话。

 其他说法应保持更严格的范围：

 - 研究人员没有确定客户原始文件是如何进入该设备的。
- 浏览器能够保存该文件，并不能证明浏览器导致了客户事件。
- 在 Downloads 中启动代理是演示路径成立的必要条件，但单凭这一点并不充分；文件还必须包含具有说服力的指令，代理必须具备相关能力，并且用户或自动化流程必须允许后续操作。
- 报告中的成功率来自受控测试，不应被视为总体人群层面的发生概率。

 这种区分对于事件响应很重要。它能避免团队对未经证实的投递说法反应过度，同时仍然处理已经证实的信任失效问题。

 ## 面向开发者平台的实际控制措施

 第一项控制措施是流程性的，而且成本很低：禁止在 Downloads、Desktop、临时导出目录、共享附件文件夹，以及其他内容经常由浏览器或外部应用创建的位置启动编码代理。为开发者提供一个有明确负责人和可预测指令文件策略的项目工作区。

 第二项控制措施是在启动时进行检查。代理包装器可以在启动会话前检查当前工作目录及其所有祖先目录。如果路径属于已知的不可信位置，包装器可以停止启动、要求明确覆盖，或以只读能力启动代理。这项检查应当对用户可见并且可审计，而不是隐藏在策略文档中。

 第三项控制措施是文件来源追踪。终端和开发者平台团队应监控用户可写文件夹中是否新建了 `AGENTS.md`、`CLAUDE.md` 及类似的指令文件。浏览器进程创建这些名称之一，应该比浏览器保存普通 PDF 更值得关注。这个事件并不能证明系统已遭入侵，但它是一个有用的检测信号。

 第四项控制措施是配置完整性。这项调查说明，防御人员为什么不应只监控项目目录，还要监控代理自身的配置。意外出现的模型端点、代理设置、MCP 服务器注册、新工具定义，或权限模式变更，都应作为安全事件进行审查。能够跨项目持续存在的配置变更，比单个代码仓库中的一次性指令更严重。

 第五项控制措施是凭据隔离。编码代理应只获得任务所需的最低限度凭据，最好使用限定于单个代码仓库或环境的短期凭据。一个既能读取云凭据、发布软件包、访问生产环境，又能修改自身工具配置的本地代理，即使最初的诱骗很简单，也会造成极大的影响范围。

 第六项控制措施是保持审批和沙箱机制启用。任何要求代理绕过审批、禁用沙箱、安装陌生软件包，或“验证”新的工具服务器的文档，在人类通过独立渠道核实该指令之前，都应被视为具有恶意性。文件越是坚持某项安全控制对于日常设置不可或缺，就越应该仔细审查这一请求。

 ## 可疑指令文件的响应清单

 如果开发者在 Downloads 或其他不可信目录中发现意外出现的 `AGENTS.md`、`CLAUDE.md` 或类似文件，最安全的第一步是停止使用受影响的代理会话。不要让同一个代理判断该文件是否恶意，因为文件可能已经在影响代理的行为。

 保留该文件及相关时间戳以便调查，但应从独立的可信环境中检查它。记录当时运行的是哪个代理、其工作目录、它能够访问哪些文件、调用了哪些命令或工具，以及它可以使用哪些凭据。检查代理的全局配置和项目专属配置，确认是否出现新的端点、MCP 注册、代理设置、权限变更或陌生的启动项。

 在软件包清单、锁定文件、软件包管理器缓存、Shell 历史记录、进程日志和终端遥测中搜索 `function-color` 以及文件引用的其他软件包。OSV 针对受影响 `function-color` 版本的指导有意采取了严厉立场：安装或运行过恶意软件包的主机，应视为已经遭到入侵，而不能只通过删除一个目录来清理。

 从一台干净的设备轮换代理和源代码管理凭据。包括代理可能读取或传输的云访问密钥、软件包仓库令牌、SSH 密钥、API 令牌和会话凭据。如果服务提供商支持，应使持久会话失效。在暴露窗口期间，检查源代码管理活动、软件包发布、云端登录和配置变更。

 最后，还要检查代理是如何启动的。如果编辑器、桌面快捷方式、任务运行器或由浏览器驱动的工作流自动选择了工作目录，就应修正路径选择，避免同样的条件再次出现。目标不只是删除某个文件，还要让不安全的目录与代理组合变得更难形成。

 ## 供应商无需破坏工作流即可进行的改进

 报告称，所展示的行为并非传统意义上的产品漏洞，无法通过一个补丁修复。这并不意味着供应商无能为力。代理客户端可以让指令来源清晰可见，显示加载了哪些文件以及它们来自哪些目录；当文件位于下载目录时发出警告；并区分仓库自有的指导文件与用户可写入的环境文件。

 对于要求执行高影响操作的指令，客户端还可以采用更严格的默认规则。写入持久化全局配置、修改模型端点、注册新的工具服务器、安装软件包或禁用沙箱，都应比编辑源文件需要更强的确认。确认提示应标明指令文件、文件路径、请求执行的操作以及持久化范围。

 开发者平台可以为受管理的仓库提供经过签名或策略批准的指令文件。企业级封装层可以维护获准根目录的允许列表，强制使用按项目划分的凭据，并收集已加载指令和工具调用的遥测数据。软件包管理器可以继续改进恶意软件包检测，但仅扫描注册表无法解决这样的问题：代理可能一开始就被诱导去获取某个软件包。

 设计上的难点，在于保留本地指令的实用部分，同时不让下载的文档悄无声息地变成管理策略。让过程可见并限制权限范围，比试图教会模型识别每一段可能有害的文字，更能形成持久的控制措施。

 ## 对 AI 辅助开发的更广泛启示

 把这起事件称为提示注入很容易，但对于运营团队而言，这个标签过于狭窄。实际风险来自一条链路：不受信任的文件落地、自动发现指令、模型解读、工具访问、持久化配置，以及主机上可用的凭据。单独审查时，链路中的每一环都可能显得正常。

 这条链路也解释了为什么现有的终端控制措施可能发现不了它。这里可能没有可执行附件、明显的宏，也没有针对浏览器或操作系统的漏洞利用。恶意行为发生在受信任的自动化工具解释文本并执行结果时。因此，安全监控需要跨进程关联文件创建、代理启动、配置写入、软件包安装和凭据使用等事件。

 眼下的建议很明确：不要让编码代理进入 Downloads 文件夹，并在信任指令文件之前检查它们。架构层面的建议则更广泛：把代理读取的一切都视为潜在的不可信输入，包括看起来像项目文档的文件。随后，限制代理在这些输入要求修改其应负责的项目之外内容时所能执行的操作。

 AI 编码代理正在成为开发者平台的一部分。它们的工作目录、指令层级、配置文件和凭据，应当像持续集成运行器和构建服务器一样受到管理和监控。下载文件夹案例的价值在于，它让这一要求变得具体：文件不需要自行执行，只需要被有权采取行动的软件读取即可。
