跳到主要内容

Linux Kernel 竞态条件漏洞 CVE-2026-31431 深度分析

· 阅读需 2 分钟

近期,Linux 内核子系统中发现一处高危竞态条件漏洞,影响 6.x 系列内核多个版本。攻击者可利用 io_uring 与文件系统操作之间的 TOCTOU 竞态,实现本地提权。

漏洞概述

该漏洞编号为 CVE-2026-31431(CVSS 8.8),存在于 fs/io_uring.cio_closeatopenat 的并发执行路径。当两个线程分别对同一文件描述符执行关闭和重命名操作时,内核未正确持锁保护 inode 引用计数,可导致 use-after-free 条件。

技术细节

// 简化触发路径
Thread A: io_closeat(fd) → iput(inode) → inode 引用计数归零
Thread B: renameat2(...) → inode 重绑定 → 访问已释放的 inode

竞态窗口约 3-5ms,在多核环境下可稳定复现。研究团队通过自定义 Fuzzer 在 72 小时内检测到该漏洞。

影响范围

  • Linux Kernel 6.1 - 6.12(已确认)
  • Android Common Kernel 6.1
  • 部分发行版回溯版本

修复状态

上游补丁已提交至 stable@vger.kernel.org,通过在 io_closeat 路径中增加 inode_lock 实现互斥保护。

参考文献

  1. Linux Kernel Mailing List, "[PATCH] io_uring: fix race in closeat path", 2026-04
  2. NIST NVD, CVE-2026-31431 Detail
  3. Google Project Zero, "Race Conditions in io_uring", 2026