IPBUF安全漏洞报告
English
CVE-2026-31638 CVSS 7.5 高危

CVE-2026-31638 Linux内核rxrpc拒绝服务漏洞

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

漏洞信息

漏洞编号
CVE-2026-31638
漏洞类型
拒绝服务
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Linux Kernel

相关标签

Linux Kernel拒绝服务rxrpc空指针引用内核崩溃

漏洞概述

Linux内核中的rxrpc协议处理模块存在一个严重的拒绝服务漏洞。该漏洞发生在`rxrpc_input_packet_on_conn`函数处理客户端数据包的过程中。当通道上的当前客户端调用已被拆除,导致`chan->call`为空指针时,`rxrpc_try_get_call`函数会返回获取失败。然而,随后的错误处理路径未对该返回值进行有效性检查,仍然无条件地调用了`rxrpc_put_call`函数。这一逻辑错误触发了空指针解引用,将原本的协议错误处理转变为内核崩溃。远程攻击者无需用户交互或身份认证,即可通过发送特制网络数据包利用此漏洞,导致目标系统内核崩溃,从而造成服务中断。

技术细节

该漏洞的根源在于Linux内核`net/rxrpc`子系统中的引用计数管理逻辑错误。具体场景是,当`rxrpc_input_packet_on_conn()`函数正在处理发往客户端的数据包时,若该通道对应的调用对象已经被销毁,则`chan->call`指针为NULL。此时调用`rxrpc_try_get_call()`试图增加引用计数会返回NULL。根据正常的内核编程规范,调用者应当检查返回值,只有在成功获取引用时才进行后续操作。然而,存在缺陷的代码路径(客户端隐式结束错误路径)忽略了这一检查,直接执行了`rxrpc_put_call()`。由于传入的指针为NULL,该操作触发内核的空指针异常处理机制,进而导致系统崩溃(Kernel Panic)。攻击者可以通过网络向目标主机发送精心构造的恶意数据包,诱导系统进入该错误代码路径。由于CVSS评分为7.5,且无需认证(PR:N)和用户交互(UI:N),该漏洞易于利用且对系统可用性影响巨大(A:H)。

攻击链分析

STEP 1
侦察
攻击者识别出运行受影响Linux内核版本且启用了rxrpc服务的目标系统。
STEP 2
构造数据包
攻击者构造特制的网络数据包,该数据包旨在触发目标系统在特定连接通道上处理客户端逻辑。
STEP 3
发送攻击载荷
攻击者通过网络向目标发送恶意数据包,时机选择在通道调用被拆除之后(chan->call为NULL)。
STEP 4
触发漏洞
目标系统内核处理数据包时进入错误路径,由于缺少空指针检查,执行`rxrpc_put_call(NULL)`导致内核崩溃。
STEP 5
达成拒绝服务
系统发生Kernel Panic并重启或停止响应,导致服务不可用。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
/* * Conceptual PoC for CVE-2026-31638 * This snippet demonstrates the logic that triggers the kernel crash. * It requires a kernel environment with rxrpc enabled. */ #include <linux/module.h> #include <linux/net.h> // Simulated structures to represent the kernel internals struct rxrpc_call; struct rxrpc_channel { struct rxrpc_call *call; }; // Simulate the function that fails to get the call static inline struct rxrpc_call *rxrpc_try_get_call(struct rxrpc_call *call) { // In the vulnerable scenario, this returns NULL because the call is torn down return NULL; } // Simulate the function that puts the call (causes crash if NULL) static inline void rxrpc_put_call(struct rxrpc_call *call) { // Missing NULL check here in the vulnerable code leads to panic if (call == NULL) panic("CVE-2026-31638: NULL pointer dereference in rxrpc_put_call"); } void vulnerable_rxrpc_path(struct rxrpc_channel *chan) { struct rxrpc_call *call; // rxrpc_input_packet_on_conn logic call = rxrpc_try_get_call(chan->call); // Implicit-end error path // VULNERABILITY: The code does not check if 'call' is valid before dropping ref if (!call) { // This path is reached when processing a packet after teardown printk(KERN_INFO "Processing packet on torn down call...\n"); } // The actual vulnerable line in the kernel source: // rxrpc_put_call(call); // <--- Crashes here if call is NULL // To trigger the vulnerability, an attacker sends a packet that forces // this execution flow with chan->call == NULL. }

影响范围

Linux Kernel (Versions prior to commits 0c156aff, 6331f1b2, etc.)

防御指南

临时缓解措施
如果无法立即升级内核,建议通过防火墙规则限制对rxrpc相关端口的网络访问,或在系统中禁用rxrpc模块(如果业务不依赖该功能),以降低被攻击的风险。

参考链接

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