AI 技能AI 插件应用安全网络安全AI 评测【免费下载链接】skillsTrail of Bits Claude Code skills for security research, vulnerability detection, and audit workflows项目地址https://gitcode.com/gh_mirrors/skills8/skills点击查看免费下载导读本篇文章聚焦于 rust-review 插件中一个容易被忽略、却可能导致认证绕过与路径混淆的逻辑缺陷类别——字符串比较缺陷STRCMP。它对应仓库中 string-comparison-finder.md 这份 bug-finder 提示词文档讲解如何识别用starts_with/ends_with/contains等子串谓词代替全等比较以及大小写敏感性混用这两类安全决策漏洞。读完本文你将掌握 STRCMP 的缺陷形态Bug Shape、判定门槛Gates、误报排除规则FPs与修复模式Patch并理解它在 rust-review 逻辑正确性logic-correctness集群中的实际执行机制与验证方法。STRCMP 是什么一类被编译器放行的逻辑缺陷Rust 的借用检查器能证明内存安全却对比较谓词用错了这类纯逻辑问题无能为力。s t与s.starts_with(t)都合法地通过编译但语义截然不同。rust-review 将这类缺陷归类为STRCMPString Comparison在 manifest.json 中注册为logic-correctness集群的第 5 个 pass对应的 finder 文件即本篇文章的主体 string-comparison-finder.md。从仓库结构看STRCMP 属于always 门控的 bug 类它不要求代码库存在unsafe、FFI 或并发代码只要逻辑比较发生就可能在纯 safe Rust 中出现。这正是 rust-review 的逻辑正确性集群一直运行的原因——即使has_unsafefalse此类缺陷依然存在。Finding ID 前缀STRCMP 类发现统一使用STRCMP前缀产出的 finding 文件遵循 worker 协议规范见 rust-review-worker.md命名为STRCMP-001、STRCMP-002等写入审计输出目录的findings/子目录。Bug Shape两种缺陷形态原文档将 STRCMP 的缺陷形态定义为两种形态一子串/前缀/后缀谓词代替全等比较一个安全决策认证检查、allowlist/denylist、host/origin 校验、文件扩展名过滤、路由本应要求字符串完全相等却调用了starts_with/ends_with/contains之一。典型的绕过示例// 安全缺陷allowlist 检查本意是只放行 /admin if path.starts_with(/admin) { grant_admin_access(); } // 攻击者请求 /admin-public 或 /admin_backdoor 均可绕过/admin.starts_with语义下/admin-public也满足匹配权限检查被静默绕过。这类问题在 Web 框架路由、反向代理路径匹配、静态资源白名单中尤为常见。形态二大小写敏感性混用在同一值类别host、path、文件扩展名的等价检查之间混用了大小写敏感的全等与大小写不敏感的eq_ignore_ascii_case导致路径混淆path confusion。例如一处校验用host example.com另一处用host.eq_ignore_ascii_case(example.com)攻击者可用EXAMPLE.com或Example.com绕过前一处检查后又在后一处被放行。Gates判定的两道门槛原文档明确一个候选点必须同时满足以下两个条件才构成 STRCMP 发现比较门控着安全相关决策认证检查、allowlist/denylist、host/origin 校验、文件扩展名过滤、路由分发等。纯展示或格式化逻辑不在此列。要么在需要精确身份exact identity的地方使用了子串/前缀/后缀谓词starts_with/ends_with/contains要么在同一值类别的等价检查中不一致地混用了大小写敏感与不敏感比较。FPs误报排除规则原文档列出三类应判定为误报False Positive的情况worker 在验证候选点时需严格对照前缀/后缀匹配本身就是预期语义例如 MIME 类型前缀匹配text/、路径层级遍历判断/api/v1/前缀。此时子串匹配不是缺陷而是业务规则。输入在比较前已被规范化为标准形式如果攻击者可控输入在进入比较之前统一经过to_lowercase()等归一化那么后续的大小写混合风险不复存在。比较属于非安全的展示或格式化逻辑如 UI 文案判断、日志裁剪等不构成安全门控。值得注意的是这些 FP 规则与 finder 的判定流程形成闭环worker 在 rust-review-worker.md 的Either way规则下需要实际验证每个候选点追踪数据流、检查现有验证而不是仅凭形状下结论。Patch修复模式原文档给出的修复指引是身份决策改用全等比较使用或.eq()而不是starts_with/ends_with/contains。大小写统一归一化要么统一使用eq_ignore_ascii_case要么统一使用.to_lowercase()后比较并在代码中文档化所选语义避免同一值类别内口径漂移。// 修复形态一精确身份比较 if path /admin { grant_admin_access(); } // 修复形态二统一大小写口径并文档化 // 语义host 比较统一使用 ASCII 大小写不敏感匹配 if host.eq_ignore_ascii_case(example.com) { // ... }在 logic-correctness 集群中的执行机制Phase A 种子搜索logic-correctness.md 为 STRCMP pass 提供了两组 Phase-A 种子正则由 worker 通过rgripgrep在审计范围内执行rg seed: \b(starts_with|ends_with|contains)\b rg seed: eq_ignore_ascii_case|to_lowercase|to_uppercase|to_ascii_lowercase|to_ascii_uppercase # case-folding → STRCMP case-mixing第一组捕获子串谓词候选第二组捕获大小写折叠case-folding调用——正是形态二的取证入口。之后按 Phase B 的第 5 个 pass 顺序将 string-comparison-finder.md 的检测与 FP 指引应用到 Phase-A 清单上。执行纪律worker 协议rust-review-worker.md对 STRCMP 这类非 consolidated pass 的约束值得注意sub_prompt_paths由编排器在 plan 阶段预解析并验证存在worker 逐 passRead对应 finder 文件所有种子必须以 ripgrep 正则语法运行rg缺失时退化为grep -E的 POSIX 类写法\s→[[:space:]]去掉\b禁止把含\s的模式直接交给不支持 GNU 扩展的grep并信任空结果——那会把未搜索的 pass 记为cleared造成覆盖门控失败每个 pass 必须产出filed:或cleared结果并写入覆盖率文件skipped:不是合法结果。覆盖门控与测试验证仓库通过测试对种子模式的可达性做回归锁定。在 test_prompt_regexes.py 中test_hashmap_inventory_skips_substring_types等用例验证了逻辑正确性集群的种子提取逻辑而 test_gating.py 的test_unsafe_scaffolding_passes_filtered_without_unsafe验证了logic-correctness集群在has_unsafefalse时仍保留 ORDEQHASH、STRCMP 等非 unsafe 依赖的 pass仅剔除需要unsafe的 TRAITADV/CLOSUREPANIC——这从测试层面印证了纯 safe Rust 代码库同样会命中 STRCMP的设计意图。同时test_full_run_all_flags_end_to_end_snapshot以黄金快照锁定了 23 个 worker 的编排结构logic-correctness被拆分为-1/-2两个 chunkSTRCMP 在其中稳定执行。从查找到裁决STRCMP 发现的后续流水线worker 写入STRCMP-NNN.mdfinding 文件后按 SKILL.md 定义的流水线顺序流转dedup-judge按(path, line, bug_class)等多级键合并重复发现。因此 worker 写入的location必须是单一路径path:line、function必须是单一函数名格式错误会导致 STRCMP 发现漏过合并。fpseverity-judgerust-review-fp-judge.md对每个 primary 给出fp_verdictTRUE_POSITIVE/LIKELY_TP/LIKELY_FP/FALSE_POSITIVE/OUT_OF_SCOPE幸存者再分配severity/attack_vector/exploitability。威胁模型规则在此起决定性作用REMOTE下仅能通过本地配置触发的比较缺陷判OUT_OF_SCOPELOCAL_UNPRIVILEGED下不跨越权限边界的比较问题判LIKELY_FP。严重度评估同样强调相对性——同一路径混淆在REMOTE下可能是 HIGH 的认证绕过在LOCAL_UNPRIVILEGED下则显著降级。报告产出REPORT.md按severity_filter渲染REPORT.sarif由 generate_sarif.py 幂等生成。使用前提与边界本文描述的 STRCMP finder 是 rust-review 插件审计流水线的一部分。完整审计通过/rust-review:rust-review命令触发需要先收集威胁模型REMOTE/LOCAL_UNPRIVILEGED/BOTH、worker 模型与严重度过滤参数并依赖uv运行 build_run_plan.py 生成执行计划。需要说明的边界依据 README.md纯 C/C 代码库请改用c-reviewSolana/NEAR/Ink 智能合约请使用专门的合约扫描技能密钥内存零化类问题Zeroize 等不在 rust-review 覆盖范围应使用zeroize-audit技能。小结STRCMP 是 Rust 审计中典型的逻辑正确性陷阱编译器不拦截、静态 lint 难覆盖却可能直接导致认证绕过与路径混淆。围绕 string-comparison-finder.md 这一 finder 文档你可以完整复现其判定逻辑——先用starts_with/ends_with/contains与大小写折叠种子的两路搜索建立候选清单再以安全门控 谓词/口径不当两道门槛过滤用三类 FP 规则排除噪声最终以/.eq()全等比较与统一大小写归一化完成修复。配合 rust-review 的覆盖门控与双 judge 流水线这一缺陷类别能够在每次审计中被稳定、可复现地识别和裁决。赞分享AI 技能AI 插件应用安全网络安全AI 评测【免费下载链接】skillsTrail of Bits Claude Code skills for security research, vulnerability detection, and audit workflows项目地址https://gitcode.com/gh_mirrors/skills8/skills点击查看免费下载相关推荐Rust 安全审计 finder 实战pointer-exposure-finder 如何检测泄漏内存地址并识别 ASLR 绕过风险Rust 安全审计 finder 实战pointer exposure finder 如何检测泄漏内存地址并识别 ASLR 绕过风险 本文是 Trail ofAI 技能AI 插件应用安全网络安全AI 评测FontForge 中的 Bézier 样条三次与二次曲线的数学原理与双向转换指南FontForge 中的 Bézier 样条三次与二次曲线的数学原理与双向转换指南 Bézier 样条是字体轮廓的基础PostScript 与 TrueTyAI 技能AI 插件应用安全网络安全AI 评测Pixiv Fanbox下载器终极方案3步搞定创作者内容备份Pixiv Fanbox下载器终极方案3步搞定创作者内容备份 fanbox dl是一个高效的Pixiv Fanbox内容下载工具专为技术爱好者和创作者设计上一篇devops-exercises 实战从 Hello World 出发掌握 Bash 变量定义、echo 输出与重定向下一篇AI-Infra-Guard 红队侦察算子详解fingerprint_defense 如何用最小探针测绘目标防御画像创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考