大家好,我是喻勇。
五一假期最后一天,明天又要重返工作岗位了。
想必大家这几天都看到了Linux Kernel本地权限提升漏洞(CVE-2026-31431)的新闻,该漏洞源于内核加密子系统中的一处逻辑缺陷,攻击者可以利用AF_ALG加密接口与splice() 系统调用的组合,向任意可读文件的页缓存写入受控的4字节数据,从而篡改 setuid 程序,无需竞争条件即可直接获得root权限。CVSS 3.1评分7.8(高危),由韩国Theori团队在 2026年4月29日公开披露。

漏洞源于2017年内核AEAD in-place优化引入的逻辑缺陷,AF_ALG加密接口与splice()零拷贝系统调用组合,可对任意可读文件页缓存实现4 字节可控越界写入。普通本地用户/ 容器内用户无需竞争条件,即可提权至root,支持容器逃逸、可篡改 su/sudo/passwd 等setid程序,跨发行版通用。漏洞利用复现示例:

也正因于此,CVE-2026-31431漏洞的影响范围,就包含2017年提交漏洞代码至2026年4月补丁发布前,覆盖 Linux 内核4.14~6.18.21、6.19.11等主流版本。也就是说,CVE-2026-31431漏洞的引入范围是 4.14至6.18.21/6.19.11的所有内核版本。
| 4.14 以下 | ||
| 4.14 至 6.18.21 | ||
| 6.18.22 及以上 | a664bf3d603d 已合入 | |
| 6.19.12 及以上 | ||
| 7.0 及以上 |
目前主流Linux操作系统,比如OpenEuler、UOS、Ubuntu、Debian、RHEL、Rocky Linux、AlamaLinux、CentOS、Kylin、Deepin等,基本都已发布修复补丁或者提供在线升级方案。
虽说CentOS也是 RedHat系,但是现在存量CentOS服务器也还不少,特别是CentOS 7系列,非常有必要将CentOS单独说明。
CentOS 6(内核2.6)、CentOS 7(内核3.10)默认不受影响,CentOS 8受影响。对于CentOS服务器来说,还是要逐一检查内核版本是否是被CVE-2026-31431漏洞影响的版本,因为在运维过程中CentOS 6和7服务器可能被手动更新过内核 。
CentOS 6 最终版(6.10)默认内核为2.6.32-754.el6.x86_64,远低于漏洞触发的最低内核版本(4.14)。默认状态下 完全不受影响(漏洞依赖的内核组件 algif_aead 在2.6 内核中不存在)。 CentOS 6已终止官方支持(EOL),即使手动升级内核,也无官方安全补丁下载,其默认内核本身无漏洞风险。但是使用过程中若内核已被手动升级到 4.14 版本及以上,也会被CVE-2026-31431漏洞影响,升级内核需依赖第三方仓库,通过ELRepo第三方仓库安装集成修复补丁的内核。
CentOS 7各子版本默认内核为3.10.0-xxx.el7.x86_64,低于漏洞最低影响版本(4.14),且默认内核未集成algif_aead 模块,默认状态下不受影响。
若通过第三方仓库(如ELRepo)将CentOS 7内核升级至4.14 ~ 6.18.21、6.19.11区间(如4.18、5.14等),则要检查内核版本:
- ❌ 受影响:升级后的内核包含algif_aead 模块,且处于漏洞未修复区间;
- ✅ 不受影响:若升级至6.18.22+、6.19.12+ 或7.0+版本(已集成修复补丁),则无漏洞风险; CentOS 7 同样已终止官方支持。若使用过程中内核已被升级到 4.14版本及以上,也会被CVE-2026-31431漏洞影响,升级内核需依赖第三方仓库,通过ELRepo第三方仓库安装集成修复补丁的内核。
CentOS 8官方支持的内核版本为4.18.0-xxx.el8.x86_64,处于漏洞受影响区间(4.14 ~ 6.18.21)。默认启用 algif_aead 模块,满足漏洞触发条件;8 版本受 CVE-2026-31431影响,且由于CentOS 8 已终止官方支持(EOL),无官方修复补丁,需通过以下方式处理:
-临时缓解:禁用algif_aead模块
echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif-aead.conf- 永久修复:升级内核至6.18.22+ 或 7.0+版本(需依赖第三方仓库),或迁移至Rocky Linux 8、AlmaLinux 8等兼容发行版(这些系统官方已推送修复补丁)。
鉴于CentOS 7依赖ELRepo升级内核步骤比较复杂,另外还需要搭建环境测试验证。我看大家的讨论热度,后续看情况单独更新一篇吧。
第一步,必须先执行缓解,阻断漏洞利用(需root权限执行):
# 1. 禁用algif_aead模块(永久生效,重启后仍有效)echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif-aead.conf# 2. 卸载已加载的algif_aead模块(无输出或提示未加载均正常)rmmod algif_aead 2>/dev/nulllsmod | grep algif_aead 无输出即生效。修复提交:a664bf3d603dc3bdcf9ae47cc21e0daec706d7a5
补丁下载: curl -O 或 wgethttps://git.kernel.org/stable/c/a664bf3d603dc3bdcf9ae47cc21e0daec706d7a5.patch
备用下载地址:https://github.com/torvalds/linux/commit/a664bf3d603dc3bdcf9ae47cc21e0daec706d7a5.patch
https://mirrors.edge.kernel.org/pub/linux/kernel/v6.x/linux-6.18.22.tar.xz
V4.x 的4.19.254版本已集成CVE-2026-31431补丁,下载地址为:https://mirrors.edge.kernel.org/pub/linux/kernel/v4.x/patch-4.19.254.xz
V5.x内核安全版本(5.4/5.10/5.15):5.4.204、5.10.254、5.15.204 均为官方确认的安全版本,包含CVE-2026-31431修复补丁。 V5.x 各子版本安全包下载地址:
若 mirrors.edge.kernel.org 访问不稳定,可使用以下国内镜像源,路径完全一致:
# 1. 更新仓库缓存dnf clean all && dnf makecache# 2. 升级内核(自动安装修复版本)dnf update kernel -y# 3. 重启生效(必须重启)reboot# 查看内核版本(需包含修复补丁,如3.10.0-1160.118.1.el7或更高)uname -r# 查看更新日志(确认包含CVE-2026-31431)rpm -qa --changelog | grep CVE-2026-31431# 1. 更新仓库缓存apt update# 2. 升级所有软件包(不含内核)apt upgrade -y# 3. 安装最新稳定内核(元包自动解析最新版本,如果服务器架构是arm,amd64对应换成arm64)apt install linux-image-amd64 linux-headers-amd64 -y# 4. 更新 GRUB 引导配置update-grub# 5. 重启生效rebootuname -r # 查看更新日志apt changelog linux-image-$(uname -r) | grep CVE-2026-31431yum clean all && yum makecacheyum update kernel -yrebootdnf clean all && dnf makecachednf update kernel -yreboot# 1. 检查algif_aead模块是否禁用lsmod | grep algif_aead # 无输出正常# 2. 检查内核版本是否为修复版本(参考各系统最低修复版本)uname -r# 3. 验证官方CVE-2026-31431补丁是否已安装## RHEL/欧拉/麒麟 执行rpm -q --changelog kernel | grep CVE-2026-31431## Debian/Ubuntu/UOS/Deepin 执行apt changelog linux-image-$(uname -r) | grep CVE-2026-314311、内核自动更新:配置 yum-cron(RHEL 系)或 unattended-upgrades(Debian 系),自动安装安全补丁。
2、容器隔离:CVE-2026-31431可被容器内普通用户利用实现逃逸,建议所有容器宿主机添加seccomp规则,禁止容器创建AF_ALG套接字,从调用层阻断漏洞利用路径。
mkdir -p /etc/seccompcat > /etc/seccomp/algof-block.json <<EOF{ "defaultAction": "SCMP_ACT_ALLOW", "syscalls": [ { "name": "socket", "action": "SCMP_ACT_ERRNO", "args": [ { "index": 0, "value": 1, "op": "SCMP_CMP_EQ" }, { "index": 1, "value": 38, "op": "SCMP_CMP_EQ" } ] } ]}EOF# 启动容器并加载漏洞防护规则docker run \ -d \ --name 自定义容器名 \ --security-opt seccomp=/etc/seccomp/algof-block.json \ 你的镜像名称python3 -c 'import socket; socket.socket(socket.AF_ALG, socket.SOCK_SEQPACKET, 0)'返回 Operation not permitted 即为防护成功。
3、权限管控:禁止普通用户加载内核模块(modprobe / insmod),限制 sudo 权限范围。
为方便大家修复,我制作了一个自动化脚本,供大家选用。 下载地址:
百度网盘 https://pan.baidu.com/s/1UwcSZNJD1V0q65iYR3QU3A?pwd=6q7w
夸克网盘
https://pan.quark.cn/s/23ee49ca86b2 提取码:wNvw
特别提醒,请不用直接在生产环境上执行,请先在测试环境或者虚拟机上测试无误后使用。或者根据实际环境修改后再使用。使用中遇到问题或者报错,可以联系我或自行解决。
我已在自己虚拟机中的完成了三个系统的验证,分别是UOS V20 1070、OpenEuler 24.03、Rocky Linux 9.7,均可正常升级修复。其他 Linux 系统大家执行脚本的情况大家可以在留言区讨论。



至于内网的 Linux服务器,因为无法连接互联网,核心思路是 “离线修复”:通过有网机器下载对应系统的修复内核包和依赖,拷贝到内网服务器手动安装,同时保留临时缓解措施阻断漏洞利用。以下是针对所有支持系统的 离线完整解决方案,分步骤详解:
确认内网服务器的关键信息(必须提前记录):
系统版本(如Rocky Linux 9.7、OpenEuler 6.6、UOS V20)
内核架构(x86_64为主,可通过内网服务器执行 uname -r 确认)
当前内核版本(如Rocky 9.7 是5.14.0-611.41.1.el9_7.x86_64)

下载对应系统的 离线修复内核包(含CVE-2026-31431补丁)。
以下是各系统官方离线包下载链接,直接在有网机器浏览器打开下载,列表中是以部分版本为例,如果是其他版本,到上级目录找到对应系统版本号找到对应的内核包:
.rpm 或 .deb 包拷贝到内网服务器的目录中,比如 /opt/offline-kernel/ 目录(本文示例把补丁都传到这个目录):# 内网服务器上创建目录mkdir -p /opt/offline-kernel# RHEL 系下载内核+所有依赖 yumdownloader --resolve kernel
# Debian/Ubuntu/UOS/Deepin(Debian 系) apt update apt install -y apt-rdepends apt-get download $(apt-rdepends linux-image-generic | grep -E "^linux-")
# OpenEuler(欧拉) dnf install -y yum-utils yumdownloader --resolve --destdir=. kernel kernel-core kernel-modules
麒麟 Kylin V10/V10 SP1/SP2/SP3 yum install -y yum-utils yumdownloader --resolve kernel kernel-devel kernel-headers
#统信 UOS V 20/V25 apt update apt-get download linux-image-$(uname -r) linux-headers-$ (uname -r)
先执行以下命令临时禁用危险模块,避免漏洞被利用(需要root 权限):
# 1. 永久禁用 algif_aead 模块(重启后仍有效)echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif-aead.conf# 2. 卸载已加载的模块(无输出即未加载,正常)rmmod algif_aead 2>/dev/null || echo "algif_aead 模块未加载"# 3. 验证缓解:无输出即正常lsmod | grep algif_aead根据内网服务器的系统类型,执行对应离线安装命令(需要root 权限)。
# 1. 进入离线包目录cd /opt/offline-kernel# 2. 备份旧内核列表rpm -qa | grep kernel > /tmp/old-kernel-list.txt# 3. 安装内核包(通配符匹配所有下载的 .rpm 包,含依赖)dnf install -y *.rpm --disablerepo=* # --disablerepo=* 禁用所有仓库,纯离线安装# 若系统用 yum(如老版本 CentOS/Kylin):# yum install -y *.rpm --disablerepo=*# 4. 更新 GRUBgrub2-mkconfig -o /boot/grub2/grub.cfg# 1. 进入离线包目录cd /opt/offline-kernel# 2. 备份旧内核列表dpkg -l | grep linux-image | awk '{print $2}' > /tmp/old-kernel-list.txt# 3. 安装内核包(dpkg 离线安装,--force-all 忽略仓库依赖检查,使用方法是dpkg --force-all -i *.deb)dpkg -i *.deb# 4. 修复依赖(若提示依赖缺失,用本地缓存的依赖包,无需联网)apt -f install -y # 5. 更新 GRUBupdate-grub# 1. 查看已安装的内核版本(确认修复版本已安装)rpm -qa kernel-core kernel-modules | sort # RHEL 系dpkg -l | grep linux-image | awk '{print $2, $3}' # Debian 系# 2. 确认当前内核版本(重启前仍显示旧版本,正常)uname -r# 3. 验证模块禁用状态(无输出即正常)lsmod | grep algif_aeadreboot重启后登录内网服务器,执行以下命令确认漏洞已修复:
# 1. 内核版本已更新为修复版本uname -r # 示例:Rocky 9.7 应显示 5.14.0-611.45.1.el9_7.x86_64# 2. algif_aead 模块已禁用(无输出)lsmod | grep algif_aead# 3. 验证补丁已植入(RHEL 系)rpm -qa --changelog kernel | grep -i "CVE-2026-31431"# 3. 验证补丁已植入(Debian 系)dpkg -l --status linux-image-$(uname -r) | grep -i "CVE-2026-31431"当然也可以再次执行第六步我自制的升级脚本进行检查,效果如下图。

(1)、离线安装提示 “依赖缺失”: 在有网机器上,下载内核包对应的依赖(如 kernel-core、kernel-modules 等),同样拷贝到 /opt/offline-kernel/ 目录,重新执行安装命令(dnf/yum/dpkg 会自动识别本地依赖)。部分厂商提供下载 “内核源码包” 或 “完整内核离线套件”,包含所有依赖。
(2)、内网不能使用 U 盘 / 移动硬盘:通过内网 SSH 传输(如用另一台能访问内网服务器的有网机器,通过 scp 拷贝,路径和文件夹可以自行指定,示例为 opt/offline-kernel 目录): # 有网机器执行(需知道内网服务器的 IP 和账号)
scp /下载目录/*.rpm 内网账号@内网服务器IP:/opt/offline-kernel/
CVE-2026-31431漏洞影响4.14至6.18.22/6.19.12以下 的所有内核版本。作为一线运维,面对这类高危内核漏洞,核心是 “先阻断、再修复、后加固”。建议分三步进行处理:
禁用algif_aead模块 命令,尤其是公网服务器、容器宿主机。好了,今天的更新就到这里。本文耗时一天一夜。反复核对文字、命令和脚本,对安全修复类文章必须谨慎,多次检查验证,力求准确无误无瑕疵无纰漏。但是才疏学浅,难免考虑不周,请大家多多提出意见。