원클릭으로
race-condition
竞态条件 / TOCTOU 检测 — 检测限量资源操作(优惠券领取、积分兑换、余额操作、限量抢购、状态切换)在并发请求下是否绕过业务限制;适用于检查-修改非原子的业务流程。
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
竞态条件 / TOCTOU 检测 — 检测限量资源操作(优惠券领取、积分兑换、余额操作、限量抢购、状态切换)在并发请求下是否绕过业务限制;适用于检查-修改非原子的业务流程。
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
白盒建模——一次深度建模产出五张共享模型:项目架构(技术栈/分层/框架自有封装/闭源依赖位置)、 入口点(路由/中间件信任边界)、认证与权限(会话/角色/多租户/归属字段)、业务(实体/流程状态机/ 业务不变量/高价值资产)、全局威胁(攻击面×漏洞类别的适用性映射,供下游逐一全测)。本能力不做漏洞判定,为后续 漏洞维度分析建立共享底图。
OS 命令注入综合检测——覆盖直接命令拼接 / shell 元字符 / 参数注入 / 间接 RCE,按回显 / 时间 / 带外通道分诊。 流量中参数值含主机名 / URL / 文件名 / 命令片段、响应里出现 shell 错误关键字(`/bin/sh` / `cmd.exe` / `command not found`)、注入 `sleep N` 耗时增加、上传后异步处理链路时使用。
文件上传多策略综合检测——覆盖扩展名 / MIME / 魔术数 / 解析漏洞 / 上传链组合(LFI / Zip Slip / SVG XSS / SVG XXE)。 流量含 multipart/form-data 上传、响应回显落盘路径、上传后文件可被 GET 解析、上传字段含 filename / path 可控时使用。
IDOR 水平越权检测 — 通过替换资源标识符(ID/UUID/路径)访问他人资源的风险;适用于用户资料、订单、文档、租户隔离场景。
检测路径穿越和本地文件包含(LFI)风险;当目标存在文件读取/下载/预览功能且含路径参数时触发;适用于文件下载、日志查看、模板加载等场景。
黑盒建模 — 迭代式攻击面建模,按站点级 / 页面级 / 功能级三粒度推进;进入新页面即触发一次页面级建模、切换新身份各刷新一次,产出端点账本与页面语义模型,为后续漏洞维度的适用性判断提供依据。
SOC 직업 분류 기준
| name | race-condition |
| description | 竞态条件 / TOCTOU 检测 — 检测限量资源操作(优惠券领取、积分兑换、余额操作、限量抢购、状态切换)在并发请求下是否绕过业务限制;适用于检查-修改非原子的业务流程。 |
| when-to-use | 当目标存在限量资源操作(优惠券领取、积分兑换、余额操作、限量抢购),并发请求可能绕过业务限制时 |
| allowed-tools | bash,read_file,list_files,rg |
| user-invocable | false |
竞态条件成因:source(并发请求)→ sink(共享资源:库存 / 余额 / 限量优惠 / 数量字段 / 状态机)。"检查→执行"两步非原子,多并发请求都通过检查后才写入,业务命名不可作筛选——无论端点叫"优惠券领取"、"余额扣减"、"积分兑换"、"限量抢购"、"状态切换"、"一次性 token 使用",sink 语义都是"对共享有限资源做检查-修改",属同一范围。详见同根目录 pentest/web-security-testing/SKILL.md 漏洞成因图谱 · 竞态条件 / TOCTOU 行(不在本 skill 重复成因)。
关键 sink 形态:服务端在"读取当前状态 → 校验是否允许 → 写入新状态"三步中,未用原子操作(事务 + 行锁 / CAS / 唯一约束 / 分布式锁)保证,导致并发请求可在同一窗口都通过检查、都执行写入——产生超卖、超发、透支、状态错乱等真实业务损失。
以下是已知的常见竞态触发线索,作为基线起点而非必检硬清单。结合目标代码与上下文动态调整:
[x] done[-] n/a (原因),原因要具体到代码事实[+] added (来源)基线触发线索按"sink 语义"分类(不按业务命名):
pending→paid / pending→cancel、审批 submit→approve 等单向状态切换if balance >= amount { balance -= amount } / if claimed == 0 { insert claim record } / SELECT stock FROM ... ; UPDATE stock = stock - 1 非事务 / 无行锁形态加载本 skill 时按这些问题思考:
UPDATE ... WHERE state=X 这类 CAS 形态?common/closure-verification.md 的《破坏性 / 不可逆动作的闭环边界》执行——改走非破坏差分,做不到就停 suspected,不得靠破坏真实业务数据来闭环。识别存在"检查 → 执行"两步模式的业务操作:
pending)使用以下策略发送并发请求:
并发操作须在自有哨兵资源上进行。若证明 confirmed 必然不可逆破坏真实/共享数据(如真实库存超卖、他人资源被毁),按
common/closure-verification.md《破坏性 / 不可逆动作的闭环边界》改走非破坏差分,做不到则降suspected,不得靠破坏真实数据闭环。
SELECT count FROM claim WHERE user_id=? AND coupon_id=? → if 0 → INSERT claim ...,两步无事务、claim 表无 UNIQUE(user_id, coupon_id) 约束,可并发多领(coupon-claim-check-then-insert-race)SELECT balance FROM wallet WHERE uid=? → if balance >= amount → UPDATE wallet SET balance=balance-? WHERE uid=?,应用层判断 + 后续 update,可并发透支至负数(balance-deduct-select-then-update-race)SELECT stock FROM sku WHERE id=? → if stock > 0 → UPDATE sku SET stock=stock-1,未使用 UPDATE ... WHERE stock > 0 这类原子条件,并发可超卖(stock-decrement-non-atomic-oversell-race)SELECT status FROM order WHERE id=? → if status='pending' → UPDATE order SET status='paid',未使用 UPDATE ... WHERE status='pending',可被并发两次切换(state-transition-non-atomic-double-spend-race)以下是竞态维度的典型窄化误判:
SELECT ... FOR UPDATE 或 UPDATE ... WHERE <条件> 这类持锁 / 原子 CAS 才真正消除窗口。为什么这里是「必须」:反例义务属于交付契约——"该子系统竞态已防护"结论是覆盖完整性的产物声明,缺失反向验证清单会让下游误信"该维度全站安全"。
写"未发现竞态 / TOCTOU"或"已防护"前,产物必须包含:
清单不完整 → 结论降级为 partial-coverage 并显式声明未覆盖范围。
特别警示:只测了"优惠券领取"而未覆盖"余额扣减 / 库存 / 状态机切换"等其他限量资源,不能下"全站无竞态"结论。
通用闭环口径见同根目录 common/closure-verification.md(技能表 path 列同一抽取根下,需要时 read_file 读取)。核心:结论须形成「输入 → 处理 → 真实危害 → 可复核证据」完整证据链;仅凭"多个请求返回 200"等中间信号最多判 suspected,证明实际业务状态发生了超出预期的变化(余额负值 / 多领 / 超卖 / 状态错乱)才判 confirmed。本漏洞特有要点:
common/closure-verification.md《破坏性 / 不可逆动作的闭环边界》——优先自有哨兵资源或非破坏差分,做不到则降 suspected。| 现象 | 判定 |
|---|---|
| 并发请求导致业务状态超出预期(余额透支、多领、超卖、状态错乱),通过回读确认 | confirmed |
| 多个请求返回成功但无法确认实际业务影响(如无法回读状态 / 区分幂等) | suspected |
| 并发请求仅有一个成功或业务状态正常(正确的原子操作) | not vulnerable |
| 只测了部分子系统 / 部分限量资源 / 部分并发策略 | partial-coverage(不得宣称 safe) |
上表 confirmed 若需不可逆破坏真实/共享数据才能证明,按
common/closure-verification.md《破坏性 / 不可逆动作的闭环边界》——优先自有哨兵或非破坏差分,做不到则降suspected。
SELECT ... FOR UPDATE)保证检查与写入原子。UPDATE ... SET stock=stock-1 WHERE id=? AND stock>0 这类原子条件。UNIQUE(user_id, coupon_id))防止重复领取。UPDATE ... SET status='paid' WHERE id=? AND status='pending' 并检查 affected rows。UPDATE ... SET balance=balance-? WHERE balance>=?,避免应用层判断后写入。