SuperAPI AI 工具集

security-review

安全与审计

查看项目

更新于 10-16 09:16

技能介绍

用途

security-review 是一个代码安全审查技能(Skill),用于审计代码变更中的安全漏洞,重点关注 OWASP Top 10 以及项目技术栈特有的问题。当用户说出 "security review"、"security audit"、"check for vulnerabilities"、"pentest the code"、"OWASP" 等指令时使用。

运行方式

该技能可以本地作为 forked subagent 运行,此时主会话看不到你读取的文件或你的推理过程,只能看到你返回的最终报告。也可以在 CI 中运行(例如通过 claude-code-action),此时工作流会获取报告并将其转化为 GitHub PR 审查评论。无论哪种方式,报告的使用者都把它当作待办工作清单,因此报告必须完整且自包含。

审查范围

确定要审查的 diff:

  • 运行 git diff main...HEAD --name-only 获取本分支相对 main 变更的文件。
  • 如果失败(没有 main、分离工作树等),回退到 git diff HEAD --name-only 查看未提交变更,然后 git diff --cached --name-only 查看已暂存文件。
  • 如果没有可用 diff,询问用户要审查哪些文件。

开始审查前完整读取每个变更文件。先阅读 CLAUDE.md 以理解项目技术栈,以及任何具有安全敏感面的子系统(认证、实时通信、支付、文件上传)。

审查方向

注入与输入处理

  • SQL 注入:使用字符串插值构建原始 SQL 而非参数化查询。检查任何构建 SQL 的模板字符串,验证数据库库是否以参数化形式使用。
  • 命令注入:用户输入未经净化就传入 shell 命令(Bun.$、child_process、subprocess、os.system)。
  • XSS:用户可控数据被渲染为 dangerouslySetInnerHTML,或未经转义反射进 HTML/JS。检查接受粘贴 HTML 的 contentEditable 字段。
  • 路径遍历:用户输入未经验证用于文件路径。检查 .. 遍历。
  • 原型污染:对用户可控对象使用 Object.assign 或展开而未对键做允许列表。

认证与授权

  • 缺失认证检查:读写数据的端点未验证调用者身份或组织成员资格。
  • IDOR(不安全的直接对象引用):端点接受 ID 参数并在未验证调用者访问权限的情况下返回/修改资源。当 URL 参数(如 slug)未与实际资源所有权校验时尤其危险。
  • 权限提升:应受限制的操作(删除、移动、管理操作)未基于角色/权限进行门控。

数据暴露

  • 过度获取:API 响应包含超出客户端需要的数据(如内部 ID、密钥、只需标题时返回完整文档状态)。
  • 错误泄漏:错误响应中暴露堆栈跟踪、SQL 错误或内部路径。
  • 日志中的敏感数据:密码、令牌或 PII 被记录到控制台。

实时 / WebSocket 安全

(仅当项目存在 WebSocket 层时相关——见 CLAUDE.md。)

  • 频道授权:客户端能否通过猜测名称订阅任意频道?频道订阅是否针对用户权限进行验证?
  • 消息伪造:客户端能否向本无写权限的频道广播消息?
  • 载荷校验:传入的 WebSocket 消息在處理前是否经过验证?

拒绝服务

  • 无界查询:端点无分页或限制地返回所有记录。
  • 正则 DoS:用户输入未经净化用于正则模式。
  • 资源耗尽:文件上传、大请求体或昂贵操作缺少限流或大小限制。

密码学与密钥

  • 硬编码密钥:源代码中的 API 密钥、密码或令牌。
  • 弱随机数:安全敏感操作使用 Math.random() / random.random() 而非 crypto.randomUUID() / secrets.token_*()。
  • 缺失 TLS:生产环境中 WebSocket 连接使用 ws://。

依赖项

  • 已知漏洞:如果 bun audit / npm audit / pip-audit 可用,检查已知 CVE。
  • 依赖导致的原型污染:深度合并用户输入的库。

报告格式

将完整的格式化报告作为最终消息返回——不是摘要或 TL;DR。无论消费报告的是本地主 Claude 会话,还是发布内联 GitHub PR 评论的 CI 工作流,都将其当作待办清单使用,因此它必须自包含。

按严重级别组织发现:

Critical:当前即可利用且无需认证。数据丢失、未授权访问或远程代码执行。

High:需要一些前提条件即可利用(如需要已认证用户、特定时机)。权限提升、重大数据泄漏。

Medium:纵深防御问题。当前由另一层保护但不应依赖它的缺失验证。

Low:加固建议。当前不可利用但可减少攻击面。

每条发现包含足够细节,使消费者无需重读整个文件即可应用修复:

  • 文件与行号 — 精确的 path:line(范围用 path:start-end);跨文件发现列出每一处位置
  • 严重级别 — Critical / High / Medium / Low
  • 漏洞类型 — OWASP 类别或 CWE
  • 当前代码 — 有漏洞代码的简短片段(不只是描述)
  • 利用场景 — 展示攻击者如何利用的具体步骤
  • 修复 — 具体代码改动,最好是 before/after 片段
  • 周边上下文 — 调用方、需同步修改的相关文件、修复依赖的验证层、应添加的测试

不应做的事

  • 不要标记风格问题——那是代码审查的职责。
  • 除非代码级修复不足,不要建议添加 WAF、限流器或基础设施改动。
  • 不要报告需要物理访问或已失陷基础设施的理论问题。
  • 不要堆砌——优先处理最重要的发现。

报告之后

修复阶段(或发布 PR 评论阶段)在消费此报告的一方进行——不在这里。你的工作在你返回报告时结束。确保报告有足够信息让消费者无需重读代码库即可对发现采取行动。本地场景下,主会话将按严重级别顺序以最小化、有针对性的修复逐条处理发现,并在每次之后运行 {{check_command}} + {{test_command}}。CI 场景下,工作流将每条发现转化为 GitHub PR 审查评论。