CVE-2025-39963CVE-2025-39963是Linux内核io_uring子系统中发现的一个高危安全漏洞。该漏洞位于io_link_skb函数中,由于代码中存在错误的变量引用,导致prev_notif变量被错误地使用nd(当前通知描述符)而非正确的prev_nd(前一通知描述符)进行赋值。这一逻辑错误使得上下文验证检查将当前通知与自身进行比较,而非与前一通知进行正确比较,从而绕过了预期的安全检查机制。io_uring是Linux内核中用于高性能异步I/O操作的子系统,自5.1版本引入以来被广泛应用于各种高性能场景。该漏洞的CVSS评分为7.8,属于高危级别,攻击者需要本地低权限访问即可利用,无需用户交互,成功利用后可能导致机密性、完整性和可用性均受到高影响。攻击者可利用此漏洞绕过内核中的安全检查机制,可能导致权限提升、信息泄露或系统不稳定等问题。该漏洞已在2025年10月9日公开披露,并提供了多个稳定版本的修复补丁。
该漏洞的技术根源在于io_uring子系统的io_link_skb函数中的变量引用错误。在正常逻辑中,该函数需要将当前通知描述符(nd)与前一个通知描述符(prev_nd)进行链接,并验证两者之间的上下文关系。正确的实现应当通过prev_nd参数获取前一个通知的引用(prev_notif),然后与当前通知进行上下文一致性检查。然而,由于开发者的笔误,代码错误地使用了nd而非prev_nd来获取prev_notif,这导致以下问题:1)prev_notif实际上指向的是当前通知本身,而非前一个通知;2)后续的上下文验证检查变成了当前通知与自身的比较,而非与前一通知的比较;3)这种自我比较始终为真,绕过了所有上下文验证逻辑。攻击者可以通过精心构造io_uring操作序列,利用这一被绕过的检查机制,触发未定义行为或安全违规。修复方案非常简单:将获取prev_notif的参数从nd更正为prev_nd即可。该漏洞的利用需要本地访问权限和低权限用户身份,攻击者可利用io_uring系统调用接口触发该缺陷。