SuperAPI AI 工具集

competition-race-condition-state-drift

测试与质量

查看项目

更新于 10-16 06:59

技能介绍

用途

本技能是 ctf-sandbox-orchestrator 的下游专项技能,仅应在该上游技能已激活、并且已经建立沙箱假设、节点归属与证据优先级之后使用。如果这些前提尚未满足,应先回到 $ctf-sandbox-orchestrator。

当决定性行为取决于请求时序、异步顺序、锁缺口或状态陈旧时,使用本技能。它面向的典型问题包括:竞态窗口(race windows)、排序缺陷(ordering bugs)、幂等性失效(idempotency failures)、锁缺口(lock gaps)以及并发写入冲突。

除非用户明确要求英文,回复应使用简体中文。

主要能力

该技能围绕可变状态的竞态分析展开,核心能力包括:

  • 识别可变状态:优先定位数据库行、缓存键、队列载荷、会话字段、计数器或文件等可被并发修改的对象。
  • 确定并发边界:记录事务范围、锁行为、重试逻辑、幂等键、缓存失效与队列交接。
  • 复现时序窗口:使用受控延迟、重复请求或重排的工作线程执行,构造确定性的并发输入。
  • 追踪分步边界:分别追踪读取、检查、写入、入队与提交(commit)的边界。
  • 证明状态漂移:从干净重置出发,证明最终状态漂移的存在。

使用方式

该技能定义了一套三步工作流:

1. 映射可变边界

记录事务范围、锁行为、重试逻辑、幂等键、缓存失效和队列交接;标注读取-检查-写入(read-check-write)在哪些请求、工作线程或服务之间被拆分;保持每个边界都与精确时间戳或序列号绑定。

2. 复现时序窗口

使用受控延迟、重复请求或重排的工作线程执行,构建确定性的并发输入;在相同载荷下比较被接受与被拒绝的路径;记录在顺序变化时哪个条件发生翻转。

3. 压缩为决定性竞争链

将问题压缩为:请求 A 与 B 的顺序 -> 陈旧的检查或锁缺口 -> 冲突的写入 -> 由此产生的能力或产物。说明根因是缺失锁、弱幂等、陈旧缓存读、延迟异步提交,还是重试副作用。如果路径以队列为主导,则移交给队列工作线程漂移(queue worker drift)技能处理。

此外,技能要求先建立基线:一次基线运行和一次竞争运行,两者之间只改变一个变量。相关资料位于 references/race-condition-state-drift.md,其中包含竞争测试框架思路、证据块与一致性检查方法。

适用场景

  • 需要判断某个缺陷是否由请求时序或异步顺序引发的场景。
  • 涉及锁缺口、幂等性失败或并发写入冲突的排查。
  • 涉及陈旧状态(stale state)读取导致的最终状态不一致。
  • 作为 CTF 沙箱流程中已激活上游编排技能后的下游专项分析步骤。

需要保留的内容

  • 可变键、事务边界、锁行为与幂等标记。
  • 基线与竞争运行的带时间戳或带序列号的追踪记录。
  • 一个最小、可重放的并发序列以证明状态漂移。

限制与前提

  • 必须以上游 ctf-sandbox-orchestrator 已激活为前提,否则不应直接使用。
  • 若竞争路径以队列为主导,需移交给队列工作线程漂移技能。
  • 关于该技能的具体定价、收费方式、支持平台或集成环境,当前资料暂未提供。