Claude-Red TOCTOU竞态:二进制、内核、Web到容器的完整攻击路径
【免费下载链接】Claude-Redclaude-red is a curated library of offensive security skills designed for the Claude skills system. Each skill is a structured SKILL.md file that primes Claude with expert-level methodology for a specific attack surface — from SQLi to shellcode, EDR evasion to exploit development.项目地址: https://gitcode.com/GitHub_Trending/cl/Claude-Red
Claude-Red是一个面向 AI 的渗透测试技能库,其中的TOCTOU 竞态条件技能(offensive-toctou)完整覆盖了从文件系统、内核、Web API 到容器逃逸的"检查-使用"(Time-of-Check / Time-of-Use)攻击路径。本文带你以新手视角理解这类漏洞的原理、放大竞态窗口的手法,以及它在真实 CVE 中的应用。
什么是 TOCTOU?一个新手就能懂的"时间差"漏洞
TOCTOU 的全称是Time-of-Check to Time-of-Use(检查时到使用时)。它的本质极其简单:
- 程序先检查某个属性——文件归谁所有?余额够不够?Token 是否有效?
- 然后基于检查结果采取行动——写入文件、扣款、放行请求。
- 问题在于:检查和行动之间存在一个时间窗口,攻击者只需在这个窗口里把底层对象换掉,检查结果就"失效"了。
用生活化的比喻:你先确认门口保安在(检查),转身开门(使用)——但如果你确认的瞬间和开门的瞬间之间,保安恰好下班了,门就白守了。
技能库给出的核心判断标准只有一句话:只要检查和使用操作的不是同一个内核对象(文件描述符、inode、原子快照),就可能存在 TOCTOU。
📌 技能文件中定义的标准工作流见 SKILL.md 的 Quick Workflow 部分:定位检查点与使用点 → 确认两者不共享同一对象 → 构造替换原语 → 放大窗口 → 紧循环验证。
如何加载这个技能到 Claude
Claude-Red 的每个技能都是一个结构化的SKILL.md文件,按需加载、不占上下文。获取仓库:
git clone https://gitcode.com/GitHub_Trending/cl/Claude-Red ~/.claude/skills/claude-red也可以只安装单个分类(如利用开发类),或直接运行安装脚本 install.sh:
./install.sh --category exploit-dev当你和 Claude 的对话中涉及 "TOCTOU"、"race condition"、"竞态" 等触发词时,offensive-toctou 技能会自动进入上下文,Claude 就会像一个熟悉该领域的红队专家一样带你排查。Web 侧的竞态测试则由 offensive-race-condition 技能覆盖,两个技能互为补充。
文件系统竞态:经典的符号链接交换
文件系统中 TOCTOU 的经典形态是符号链接交换:
- 特权程序先
access(path)检查路径(用你的身份解析) - 再
open(path)打开它(用 root 身份重新解析) - 攻击者在两步之间把
path替换成指向/etc/shadow的符号链接
检查时看到的是"攻击者拥有的普通文件",打开的却是系统的影子文件——以 root 权限写入。
技能库还收录了更进阶的原语:
- renameat2(RENAME_EXCHANGE):Linux 3.15+ 的原子单帧交换,配合慢文件系统可做到近乎确定性
- 目录交换:把
parent/file中的parent整个换掉 - 挂载命名空间交换:在用户命名空间中 bind mount,是多条 runc 容器逃逸链的基础
🔍 一个实用技巧:审查 setuid 二进制时,"在系统调用跟踪中出现两次的路径都是 TOCTOU 候选点"。
放大竞态窗口:让"时间差"变大
竞态理论上永远可赢,实践中的难点是窗口太小。技能文件专门有一节 "Window-Widening Primitives"(窗口放大原语),这是整个方法论里最有价值的一部分:
| 技术 | 原理 | 适用场景 |
|---|---|---|
| FUSE 慢文件系统 | 挂一个你自己控制的 FUSE,stat/open时人为睡 5 秒 | 文件系统竞态 |
| userfaultfd | 在内核页错误处理中暂停copy_from_user | 内核双重获取 |
| Cgroup 冻结 | cgroup.freeze直接暂停受害进程 | 本地特权场景 |
| 单核绑定 | 把竞争线程钉在同一 CPU,上下文切换成为唯一推进单位 | 通用 |
| HTTP/2 单包攻击 | 多个请求挤进同一个 TCP 段,毫秒以下偏斜 | Web 竞态 |
换句话说:"1 万分之一概率的竞态"加上窗口放大原语后,就等于"确定性竞态"——这也是漏洞报告严重性评估的关键依据。
内核层:双重获取与 /proc 竞态
内核态的 TOCTOU 主要体现为双重获取(Double-Fetch):内核函数两次读取同一块用户态内存,攻击者在两次读取之间悄悄改掉数据。技能文件给出了检测工具链:KFENCE、DECAF、syzkaller 等模糊测试与静态分析工具。
/proc文件系统则是另一条高危路径:
/proc/pid/exe是"魔法符号链接",在解引用时才解析——这正是 CVE-2019-5736(runc 容器逃逸)的底层机制/proc/pid/root的跨命名空间解引用是容器环境中反复出现的漏洞类型/proc/pid/mem在老版本内核上可绕过写保护
容器逃逸:TOCTOU 如何打穿 runc
技能文件列举了容器场景下两条著名的 TOCTOU 攻击路径:
- CVE-2019-5736(runc):容器运行
docker exec时,宿主机 runc 从容器内打开/proc/self/exe并写回——攻击者把容器内的 runc 换成指向/proc/self/exe的符号链接,宿主机 runc 就重写了它自己 → 主机 RCE。 - CVE-2024-21626("Leaky Vessels"):工作目录文件描述符泄漏,容器首个进程持有宿主机 FD,命名空间设置期间的竞态让它能对宿主机路径下手。
此外还有挂载符号链接竞态:容器运行时解析 bind-mount 路径时,攻击者快速把路径中的目录换成指向/的符号链接——这在 Kubernetes hostPath、Docker volume、OpenShift SCC 绕过中都很常见。
Web 竞态:单包 HTTP/2 与现代测试原语
Web 端的 TOCTOU 在 offensive-race-condition 技能中有系统化的测试方法,核心场景包括:
- 💰余额/限额竞态:并发的"先检查余额再扣款"是典型的非原子读-改-写,修复方式是用带约束的原子更新
- 🎫幂等键复用:很多实现只用 Key 去重而不校验 body 哈希,相同 Key + 不同金额就能让第二笔扣款借用第一笔的成功响应
- 🔑网关认证 vs 服务鉴权分离:JWT 在网关缓存窗口内被吊销,服务仍信任转发头 → 吊销后仍可访问
- ⏱️长任务鉴权跳过复查:导出进行到一半时权限被收回,数据流仍继续
2023 年之后 Web 竞态的标准武器是单包多请求(Single-Packet Attack):把 N 个请求的 DATA 帧攒在一起、末尾字节同步发出,服务端以亚毫秒级偏斜并发调度——这比传统多线程并发可靠得多。Burp Repeater / Turbo Intruder 已内置该功能。
offensive-race-condition 技能文件 中还整理了 GitHub、Docker、PayPal、Shopify 等真实 CVE 与赏金案例,以及数据库隔离级别、WebSocket、Serverless 函数等进阶场景。
检测与报告:找到漏洞只是开始
技能文件给出了一张分层的检测工具表:
| 层级 | 工具 | 用途 |
|---|---|---|
| Linux 系统调用 | strace -e trace=file -f | 发现重复解析的路径 |
| 内核 | bpftrace/bcc | 大规模探测特定系统调用 |
| 用户态 C/C++ | ThreadSanitizer、Helgrind | 编译期/运行时线程竞态检测 |
| 内核双重获取 | Bochspwn-Reloaded、syzkaller | 模糊测试与分析 |
| Web/HTTP | Burp(单包模式)、Turbo Intruder、racepwn | 并发请求竞态 |
而一份合格的 TOCTOU 报告必须包含四要素(这也是 offensive-reporting 技能的通用要求):最小复现步骤、使用的窗口放大原语、观测到的成功率、利用后获得的原语。
总结:一条从二进制到容器的完整攻击路径
Claude-Red 的 TOCTOU 技能把"同一类漏洞、不同载体"这件事讲得格外清楚:
符号链接交换(文件)→ 双重获取(内核)→ /proc 魔法链接(容器)→ 单包并发(Web),攻击者要做的永远是同一件事:在检查和使用的缝隙里,换掉底层对象,并把缝隙撑大到能钻过去。
如果你是刚开始接触安全研究的新手,建议的阅读顺序是:
- 先读 offensive-toctou 的 "The Core Pattern" 与 "Window-Widening Primitives" 两节,建立心智模型
- 再读 offensive-race-condition 的 Hunt 部分,掌握 Web 侧的可操作测试流程
- 结合 MINDMAP.md 找到相关技能(如 fuzzing/offensive-vuln-classes)拓展漏洞分类知识
- 关注 CHANGELOG.md 追踪技能库的更新节奏
⚠️ 以上方法仅适用于已获授权的红队评估、CTF 演练与安全研究场景。
【免费下载链接】Claude-Redclaude-red is a curated library of offensive security skills designed for the Claude skills system. Each skill is a structured SKILL.md file that primes Claude with expert-level methodology for a specific attack surface — from SQLi to shellcode, EDR evasion to exploit development.项目地址: https://gitcode.com/GitHub_Trending/cl/Claude-Red
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考