CVE-2026-31402
nfsd:修复 NFSv4.0 LOCK 重放缓存中的堆溢出漏洞
- 已发布
- 2026年4月3日
- 已更新
- 2026年9月8日
- 分配 CNA
- Linux
- 观察到的证据
- 2026年8月19日
初级CVSS
nvd · CVSS 3.1
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H低 · 未来 30 天
- 百分位
- 59.2%
- 型号日期
- 2026年9月21日
EPSS 是统计估计,而不是确定性或影响衡量标准。将其与 CVSS、KEV 状态、暴露程度和您的环境相结合。
总结
在 Linux 内核中,已解决以下漏洞:nfsd:修复 NFSv4.0 LOCK 重放缓存中的堆溢出问题 NFSv4.0 重放缓存使用一个固定的 112 字节内联缓冲区(rp_ibuf[NFSD4_REPLAY_ISIZE])来存储编码后的操作响应。该大小是基于 OPEN 响应计算得出的,并未考虑 LOCK 拒绝响应,后者包含冲突锁拥有者这一可变长度字段,其长度最多可达 1024 字节(NFS4_OPAQUE_LIMIT)。当 LOCK 操作因与现有锁(拥有者名称较长)发生冲突而被拒绝时,nfsd4_encode_operation() 会通过 read_bytes_from_xdr_buf() 将完整编码后的响应复制到过小的重放缓冲区中,且未进行边界检查。这会导致缓冲区末尾之外发生最多 944 字节的 slab 越界写入,从而破坏相邻的堆内存。 未认证的攻击者可通过两个相互配合的 NFSv4.0 客户端远程触发此问题:一个客户端设置一个拥有者字符串较长的锁,然后另一个客户端请求一个冲突的锁以引发拒绝响应。 我们可以通过增大 NFSD4_REPLAY_ISIZE 以容纳完整的 opaque 字段来修复此问题,但这会增加每个 stateowner 的大小,而大多数 lockowner 并没有那么大。因此,我们改为在将编码后的响应复制到重放缓冲区之前,检查其长度是否超过 NFSD4_REPLAY_ISIZE。如果响应过大,则将 rp_buflen 设置为 0,以跳过对重放负载的缓存。状态仍会被缓存,且客户端已在原始请求中收到了正确的响应。
来源
1CVE-2026-31402
负责任的使用
仅在您拥有或有权测试的系统上使用漏洞信息。 Kitploit 链接到公共研究元数据,并且不存储漏洞代码或恶意负载。