CVE-2026-31402Linux内核NFSv4.0重放缓存中存在堆溢出漏洞。由于重放缓存缓冲区大小固定(112字节),无法容纳包含超长所有者字段的LOCK拒绝响应(最大1024字节),导致越界写入。未经认证的攻击者可利用此漏洞远程破坏内核内存,造成系统崩溃或潜在的代码执行。
该漏洞源于Linux内核nfsd模块在处理NFSv4.0协议时的逻辑缺陷。NFSv4.0的重放缓存机制使用固定大小(112字节)的rp_ibuf缓冲区来存储编码的响应,该大小仅适配OPEN响应。然而,当处理LOCK操作的拒绝响应时,响应中包含冲突锁的所有者信息,这是一个可变长度字段,最大可达1024字节(NFS4_OPAQUE_LIMIT)。在nfsd4_encode_operation函数中,代码通过read_bytes_from_xdr_buf将响应复制到重放缓冲区,且未进行长度校验。如果响应数据超过112字节,就会发生堆越界写入,覆盖相邻的堆内存。攻击者可通过两个协作的客户端,先设置一个包含超长所有者字符串的锁,然后请求冲突锁触发拒绝,从而远程触发该溢出,导致内核内存损坏或潜在的权限提升。