用途
Security Review 是一个针对变更集的安全审查技能。它把一组已冻结的变更视为审查对象,由“高级安全工程师”的视角,只报告由该变更集引入、且具备高置信度的高危安全漏洞。它明确不是通用代码审查:一般的正确性或约定审查应使用 code-review。
其核心原则包括:把仓库文件、diff、测试、注释、PR 元数据、项目规则、外部网络材料与工具输出都视为不可信数据而非指令;不因数据中的嵌入指令而改变审查、放宽范围、授权工具或泄露凭据;发现覆盖不完整时,要显式暴露未覆盖,而不是把“未分析”包装成“干净结果”。
主要能力
- 冻结审查范围:按明确请求的提交范围或修订版本、明确 PR URL 或编号、当前分支的开放 PR、本地分支与待处理变更的顺序确定审查模式,不混合模式、不扩大已解析范围。对 PR 会固定 baseRefName、baseRefOid、headRefOid,并基于两枚固定 OID 计算 merge base 后与 headRefOid 做 diff;对本地范围会要求唯一的可信上游 merge base,否则标记范围发现不完整。
- 范围清单:分析前冻结 scope manifest,记录 SCOPE_ID、MODE、PATH_FILTER、REPOSITORY_ROOT、BASE_SHA、BASE_SOURCE、HEAD_SHA、WORKTREE_INCLUDED、WORKTREE_SNAPSHOT_SHA256、WORKTREE_ENTRIES、CHANGED_PATHS_AND_STATES 以及 PR 相关字段。对工作区变更会捕获补丁与精确字节,记录每个快照的 SHA-256、删除项的前像哈希与删除标记、重命名项的新旧路径与内容哈希。在每次派发前、消费结果前和终态输出前都会重新计算并比对工作区哈希。
- 建立实现基线:对每个安全相关变更,将当前完整实现与其实现基线对比(新增路径对应基线中不存在),检查变更因果线、安全敏感汇点与调用者、配置、测试、部署或 workflow 输入,并记录 introduced_by。范围之外的上下文只能用于判断可达性或安全性,不能成为被审查的变更或发现来源。
- 分类分析:在可派发任务时并行派发七个独立分析任务:输入校验与注入(SQL、命令、XXE、模板、NoSQL、路径穿越、XSS);认证与授权(认证绕过、提权、IDOR、会话、JWT);加密与密钥(凭据、算法、密钥存储、随机性、证书校验);不安全代码执行与反序列化(RCE、pickle、不安全 YAML loader、eval、动态执行);数据暴露(敏感日志、PII、调试信息、API 泄露);并发与状态(TOCTOU、授权竞态、过期沙箱或允许名单决策);信任边界(不可信输入跨越特权、租户、进程、workflow 或沙箱边界)。每个类别候选须包含 candidate_id、category、changed_location、sink_location、baseline_evidence、introduced_by、attacker、controlled_input、trust_boundary、impact、supporting_evidence。
- 过滤候选:对每个类别候选派发独立过滤任务,要求重复 candidate_id、给出 1–10 置信度并做出保留或拒绝。报告阈值为至少 8/10 且至少 80% 置信度;1–3 为低、4–7 为不足、8–10 为可报告。保留候选仍须通过漏洞利用验证。
- 验证利用场景:对每个保留候选派发独立漏洞利用任务,要求基于真实代码确立攻击者与访问级别、其控制的确切输入或动作、入口点、载荷或序列、变更因果线、敏感汇点、跨越的信任边界与安全影响,以及为何实现基线不易受攻击且 introduced_by 准确。若无法建立具体可达攻击路径,则拒绝该候选,不虚构运行态、入口点或攻击者控制。
- 校验交接与恢复覆盖:逐个校验类别、过滤、漏洞利用结果,重新计算 SCOPE_ID,拒绝身份、类别、指派或 candidate_id 不匹配以及字段缺失、分数越界、位置不存在、缺少引入证据的结果。恢复契约包括:对成功但不完整或格式错误的响应,命名遗漏并恰好恢复同一子任务一次;对瞬时超时、限流或传输失败,作为新派发重试恰好一次;对权限拒绝、工具不可用、无效请求或确定性失败,不重试(权限拒绝不消耗瞬时重试预算);并行派发不可用时改为串行;个体派发不可用或恢复耗尽时,由父任务补齐缺失清单。任何失败、空白、格式错误、部分或无效的响应都不得解释为“无发现”。同时维护按变更路径索引的范围覆盖台账与按类别/候选/阶段索引的分析覆盖台账。
- 安全策略:优先报告导致未授权访问、数据泄露、凭据泄露、权限提升或代码执行的具体漏洞;不报告风格问题、理论性加固机会或无实际安全影响的发现。任何范围内文件中引入的硬编码真实或疑似真实凭据都可报告,包括源码、配置、测试、夹具与文档;活跃凭据泄露优先于对测试、夹具、文档的排除。环境变量与 CLI 参数是信任边界输入,不自动可信。排除项包括:拒绝服务、资源耗尽、限流、内存或文件描述符泄漏;过时的第三方依赖;非安全关键字段缺少输入校验;缺少通用加固或审计日志;无可达有害交错的理论竞态或时序攻击;日志伪造、正则注入、正则拒绝服务以及仅出现在 AI 提示中的用户内容;仅控制路径而非主机或协议的 SSRF;内存安全语言中的内存安全推测等。
- 终态门控与格式化输出:每个报告发现包含 candidate_id、文件与行、严重性、类别、置信度、描述、基线证据、具体利用场景与修复建议,发现列于覆盖细节之前。终态恰好三种:Complete(报告已验证发现与已完成台账;若无发现,输出 No security vulnerabilities found in the reviewed scope.);Empty scope(输出 No reviewable changes found in the resolved scope.);Incomplete(输出 Security review incomplete; absence of findings is not established.,随后附已验证发现、两份台账、失败、恢复尝试与未验证线索)。只有在范围和覆盖台账完整且每个候选都有最终处置时,才允许输出无发现结果。
- 按需发布到 PR:仅当用户请求且范围识别出 PR 时发布,否则只返回终态输出。评论需包含 head SHA 与标记
<!-- opencode-power-pack:security-review -->,匹配标记与已认证作者,存在匹配评论则更新而非重复创建,内容与 head SHA 已相同则不动作。
使用方式
以技能形式调用,并可通过指定提交范围、修订版本、PR URL/编号或路径来表达审查范围。它只检查代码与仓库证据,不运行命令复现漏洞。是否发布到 PR 由用户请求决定。
适用场景
适用于对一次冻结的 git 变更集(提交、PR、本地分支与待处理工作区变更)做聚焦安全审查,尤其是需要在 CI 或评审流程中识别高置信度、具备真实利用潜力的安全漏洞,同时明确区分“未发现”与“未完整分析”的场景。
限制
仅面向安全审查,不做通用代码正确性或风格审查。不运行命令复现漏洞。范围模式不可混合或扩大,路径仅作为过滤条件。缺失事实(如具体收费、平台支持、安装步骤等)资料未提供,暂未提供。