CVE-2026-22999CVE-2026-22999是Linux内核中net/sched模块的sch_qfq(Quick Fair Queueing)队列调度器存在的一个高危内存安全漏洞。该漏洞位于qfq_change_class()函数中,由于在错误处理路径中对已分配资源的错误释放,导致潜在的释放后重用(Use-After-Free,UAF)问题。攻击者可通过本地低权限访问触发该漏洞,造成内存破坏,进而可能实现权限提升或系统崩溃。在Linux内核的网络流量控制子系统(Traffic Control)中,sch_qfq负责实现公平队列调度算法,当系统配置QFQ队列调度策略时,攻击者可通过精心构造的netlink消息触发qfq_change_class()函数的错误处理路径,访问已被释放的内核内存对象,绕过安全检查执行任意代码或导致系统不稳定。CVSS评分7.8,属于高危漏洞,无需用户交互即可本地利用,对系统机密性、完整性和可用性均造成严重影响。
漏洞根因在于qfq_change_class()函数的资源管理逻辑缺陷。当该函数尝试修改已存在的QFQ类时,如果分配新类或qdisc失败,错误处理代码会不当释放cl->qdisc和cl本身。然而,这些资源可能已经在函数早期被分配并使用,导致在某些执行路径下出现双重释放或UAF。具体问题分析:1) 函数在错误路径中无条件调用qdisc_put()释放cl->qdisc,但该qdisc可能已被其他代码引用;2) cl指针在释放后未被置NULL,后续代码可能继续访问;3) 在多线程或并发netlink消息处理场景下,释放的内存可能被重新分配给其他数据结构,攻击者可利用时间窗口进行UAF利用。攻击者可通过发送特制netlink消息(RTM_NEWTCF)触发QFQ类的修改操作,利用内核模块的内存管理漏洞实现本地权限提升。修复方案需确保cl->qdisc和cl仅在确实分配了新资源时才释放,并添加适当的空指针检查。