2026年10月7日,据 Reddit 社区 r/claudeskills 上的发帖人 u/SomeRandom_Sht 披露,其对 Anthropic 官方的五个 Claude Code skill 进行了静态安全扫描,并公布了所有发现。扫描结果显示,其中两个 skill 触发了“不要安装(do not install)”的安全门槛。此扫描提供了一个安装前的安全参考指标。
据发帖人 u/SomeRandom_Sht 介绍,此次扫描结果基于包含 46 项检查的扫描轮次。发帖人指出,该扫描工具(Cardea)此后已升级至 v0.2.6 版本,检查项大幅扩展至 80 多项,因此本次公布的仅代表当时那次扫描的记录,而非当前的最新评分。
关于扫描机制,发帖人称该扫描器读取文件夹时不执行目标 skill 的任何代码。检查范围包括:读取 SKILL.md 的前置数据(frontmatter)、追踪文档引用的文件路径、标记存在但未被引用的脚本、扫描文本中的提示词注入模式和隐藏的 Unicode 字符,并用 bandit 和 semgrep 扫描 Python 代码。
据原帖披露,被扫描的五个官方 skill 的得分和门槛状态如下:
发帖人澄清,这里的“通过(pass)”仅意味着未触发 CRITICAL 级别的门槛,并不代表该 skill 没有任何安全发现。
发帖人逐个说明了各 skill 中的发现。他认为部分高危提示是误报,另一些则是真实的风险暴露面。
mcp-builder
据发帖人称,该 skill 的 1 条 CRITICAL 发现是误报。分析器在 reference/node_mcp_server.md 中匹配到了凭证泄露模式(检查 EXAMPLE_API_KEY 环境变量)。发帖人解释,这只是指导用户在启动服务器前检查 API 密钥的示例文档,但正则表达式无法区分教学代码与真实代码。
此外,发帖人指出 scripts/evaluation.py 中还有一个单独的 XML 安全发现:该脚本使用标准库 xml.etree.ElementTree 解析 XML,被 semgrep 和 bandit 标记为不安全地解析不受信任的输入。发帖人建议考虑改用 defusedxml。该 skill 还附带了 SKILL.md 中未提及的 scripts/example_evaluation.xml 文件。
docx
发帖人表示,该 skill 的 1 条 CRITICAL 发现是路径穿越引用(path traversal reference)。在扫描版本的重新打包步骤中,执行了 cd unpacked && zip -Xr ../out.docx . 命令,其中的 ../ 被匹配为试图在 skill 文件夹外读取的模式。但在这个上下文里,它只是把生成的文件写在工作目录旁边,发帖人称其“实际无害”。
至于 1 条 HIGH 级别发现,发帖人称是因为扫描版本中的 scripts/office/soffice.py 缺少执行权限位(execute bit)。28 条 LOW 级别发现主要是 SKILL.md 引用了文档解包后才会存在的文件,以及 bandit 对 scripts/accept_changes.py 的一些提示。
webapp-testing
该 skill 的 2 条 HIGH 级别发现引起了发帖人的特别关注。据其描述,两条发现都指向 scripts/with_server.py 中的同一个 subprocess.Popen(..., shell=True) 调用,被 bandit 和 semgrep 分别独立标记。发帖人指出,该脚本把服务器命令作为参数直接传给 shell。这是有意设计的接口,但参数中的 shell 元字符可能因此变成命令执行。发帖人认为,这是一个真实的命令注入面,而不只是代码风格问题。
此外,据原帖称,bandit 还标记了 examples/element_discovery.py 中硬编码的 /tmp 路径。发帖人还提到一个值得注意的 MEDIUM 发现:描述说明了该 skill 的功能,却没有说明何时激活它,而这直接关系到大语言模型(LLM)是否会加载该 skill。
据发帖人描述,pdf 的唯一发现是随附了 scripts/check_fillable_fields.py,但在扫描版本的 SKILL.md 中未被引用。skill-creator 也有两个类似发现(generate_report.py 和 utils.py),以及 30 条 LOW 级别发现,大多是 SKILL.md 引用了运行时才生成的评估产物。
发帖人总结说,这次扫描中有五分之二的 skill 越过了“不要安装”的门槛。他认为真正需要改进的地方包括:mcp-builder 中的 XML 解析、webapp-testing 中 shell=True 的命令执行边界,以及随附却未在 SKILL.md 中说明的文件(发帖人指出,Agent 可能会在磁盘上发现这些文件并猜测其用途)。
发帖人最后也强调了静态扫描的局限:静态分析只能说明文件中存在什么、被分析器标记了什么,无法判断该 skill 在实际对话中会如何表现。因此,这个分数只是“安装前(pre-flight)的指标”,不是绝对的安全保证。