CVE-2025-39962CVE-2025-39962是Linux内核rxrpc(远程过程调用)子系统中的一个高危安全漏洞。该漏洞位于net/rxrpc/rxgk_app.c文件的rxgk_yfs_decode_ticket()函数中,由Smatch静态分析工具检测到。漏洞本质上是未受信任的未签名减法操作(untrusted unsigned subtract),具体表现为'ticket_len - 10 * 4'操作中未对ticket_len进行充分的长度校验。当传入的ticket_len值小于40(10*4)时,由于是无符号整数减法操作,结果将发生整数下溢,产生一个巨大的正值,可能导致后续的内存拷贝、缓冲区访问等操作越界,从而引发内存损坏。该漏洞的CVSS评分为7.8,属于高危级别,攻击者需要本地低权限访问即可利用,无需用户交互,可能造成高机密性影响、高完整性影响和高可用性影响。漏洞影响Linux内核的rxrpc模块,该模块用于支持AF_RXRPC套接字通信协议,主要用于与AFS(Andrew File System)分布式文件系统进行通信。
该漏洞的技术原理涉及rxrpc协议中RXGK(RxRPC GSSAPI/Kerberos)安全机制的票证解码过程。在rxgk_yfs_decode_ticket()函数中,代码尝试从网络接收的票证(ticket)中提取特定字段,执行类似'ticket_len - 10 * 4'的减法运算来计算可用数据长度。问题在于ticket_len来源于网络数据,属于不可信输入。当恶意构造的ticket_len值小于40(10*4)时,由于C语言中无符号整数的减法运算特性,结果不会变为负数而是发生整数环绕(wrap around),产生一个接近UINT_MAX的巨大正值。攻击者可通过发送精心构造的RXGK响应包触发此漏洞。后续代码若使用该下溢后的长度值进行memcpy、memmove或数组索引等操作,将导致缓冲区溢出或越界读取,可能造成内核崩溃(拒绝服务)或权限提升(本地提权)。修复方案是在执行减法前增加对ticket_len长度的预检查,确保其不小于所需提取的字段总长度,同时使用sizeof()结构体替代硬编码数值以保持代码一致性。