AI 编程工具在 2026 年已经是开发者的标配。Claude Code 的 Skills 生态让 AI 能直接读写文件、执行 Shell 命令、调用 API——但这也意味着,一个恶意技能可以做的事远超你的想象。
在分析了 90 万+ 技能后,我们发现了这些触目惊心的数据:9% 的技能存在安全隐患,包括硬编码的 API Token、未声明的网络请求、以及直接操作 ~/.ssh 的行为。更糟的是,46% 的技能是重复的,这给恶意技能提供了完美的伪装——把恶意代码塞进一个"热门技能"的克隆版里。
本文将给你一个开发者友好的 5 步检查清单,安装任何技能前花 5 分钟走一遍流程,能避开绝大多数安全问题。
第 1 步:看源码,别看描述
技能市场的描述是营销文案,源码才是真相。安装前必须做到:
打开技能目录,逐文件检查:``bash
先拉到本地,不要直接安装
git clone https://github.com/author/skill-name.git
cd skill-name
搜索敏感操作
grep -rn "curl\|wget\|fetch" . # 网络请求
grep -rn "~/.ssh\|/etc/passwd\|.env" . # 敏感文件读取
grep -rn "rm -rf\|sudo\|chmod 777" . # 破坏性命令
grep -rn "eval\|exec\|spawn\|subprocess" . # 代码执行
`
红色警报:如果技能文件经过混淆或压缩(一行几千字符的 JS/Python),直接跳过。正常技能不会混淆代码。
第 2 步:检查网络请求
技能如果发网络请求,它必须告诉你往哪发、发什么。
三个关键问题:
1. 它连到哪些域名?是不是官方 API 地址?
2. 它发了什么数据?有没有把你的代码或环境变量打包上传?
3. 网络请求是否必要?一个代码格式化技能不需要联网。
实际案例:我们上个月审查到一个"代码格式化"技能,表面上调用 Prettier,实际上在执行前把你所有带 API_KEY 的环境变量 POST 到了某个 collect-stats.com 的匿名服务器。
自检命令:
`bash
在技能目录里搜所有 URL
grep -rn "https\?://" . | grep -v "node_modules\|\.git"
`
如果你看到不认识或者看起来像随机生成的域名,警惕。
第 3 步:核查权限声明
Claude Code Skills 使用 SKILL.md 声明权限。但问题是——声明的权限和实际使用的权限可能不一致。
对比法:打开 SKILL.md 中声明的权限列表,然后对实际代码做一次权限审计:
| 声明权限 | 应该出现的代码模式 | 如果出现以下模式则有超出风险 |
|---------|------------------|--------------------------|
|
read 只读 | readFile, fs.read | writeFile, fs.write, rm |
|
shell 命令执行 | 简单的 CLI 调用 | curl \| bash, 动态拼接命令 |
|
network 网络 | 指定 API 域名 | 任意 URL、WebSocket 外连 |
核心原则:如果一个技能声明 read 权限但实际写了文件,不管功能多好用都别装。这说明作者至少不诚实,最多是恶意的。
第 4 步:检查依赖链
很多技能会带
package.json 或 requirements.txt。攻击者最爱的攻击面是依赖混淆——用一个叫 prettier-helper 的恶意 npm 包冒充工具库。
检查清单:
`bash
npm 依赖
cat package.json | jq '.dependencies, .devDependencies' 2>/dev/null
Python 依赖
cat requirements.txt 2>/dev/null
`
三个标准:
1. 依赖数量越少越好。一个"代码格式化"技能不需要 20 个依赖。
2. 依赖名是否知名。如果你不认识这个包名,去 npmjs.com 搜一下看下载量和更新时间。
3. 有没有依赖用到了
postinstall 脚本——这是恶意代码执行的常见入口。
第 5 步:先试后装(沙箱测试)
最后一条也是最实用的:永远不要在你主力开发机上直接安装未经审查的技能。
推荐的沙箱方案:
- Docker 容器测试:
docker run -it --rm node:20 bash,在干净容器里跑一遍
- Git worktree:
git worktree add /tmp/skill-test,在隔离目录里试
- 虚拟机 / OrbStack:macOS 用户直接用 OrbStack 开一个干净 VM
测试脚本模板:
`bash
#!/bin/bash
在隔离环境中跑技能,监控所有外连和文件操作
日志记录
LOGFILE="/tmp/skill-audit-$(date +%s).log"
用 fs_usage (macOS) 或 strace (Linux) 监控文件操作
sudo fs_usage -w -f filesys | grep -v "Safari\|Spotlight" > "$LOGFILE" &
MONITOR_PID=$!
安装并运行技能
... 你的技能测试流程 ...
结束后检查日志
kill $MONITOR_PID
echo "检查文件操作日志: $LOGFILE"
grep -i "\.ssh\|\.aws\|\.env\|\.gitconfig" "$LOGFILE" && echo "⚠️ 发现敏感文件访问!"
``
总结:5 分钟安全检查流程
| 步骤 | 检查项 | 时间 |
|------|--------|------|
| 1 | 读源码,搜敏感操作 | 2 分钟 |
| 2 | 搜 URL,确认网络请求目标 | 1 分钟 |
| 3 | 对比权限声明 vs 实际代码 | 1 分钟 |
| 4 | 审查依赖链 | 30 秒 |
| 5 | 沙箱测试或跳过 | 30 秒 |
花 5 分钟走完这个流程,你能避开 99% 的恶意技能。在 AGI Store,我们人工审查每个上架技能的安全性——这就是"精选"和"全量"的区别。
相关阅读: 免责声明:本文提供的安全检查方法仅供参考。在安装任何第三方技能前,请自行承担风险评估责任。建议企业用户建立内部技能审查流程。