漏洞
TOCTOU 漏洞
别称: TOCTTOU, 检查与使用
定义
检查到使用之间发生的竞态条件:安全决策所检查的状态在对应动作执行之前被改变。
TOCTOU 漏洞(Time-Of-Check to Time-Of-Use,CWE-367)是一种特定的竞态条件:程序先检查某项资源属性(所有者、权限、内容),再像检查仍然成立那样对该资源进行操作。若攻击者能在两步之间替换该资源(典型手段是符号链接、重命名或共享内存),即可完全绕过检查。经典案例是 access() 后跟 open():攻击者在 access() 返回成功后,将路径替换为指向 /etc/shadow 的符号链接。防御措施包括使用将检查与使用合二为一的文件系统 API(带 O_NOFOLLOW 的 openat、fstat)、持有文件描述符而非路径、文件锁,以及更严格的沙箱边界。
示例
- 通过 stat() 检查文件所有者后再打开路径的 setuid 程序。
- 针对绑定挂载路径的 TOCTOU 容器逃逸。