CVE-2026-43366Linux内核中的io_uring组件存在一个安全漏洞,主要涉及内核缓冲区的回收机制。该漏洞源于在缓冲区被获取和可能被回收之间存在一个时间间隙。在此期间,如果缓冲区列表为空,系统可能会将其类型升级为ring provided类型。这种情况通常发生在请求通过io-wq强制执行时。由于旧的回收逻辑缺少对缓冲区列表是否仍然存在以及类型是否正确的检查,导致可能发生类型混淆或内存破坏。本地攻击者可利用此漏洞导致系统崩溃或潜在的提升权限。
该漏洞位于Linux内核的`io_uring/kbuf`模块中,核心问题在于对缓冲区列表状态管理的逻辑缺陷。当I/O请求通过`io-wq`(内核工作队列)处理时,可能会触发缓冲区列表的升级操作(从legacy模式升级到ring provided模式)。
漏洞利用窗口在于:当一个缓冲区被引用后,在其被回收之前,如果列表为空,内核可能会改变列表的类型。然而,`io_kbuf_recycle_legacy`函数在执行回收操作时,并未重新检查目标缓冲区列表的有效性及其当前类型。这导致代码可能将一个已经升级为ring provided类型的缓冲区当作legacy类型来处理,进而引发内核态的内存破坏,如释放后重用(UAF)或类型混淆。
攻击者可以通过构造特定的I/O请求序列,利用多线程或异步操作触发该竞态条件,从而破坏内核内存完整性。