Agent Skills
返回列表
🔒

攻击性 TOCTOU 竞态

IT 运维与安全 更新于 2026.08.29

将以下提示词粘贴到你的 AI 对话框中:

请根据 https://skillhub.cn/install/skillhub.md,安装 @user_3c6cb52e/offensive-toctou-lr-cacv。

技能介绍

问题:被忽略的时间窗口

当代码先检查属性(如文件所有者、路径目标、令牌有效性)再基于该假设执行操作时,就形成了 TOCTOU(Time-of-Check / Time-of-Use)漏洞。攻击者只需在检查与使用的间隙替换底层对象,即可绕过安全校验。例如,程序检查 /etc/passwd 是 root 所有后才执行写操作,攻击者可在两行代码之间用 mv 替换文件路径指向的符号链接。

核心能力与关键步骤

  • 定位检查点与使用点:扫描代码中的 open()、stat()、fstat() 等系统调用,以及后续依赖该检查结果的特权操作(如 write()、execve())。
  • 确认对象分离:验证检查与使用是否操作同一内核对象(如文件描述符 FD 或 inode),若不同则存在替换空间。
  • 构建替换原语:通过 symlink 替换路径、mount 重定向挂载点、mv 移动文件,或发送并行请求覆盖内存状态。
  • 拉长窗口:利用 FUSE 文件系统、慢速存储设备、调度器抢占或 single-packet HTTP/2 等技术延长检查到使用的间隔。
  • 循环验证:运行紧密循环触发竞态,确认操作后的系统状态与替换目标一致(如成功写入恶意文件)。

适用边界与注意点

  • 适用于存在明确 check-use 分离的系统,如文件操作、权限验证、资源分配场景。
  • 需确认内核对象可被替换(如文件路径可被 symlink 劫持,而已打开的 FD 不可)。
  • 拉长窗口的技术受系统限制(如 FUSE 需要内核支持,HTTP/2 仅适用于网络服务)。
  • 竞态成功率与系统负载相关,高并发环境下需调整循环次数与等待策略。

使用场景

  • 当程序先检查文件权限再执行操作时,构造符号链接在检查后替换目标文件
  • 对文件系统操作做安全审计时,验证检查与使用是否操作同一 inode
  • 在慢速网络服务中利用 HTTP/2 单包请求拉长 TOCTOU 窗口并替换令牌
  • 对使用 FUSE 的系统测试调度器抢占能否延长检查到使用的间隔

适合人员

  • 底层系统开发工程师,需要排查文件描述符与 inode 不一致导致的漏洞
  • 安全审计人员,在代码审查中定位 TOCTOU 竞态风险点
  • 文件系统维护工程师,设计防替换机制时评估攻击路径
  • 并发服务开发者,编写高负载下竞态触发测试脚本