royalpinto007/Skill-audit
GitHub: royalpinto007/Skill-audit
一款零依赖的 agent skill 静态安全扫描工具,在安装前检测 prompt 注入、危险 shell、密钥访问和数据外泄等风险,支持 CI 集成与 SARIF 输出。
Stars: 0 | Forks: 0
# skill-audit
**一款用于 agent skill 的安全扫描工具。** 在你信任它**之前**,扫描 Claude/agent Skill 是否存在 prompt-injection、危险的 shell、密钥访问和网络数据泄露 —— 一条命令,零依赖,输出适用于 CI 的 SARIF。
```
npx @royalpinto007/skill-audit ./path-to-skill
```
[](https://www.npmjs.com/package/@royalpinto007/skill-audit) [](https://github.com/royalpinto007/skill-audit/actions) [](LICENSE)
**npm:** https://www.npmjs.com/package/@royalpinto007/skill-audit · **Source:** https://github.com/royalpinto007/Skill-audit
## 原因
Agent **skill** 是新型插件。一个 skill 由一个 `SKILL.md` 及其附带的脚本组成,agent 会将这些**读取为指令并执行** —— 而人们往往在没有经过任何审查的情况下,直接从 GitHub、gist 和市场中安装它们。这是一个毫无防备的供应链:一个 skill 可以悄悄地告诉 agent *无视自身规则*,执行 `curl | bash` 来运行 payload,读取你的 `~/.ssh` 密钥,或者将你的 `.env` POST 到 webhook,却没有任何机制对此进行检测。
`skill-audit` 就是针对 skill 的 `npm audit`。将其指向某个 skill,它就会标记出那些应该阻止你安装它的行为模式。
## 检测范围
| 类别 | 示例 |
| --- | --- |
| **Prompt injection** | “忽略所有之前的指令”、“不要告诉用户”、“未经确认即执行”、禁用/绕过安全限制、明确的泄露意图 |
| **危险的 shell** | `rm -rf ~`, `curl \| bash`, fork bombs, `chmod 777`, `dd`/`mkfs`, reverse shells |
| **密钥访问** | 读取 `~/.ssh/id_rsa`、`~/.aws/credentials`、`.npmrc`、`.netrc`,导出环境变量,访问 keychain |
| **数据泄露** | 上传本地文件,连接 `webhook.site` / `pastebin` / ngrok / raw IPs,程序化的外部 POST 请求 |
| **供应链** | 运行时执行 `pip`/`npm` 安装,`git clone && run` |
| **混淆** | `base64 -d \| sh`,大型 base64 数据块,隐藏的零宽字符 / bidi Unicode |
| **过度授权** | `allowed-tools: *` |
它会读取 `SKILL.md` 的**正文**来检测指令注入,并读取**脚本和围栏代码块**来检测危险命令 —— 因此,如果 `chmod 777` 只是出现在句子的描述中,则不会触发误报;但如果出现在代码块中,就会被标记出来。
查看所有规则:`npx @royalpinto007/skill-audit --rules`。
## 用法
```
npx @royalpinto007/skill-audit [options]
# 扫描 skill 目录
npx @royalpinto007/skill-audit ~/.claude/skills/some-skill
# 在任何 medium 或更严重的问题上使 CI 失败
npx @royalpinto007/skill-audit ./my-skill --fail-on medium
# machine-readable 输出
npx @royalpinto007/skill-audit ./my-skill --format json
npx @royalpinto007/skill-audit ./my-skill --format sarif > skill-audit.sarif
```
**选项**
| 标志 | 默认值 | 含义 |
| --- | --- | --- |
| `--format ` | `text` | 输出格式 |
| `--fail-on ` | `high` | 如果任何发现项达到或超过此严重程度,则以状态码 `1` 退出 |
| `--rules` | | 列出所有规则并退出 |
| `-h, --help` / `-v, --version` | | |
**退出代码:** `0` 无异常(低于阈值) · `1` 发现项达到/超过 `--fail-on` 级别 · `2` 用法错误。
## 在 CI 中 (GitHub Action)
只需一行代码 —— 将其放入任何工作流程中即可。它会作为任务的门禁,并可以将检测结果上传到 Security 标签页:
```
name: skill-audit
on: [pull_request]
jobs:
audit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: royalpinto007/skill-audit@v1
with:
path: ./skills # default "."
fail-on: high # critical|high|medium|low|info
sarif-file: skill-audit.sarif
- uses: github/codeql-action/upload-sarif@v3
if: always()
with:
sarif_file: skill-audit.sarif
```
更喜欢直接使用 CLI?`npx @royalpinto007/skill-audit ./skills --fail-on high` 在任何 pipeline 中的作用都是一样的。
## 定位(能与不能)
- 它是一个**快速的静态启发式扫描器** —— 作为第一道防线,能够捕获那些明显和隐蔽但已知的风险。显示为绿色并不代表绝对安全;**请务必人工审查你要运行的 skill。**
- 它**没有运行时依赖** —— 安全工具不应该引入其自身的供应链风险。
- 设计上可能会出现误报(倾向于宁可错杀不可漏放)。你可以通过 `--fail-on` 进行调整。
## 相关项目
这是一个小型 agent 安全工具集的一部分:[mcp-audit](https://github.com/royalpinto007/MCP-audit)(扫描 MCP 服务器),[injection-arena](https://github.com/royalpinto007/injection-arena)(学习 prompt-injection 防御),以及 [awesome-llm-guardrails](https://github.com/royalpinto007/awesome-llm-guardrails) 列表。
## 许可证
MIT
标签:GNU通用公共许可证, MITM代理, Node.js, SARIF, StruQ, 暗色界面, 自定义脚本, 静态代码扫描