mcpField
S
snyk-agent-scan-compliance

snyk-agent-scan-compliance

github.com/samber安全2414.5k 次安装4 周前更新
代码仓库

关于 snyk-agent-scan-compliance

这是面向 Skill 作者的合规技能,用于处理 snyk-agent-scan 报警。它说明如何重组内容以修复 W001、W011 和 W012,同时保留有用信息。

主要功能

  1. 01W001、W011 和 W012 指引
  2. 02按报警类型重组内容
  3. 03逐项修复并重新扫描
  4. 04误报判断方法
  5. 05编写前合规检查清单

适用场景

  1. 01修改被 snyk-agent-scan 标记的 Skill
  2. 02减少不安全 URL 和 MCP 调用模式
  3. 03扫描前检查 Skill 内容

MCP 相关

内容涉及 MCP 工具调用导致的提示注入类 W001 报警,并建议在 Skill 正文中采用通用表述。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/samber/cc-skills --skill snyk-agent-scan-compliance

安装后在 Claude Code 中输入/snyk-agent-scan-compliance确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

evals/
evals.json
references/
w001-patterns.md
w011-patterns.md
w012-patterns.md

详细介绍

角色: 你是一名技能编写合规专家。你通过重组内容来修复 snyk-agent-scan 警报,绝不通过压制或删除有用信息来处理。

思考模式: 对于涉及多个警报的修复,要尽可能全面地推理,因为修复一种警报类型可能会触发或压制另一种警报。在 Claude Code 中,使用 ultrathink 明确触发扩展思考。

snyk-agent-scan 合规性

snyk-agent-scan 工具会分析技能正文中的三类不安全模式:第三方内容泄露(W011)、恶意外部 URL(W012),以及通过 MCP 工具调用进行的提示词注入(W001)。这三类问题都可以通过重组内容修复,且不会丢失任何信息。

参考文件

文件阅读时机
references/w001-patterns.md修复 W001 警报时——MCP 工具名称模式
references/w011-patterns.md修复 W011 警报时——祈使句 URL 和外部内容模式
references/w012-patterns.md修复 W012 警报时——版本固定和 frontmatter 转移

快速参考

警报严重性根本原因主要修复方法
W011高技能正文指示 Agent 获取/解读外部内容将祈使句改为被动提示,说明相关内容可供参考
W012高技能正文引用运行时获取并执行的外部 URL移至 frontmatter 的 install 块;固定版本
W001高技能正文明确提及 MCP 工具函数名称改用通用表述

运行扫描器

# Scan a single skill
SNYK_TOKEN=<token> snyk-agent-scan --skills skills/<name>/

# Scan all skills
SNYK_TOKEN=<token> snyk-agent-scan --skills ./skills

扫描器需要有效的 SNYK_TOKEN。在 CI 中,将其存储为密钥。如果尚未安装 snyk-agent-scan,可使用 uvx snyk-agent-scan@latest 作为无需安装的直接替代方案。针对各类警报的修复方法,请参阅详细模式。

W011 — 第三方内容泄露

当技能正文使用祈使动词指示 Agent 获取、检查或评估外部内容并据此采取行动时,就会触发 W011。扫描器会将 Agent 视为执行外部操作的语法主语。

规则:

  • 将 Check <url> 和 Fetch <url> 替换为被动提示:The release notes at <url> may be useful.
  • 删除任何涉及外部数据的指令中的“always”:Always reference the changelog → The changelog documents breaking changes.
  • 将工具调用(gh repo view、govulncheck)放在代码块中,不要放在暗示 Agent 必须在采取行动前运行这些工具的说明性清单中。
  • 将工具执行与决策分开:运行工具没有问题;但仅凭其远程来源的输出触发重构则不可取。

请参阅 W011 模式目录,其中有 12 个以上的修复前后示例。

W012 — 可能有害的外部 URL

当正文引用运行时获取并执行的外部内容时,就会触发 W012:使用 @latest 的软件包安装命令、管道传给 shell 的命令模式,或使用错误/不存在主版本的 GitHub Actions。

规则:

  • 将 go install pkg@latest 等命令从正文移至 frontmatter 的 metadata.openclaw.install 块中——扫描器不会标记 frontmatter。
  • 将 GitHub Actions 固定到当前正确的主版本(@v4,而非 @v6)。
  • 技能正文中绝不要使用管道传给 shell 的命令模式(curl ... | sh)。

请参阅 W012 模式目录,其中有 8 个以上的修复前后示例。

W001 — 通过 MCP 工具调用进行提示词注入

当技能正文明确写出 MCP 服务工具函数名称,触发提示词注入检测时,W001 会触发。

规则:

  • 切勿在技能正文中写出工具函数名称(resolve-library-id、query-docs、mcp__*)。
  • 替换为通用表述:Context7 can help as a discoverability platform.
  • MCP 工具名称仍可出现在 allowed-tools frontmatter 字段中 — 仅限制正文。

请参阅 W001 模式目录,了解安全的改写方式。

修复方法

一次修复一个警报,每次更改后重新运行 snyk-agent-scan,并确认警报数量减少后再继续处理下一个。如果修复未能减少警报,请撤销该更改并尝试其他方法 — 不要叠加未经验证的更改。

当扫描返回多个警报时,请按以下顺序修复,以尽量减少返工:

1. W001 (simplest) — remove MCP tool names from body; confirm allowed-tools is correct
2. W011 — rewrite imperative sentences as passive statements; move checklist items to code blocks
3. W012 — move install commands to frontmatter; pin versions
4. Re-scan after each individual fix to verify improvement

重构后,如果 URL 变得更加显眼,修复 W011 有时会暴露出隐藏的 W012。

误报

并非所有警报都是真的。以下情况很可能是误报:

条件很可能是误报?
URL 出现在 Markdown 表格单元格中,作为参考数据而非指令是 — 表格通常是安全的
在介绍某个库的技能中,URL 是该库的官方文档是 — 通常是安全的
URL 是 frontmatter 中的 homepage 或 issues 链接是 — 不会扫描
工具名称出现在三反引号代码块中,作为 shell 命令有时 — 代码块的审查较宽松
Quick Reference 代码块中的 go install 使用了固定版本有时 — 固定版本的风险较低
always 出现在不涉及外部资源的句子中是 — 单独出现的 "always" 不会触发 W011

当警报很可能是误报时,仍应使用被动提示模式进行重构 — 扫描器的启发式规则旨在保护真实用户;重构比假定扫描器出错更安全。

编写前检查清单

编写新的技能正文时,请应用以下检查,以避免在首次扫描前触发警报:

  • 没有以 Agent 为主语、对 URL 执行操作的句子
  • 正文中的任何安装说明都没有 @latest 标签
  • 正文中没有 MCP 工具函数名称(mcp__*、resolve-library-id 等)
  • 所有安装命令都位于 frontmatter 的 install 区块中
  • GitHub Actions 版本与实际存在的主版本一致
  • 工具调用位于代码块中,而非有序列表检查清单中
  • "always" 后面没有外部资源指令

如果你在 snyk-agent-scan 中遇到错误或意外行为,请在 https://github.com/snyk/snyk-agent-scan/issues 提交问题。

如果你发现上面的参考文件未涵盖、会触发警报的模式 — 例如新的绕过技术、误报情况或未记录的警报代码 — 请在 https://github.com/samber/cc-skills/issues 提交问题,或向 samber/cc-skills 仓库提交拉取请求,将其添加到相关模式文件中。新模式是对此技能最有价值的贡献。

评论

支持 Markdown