关于 strix-fix-findings
strix-fix-findings 是根据 Strix 已验证发现修复漏洞并复扫确认的技能,面向负责安全问题处置的开发人员。它涵盖发现分级、根因修复、CLI 或云端复测及结果汇报。
主要功能
- 01从 CLI 或云端获取发现
- 02按严重程度排列处理顺序
- 03依据 PoC 重现并修复根因
- 04通过复扫或 PoC 验证修复
- 05汇总修复与验证结果
适用场景
- 01处理 Strix 报告中的漏洞
- 02用 PoC 复现并确认问题根因
- 03复扫已修复的代码或 PR
- 04记录修复位置及验证结果
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ usestrix/ strix --skill strix-fix-findings安装后在 Claude Code 中输入/strix-fix-findings确认已加载。
详细介绍
修复 Strix 发现的问题并验证
将已验证的 Strix 发现转化为精简、正确的修复,并通过重新扫描证明修复有效。
1. 分类
从运行扫描的位置获取发现的问题:
- OSS CLI —
strix_runs/<run-name>/中的产物:vulnerabilities/*.md— 每个文件包含一项发现:描述、严重程度、PoC 步骤或脚本、受影响的代码位置以及修复建议。vulnerabilities.json— 相同发现的 JSON 格式(包含 id、严重程度、CWE/CVE,以及可用时带有fix_before/fix_after建议的code_locations)。
- 云端 (app.strix.ai) — 通过
GET /api/v1/scans/{scanId}(或组织范围的GET /api/v1/vulnerabilities)获取扫描的vulnerabilities[]。每项包含severity, cwe, endpoint, method, impact, technical_analysis, poc_description, poc_script_code,代码相关发现还包含code_file/code_diff/code_before/code_after。身份验证信息请参阅 strix-cloud-api 技能。
按严重程度安排处理顺序:严重 → 高 → 中 → 低。每项 Strix 发现都经过有效概念验证,因此除非你亲自重新测试 PoC,否则不要将发现判定为误报。
2. 修复
对于每项发现:
- 在可行时,使用发现文件中的 PoC 复现问题。
- 修复根本原因,而非针对特定载荷修补(例如,对所有查询进行参数化,而不是屏蔽某个字符串;在处理程序中实施授权,而不是隐藏端点)。
- 优先使用框架内置的防护(ORM 参数化、模板自动转义、CSRF 中间件、集中式授权),而非临时编写的清理逻辑。
- 保持差异精简,并遵循仓库现有模式。发现文件通常包含
fix_before/fix_after代码片段——以此为起点,不要原样照搬。
常见的发现类型及预期修复方式:注入 → 在使用点进行参数化/转义;IDOR/访问控制失效 → 添加对象级授权检查;SSRF → 使用允许列表并屏蔽内部网段;XSS → 使用上下文感知的输出编码 + CSP;机密信息泄露 → 轮换机密信息,并将其从代码/历史记录中移除;身份验证问题 → 修复服务端检查(切勿仅在客户端修复)。
3. 重新运行 Strix 进行验证
修复后,对修复区域重新扫描,并确认该问题已消失。在运行扫描的任一环境(或两个环境)中进行验证:
OSS CLI:
# Re-test just the changed files (fast). Resolve the repo's real default
# branch instead of assuming origin/main (many repos use master/develop).
# Avoid the current branch's own upstream as the base — its merge base with
# HEAD would be HEAD, giving an empty diff and a falsely clean result.
DIFF_BASE=$(git symbolic-ref --quiet --short refs/remotes/origin/HEAD 2>/dev/null)
# origin/HEAD can be a dangling symbolic ref — keep it only if its target exists.
git rev-parse --verify --quiet "$DIFF_BASE" >/dev/null 2>&1 || DIFF_BASE=""
if [ -z "$DIFF_BASE" ]; then
for b in origin/main origin/master origin/develop; do
git rev-parse --verify --quiet "$b" >/dev/null && DIFF_BASE="$b" && break
done
fi
# No silent fallback: a guess like HEAD~1 would cover only the last commit of a
# multi-commit fix branch. If no base resolves, ask the user for the base branch
# (or use the focused --instruction verification below, which needs no diff base).
[ -n "$DIFF_BASE" ] || { echo "Set DIFF_BASE to the branch your fix will merge into." >&2; exit 1; }
strix -n -t ./ --scan-mode quick --scope-mode diff --diff-base "$DIFF_BASE" --max-budget 5
# Or re-test with the original finding as focus (no diff base needed)
strix -n -t ./ --instruction "Verify the SQL injection in app/api/search.py is fixed. Original PoC: <poc>" --max-budget 5
退出代码:2 = 仍有发现(读取新的 strix_runs/<run>/vulnerabilities/ 并继续迭代);0 = 已分析内容未发现问题。在信任 0 之前,确认运行未提前中止——检查 run.json 中的状态是否已完成,并将其 llm_usage.cost 与 --max-budget 进行比较:达到硬性预算上限会留下 status: "stopped",但在预算警告下结束的运行会记录 "completed",且覆盖范围不完整。验证时应提供足够的预算以确保运行完成,并优先重新运行特定 PoC,作为判定结果的依据。
云端: 使用相同配置重新扫描并再次轮询,然后确认该问题不再出现:
new_id=$(curl -sS "$BASE/scans/$scan_id/rerun" "${auth[@]}" -X POST | jq -r .scan_id)
# poll GET /scans/$new_id until completed, then check its vulnerabilities[]
或者,如果云端扫描来自仓库/PR,则在修复分支上触发新的 PR 审查(POST /pr-reviews/start)。平台也支持直接重新测试单项发现:POST /api/v1/vulnerabilities/{vulnerabilityId}/retest。
- 如果 PoC 是简单请求/脚本,也要手动重新运行——这是最快的验证方式。
- 运行项目自带的测试套件,确保修复没有破坏功能。
4. 报告
按发现的问题逐项总结:严重程度、根本原因、已应用的修复(文件:行号)、验证结果(重新扫描未发现问题 / PoC 无法再复现)。报告中绝不包含有效机密信息;如果机密信息已泄露,应说明必须进行轮换。