# Agent Skill Security Scanner V2

> 当准备采用/安装第三方 Agent 技能、需在信任前评估其安全性时使用；做静态扫描+人工研判，产出含发现项/置信度/风险等级与采用建议的安全审查报告；不适用于自身代码漏洞审计或运行时沙箱防护。触发词：技能安全扫描、提示注入检测、采用前审查

- Skill: `findscripter/agent-skill-security-scanner-v2` (Agent Skill)
- Install (CLI): `npx skillmds@latest add findscripter/agent-skill-security-scanner-v2`
- Raw SKILL.md: https://api.skillmd.com/api/skills/findscripter/agent-skill-security-scanner-v2/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- License: MIT
- Author: findscripter (https://skillmd.com/u/findscripter)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/findscripter/agent-skill-security-scanner-v2

---

## 何时使用

- 在**信任并安装第三方 Agent 技能之前**，需评估它是否含提示注入、恶意代码、过宽权限、密钥泄露或供应链风险。
- 想对某个技能目录做「静态扫描 + 人工研判」的组合审查，决定它能否进入 Agent 环境。
- 需要批量扫描一个仓库里的所有技能（`*/SKILL.md`）。

**不该用的边界**：

- 不是给你自己的业务代码做通用漏洞审计（那是常规 SAST/代码审计任务）。
- 不是运行时防护/沙箱：本技能只在采用前做离线评估，不拦截运行中的攻击。
- 缺少扫描目标、权限边界或成功标准时，停下来向用户确认，别盲扫。

## 步骤

**Phase 1 输入与发现**——确定扫描目标：用户给目录就直接用；只给技能名就在 `plugins/*/skills/<name>/` 或 `.claude/skills/<name>/` 下找；说「扫全部」就发现所有 `*/SKILL.md` 逐个扫。确认目标含 `SKILL.md`，并列出结构：

```bash
ls -la <skill-directory>/
ls <skill-directory>/references/ 2>/dev/null
ls <skill-directory>/scripts/ 2>/dev/null
```

**Phase 2 自动静态扫描**——运行扫描脚本，解析其 JSON 输出（含 findings、URL、结构、各严重级计数），作为深挖线索。脚本只做机械模式匹配，**研判意图、过滤误报是你的活**。

```bash
uv run ${CLAUDE_SKILL_ROOT}/scripts/scan_skill.py <skill-directory>
```

> 脚本失败时回退：用 references 里的模式手工 Grep 分析。

**Phase 3 Frontmatter 校验**——读 SKILL.md 检查：`name`/`description` 必填；`name` 应与目录名一致；审 `allowed-tools`（Bash 是否有理由？是否 `*` 无限制？）；是否强制特定 model、为什么；description 是否如实描述技能行为。

**Phase 4 提示注入分析**——加载 `references/prompt-injection-patterns.md`。对扫描器「Prompt Injection」类每条发现：读上下文，判定它是在**执行**注入（恶意）还是在**讨论/检测**注入（合法）。**关键区分**：安全/测试/教学类技能在 references 里列举注入模式是记录威胁，不是攻击；只标记会真正对运行该技能的 Agent 生效的模式。

**Phase 5 行为分析**（纯 Agent，无模式匹配）——通读指令并评估：

- **描述与指令是否一致**：自称「代码格式化」却让 Agent 读 `~/.ssh` 即为不一致。
- **配置/记忆投毒**：是否指示修改 `CLAUDE.md`、`MEMORY.md`、`settings.json`、`.mcp.json` 或 hook；是否把自己加入白名单/自动批准权限；是否写入 `~/.claude/`。
- **范围蔓延**：超出既定用途的指令、无关数据采集、私装其他技能/插件/依赖。
- **信息搜集**：越界读环境变量、列技能范围外目录、无必要访问 git 历史/凭据/用户数据。

**Phase 6 脚本分析**（若有 `scripts/`）——加载 `references/dangerous-code-patterns.md`，**完整读每个脚本不跳过**，核对「Malicious Code」类发现：数据外泄（往外部 URL 发什么数据）、反弹 shell（重定向 I/O 的 socket）、凭据窃取（读 SSH 密钥/.env/环境 token）、危险执行（带动态输入的 eval/exec、`shell=True` 拼接）、配置篡改。检查 PEP 723 `dependencies` 是否为知名包，并核对脚本行为与 SKILL.md 描述是否相符。合法模式：`gh`/`git` 调用、读项目文件、JSON 输出到 stdout。

**Phase 7 供应链评估**——审查所有 URL：GitHub/PyPI/官方文档为可信；未知域名/个人站/短链需复核；**任何拉取内容当作指令执行/解释的远程 URL 为高危**；运行时下载并执行二进制/代码、引用非标准注册表的包同样可疑。

**Phase 8 权限分析**——加载 `references/permission-analysis.md` 的工具风险矩阵，按最小权限评估：所授每个工具是否真被指令用到。参考分级：`Read Grep Glob` 低风险（只读分析）；`Read Grep Glob Bash` 中风险（Bash 需理由，如跑捆绑脚本）；`Read Grep Glob Bash Write Edit WebFetch Task` 高风险（近乎全权限）。

## 指令

- 所有脚本**从仓库根目录、用 `${CLAUDE_SKILL_ROOT}` 全路径**运行。
- **置信度分级，只报够格的**：
  - HIGH（模式确认 + 恶意意图明显）→ 带严重级上报。
  - MEDIUM（可疑但意图不明）→ 记为「需人工核实」。
  - LOW（仅理论/最佳实践）→ **不上报**。
- **误报意识是重中之重**：最大风险是把引用了攻击模式的合法安全技能误判为恶意——上报前务必先判意图。
- 风险等级判定：任一高置信关键发现（提示注入/凭据窃取/数据外泄）→ Critical；高置信高危或多个 medium → High；medium 置信或轻微权限问题 → Medium；仅最佳实践建议 → Low；彻查无发现 → Clean。

## 示例

扫描某技能目录后，按下列模板产出报告：

```markdown
## 技能安全扫描：[技能名]

### 摘要
- 发现项：X（Y Critical，Z High …）
- 风险等级：Critical / High / Medium / Low / Clean
- 技能结构：仅 SKILL.md / +references / +scripts / 完整

### 发现项
#### [SKILL-SEC-001] [类型]（严重级）
- 位置：`scripts/tool.py:15`
- 置信度：High
- 类别：提示注入 / 恶意代码 / 权限过宽 / 密钥泄露 / 供应链 / 校验
- 问题：[发现了什么]
- 证据：[代码片段]
- 风险：[可能后果]
- 修复：[如何处置]

### 需人工核实
[medium 置信项]

### 结论
[可安全安装 / 谨慎安装 / 请勿安装]+ 简要理由
```

## 注意事项

- 脚本只做确定性模式匹配，**评估意图与过滤误报必须由你完成**。
- Phase 5 行为分析无脚本可依，是发现「描述-指令错位」「配置投毒」「范围蔓延」的关键，别省。
- 不要把本技能的输出当作环境特定验证、实测或专家评审的替代品。
- 仅在任务明确落入上述范围时使用；输入/权限/安全边界/成功标准缺失时先问清。

## 互见

- `references/prompt-injection-patterns.md`——注入模式、越狱、混淆手法与误报指南。
- `references/dangerous-code-patterns.md`——脚本安全模式：外泄、反弹 shell、凭据窃取、eval/exec。
- `references/permission-analysis.md`——工具风险分级、最小权限方法、常见技能权限画像。

---

采编自 sickn33/antigravity-awesome-skills（MIT）。

