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 ``` [![npm](https://img.shields.io/npm/v/@royalpinto007/skill-audit.svg)](https://www.npmjs.com/package/@royalpinto007/skill-audit) [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/ad/ad5834178f7599af9fdda11629d49cae07f2997beec49821b2920eff5bfd50e7.svg)](https://github.com/royalpinto007/skill-audit/actions) [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](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, 暗色界面, 自定义脚本, 静态代码扫描