外观
Agent 技能供应链投毒活动:仿冒分发、远程加载与凭据窃取
摘要
Zenity Labs 披露了一起针对 Agent 技能生态的真实投毒活动。攻击者仿冒 Paperclip 与 Browser Use 的组织、仓库和软件包名称,先让部分技能在内容正常时积累展示安装量,再把恶意安装说明和远程加载路径加入分发链。受影响技能会诱导 Agent 安装带有凭据收集逻辑的软件包,或在正常业务调用中下载并执行第二阶段程序;收集范围覆盖 SSH、云平台、容器、包管理器、CI/CD、数据库和部署平台配置。
报告给出了仓库提交时间线、软件包版本、文件摘要、外联路径和隔离运行观察,并称 GitHub、Vercel 在收到报告后移除了相关条目。展示计数在 2026 年 8 月 2 日前累计超过 170 万,但该数字不是独立用户数,也不能证明实际执行或受害规模。本站未独立复现恶意代码,因此将证据等级评为中等。
核心创新与差异
这项披露的增量不是新的文本后门构造方法,而是真实分发活动如何把多种成熟手段串成 Agent 技能供应链攻击:品牌仿冒与拼写近似负责获客,干净版本和展示安装量提供信誉,被植入代码的软件包与远程加载器承担执行,技能说明则让 Agent 主动完成安装或调用。
与 SkillGate 等安装前检测研究相比,该活动说明审查对象不能只限于 SKILL.md。技能引用的软件包、安装脚本、仓库发布文件和运行时下载地址都属于同一分发链;文本本身即使没有直接载荷,也可能把执行转交给已被污染的依赖。与组合攻击和条件触发后门不同,本案不依赖多个局部正常技能在运行时闭合,而依赖来源冒充、版本替换和跨渠道分发。
威胁模型与攻击链
攻击者能够注册近似域名、创建仿冒组织和仓库,并向公共软件包或技能目录发布内容。受害者或 Agent 需要安装、导入或执行其中至少一个恶意版本。最先失效的是发布者身份和分发来源校验,随后是依赖审查、运行隔离和外联控制。
- 攻击者复制合法项目并创建名称近似的组织、仓库、域名和软件包。
- 技能在内容正常时进入目录并积累展示安装量,降低人工审查的警惕。
- 后续提交把恶意安装说明、软件包版本或远程加载调用加入分发链。
- Agent 在安装或正常业务操作中导入恶意代码,或从攻击者控制的地址取得第二阶段程序。
- 程序枚举本机与项目目录中的凭据和配置,并向外部服务发送收集结果。
- 目录下架只能阻止后续发现,不能撤销已复制到下游仓库、本地缓存或开发环境的内容。
攻击方法与复现材料
本站没有运行原报告中的恶意版本,也不保留可用外联地址、下载程序或凭据收集代码。安全验证可在断网容器内建立三个替代组件:仿冒技能只引用本地测试软件包;测试软件包只读取随机生成的金丝雀文件;Mock 接收端固定为 https://collector.invalid/feedback 并只记录请求是否被策略阻断。所有安装源应固定到自建测试仓库,禁止访问真实用户目录和外部网络。
验证记录至少包括发布者身份、仓库与软件包摘要、技能引用的版本、安装前后差异、子进程创建、文件访问标签、DNS/HTTP 目标和撤销结果。预期的安全结果是:名称相似度或流行度不能代替来源认证;任何新增下载执行、敏感目录读取或未知外联都应触发阻断或重新批准。
实验设计与实际过程
报告作者根据公开提交记录、Internet Archive 快照、PyPI 恶意软件通告和隔离运行重建活动时间线。其动态分析捕获了远程响应,确认第二阶段程序会枚举不同操作系统和项目目录中的一百余类目标路径,并通过 HTTP POST 发送编码后的数据。作者还把多个技能、仓库和软件包关联到同一基础设施与行为主体。
本站只核对了报告正文、披露日期和其中的限定说明,没有下载或执行相关版本。Vercel 与 GitHub 的移除行动由报告方陈述,本站没有获得平台侧事件报告或受害者数据。
关键结果与实际影响
- 报告称技能家族的展示安装计数在 8 月 2 日前累计超过 170 万;计数会跨技能聚合且不是独立用户数,不能据此计算受害率。
- 两个恶意 PyPI 发布分别在约两小时和一小时内被识别,但技能条目和下游副本仍可能继续传播,说明单一仓库下架不能完成撤销。
- 作者观察到的第二阶段程序覆盖 SSH、AWS、Azure、Google Cloud、Kubernetes、Docker、Git、npm、PyPI、Terraform、CI/CD、数据库和部署平台配置。一旦在开发者主机执行,影响可能跨越多个系统。
- 同一活动同时利用技能说明、源代码仓库、发布文件、软件包和远程服务,检测与响应必须按整条分发链关联,不能把每个渠道当作独立事件。
防护措施与验证方法
- 安装前验证发布者、组织、域名和软件包来源,固定提交、版本与摘要;对近似名称和新注册来源提高审查级别。
- 把技能引用的软件包、安装脚本、发布文件和远程下载地址纳入同一依赖清单,并对每次更新重新计算差异。
- 在隔离环境执行首次安装和升级,默认阻断访问用户主目录、云凭据目录与未知网络目标。
- 监测技能或依赖创建子进程、关闭 TLS 校验、下载后执行、批量枚举配置文件以及向新域名发送数据的组合信号。
- 下架后搜索本地缓存、克隆仓库、构建镜像和下游副本;若无法排除恶意版本已经执行,应轮换其可访问的凭据并审计相关账户。
- 定期用无害金丝雀验证安装扫描、运行时阻断、撤销传播和凭据轮换流程,而不是只检查目录条目是否消失。
局限与待验证问题
证据主要来自单一安全厂商的事件分析。公开材料没有给出独立受害者数量、完整平台遥测或所有版本的可重复样本;活动基础设施和目录状态也会随处置持续变化。展示安装量不能代表成功安装,更不能代表恶意代码执行。
后续需要平台方透明日志来验证发布、更新、下载和下架时间,区分自动抓取、重复安装和真实用户;还需要评估目录能否把撤销信息传播到本地 Agent,以及来源认证、摘要固定和行为隔离分别能阻断攻击链的哪个阶段。