Alibaba Cloud Linux系统禁用AF_ALG协议族缓解方案

更新时间:
复制为 MD 格式

本文介绍 CVE-2026-31431 Linux 内核本地提权漏洞的风险及缓解方案。该方案通过禁用 AF_ALG socket 创建能力阻断漏洞利用路径,适用于业务不依赖 AF_ALG socket 的场景。

警告
  1. 部署本方案后,依赖 AF_ALG socket 的业务进程将无法创建相关套接字,可能导致业务不可用。如果无法 100% 确认业务是否依赖 AF_ALG socket,禁止部署本方案。

  2. 本方案存在一定稳定性风险,必须按照灰度策略逐步上线,严禁直接全量部署至生产环境。

  3. 灰度部署期间,请密切关注相关业务的稳定性、错误日志及性能指标,发现异常请及时回滚。

漏洞背景

CVE-2026-31431 是 Linux 内核 algif_aead 模块中存在的高危本地权限提升漏洞。

攻击者通过构造特定的 AF_ALG socket 调用序列,并结合 splice() 系统调用绕过常规权限检查,实现对任意文件页缓存(Page Cache)的 4 字节越权写入。

攻击者可利用该能力篡改 /usr/bin/su 等 setuid 程序的内存映像,在不修改磁盘文件内容的情况下,实现从普通用户到 root 权限的本地提权。

漏洞详情请参考:【漏洞通告】Linux Kernel 本地权限提升漏洞风险通告(CVE-2026-31431)

缓解方案局限性

本缓解方案会导致依赖 AF_ALG socket 的加解密功能不可用,可能对依赖加解密功能的业务产生影响。实施前请务必评估业务是否存在对 AF_ALG socket 的依赖。如果无法确认业务是否依赖 AF_ALG socket 功能,请勿采用本缓解方案。

本节提供一些参考方法,用于检查业务是否依赖 AF_ALG socket 使用内核加密算法接口。可以通过 auditd 或 eBPF 等方式检查机器上是否存在 AF_ALG socket 创建行为,以下为基于 auditd 的示例:

# 首先确保 auditd 服务已启用
systemctl start auditd

# 如系统已配置其他 audit 规则,请先备份并评估影响
# 下发对 AF_ALG socket 的审计规则
auditctl -a always,exit -F arch=b64 -S socket -F a0=38 -k afalg_socket

# 运行一段时间后,查看审计结果
ausearch -k afalg_socket -ts recent -i

# 预期结果:如果统计期间有进程创建过 AF_ALG socket,将会输出审计记录

# 结束后删除对 AF_ALG socket 的审计规则
auditctl -d always,exit -F arch=b64 -S socket -F a0=38 -k afalg_socket
说明

以上排查方法仅供参考,不能完全排除业务对 AF_ALG 的依赖关系。仍建议结合业务源代码、依赖列表以及实际运行情况进行完整核查。

部署方法

重要

在执行以下部署步骤前,请确认业务不依赖 AF_ALG socket 功能,并能够接受 AF_ALG 相关功能受限带来的影响。

步骤一:检查依赖条件

部署本方案前需满足以下条件:

  1. 内核已启用 livepatch 支持。

  2. 已安装当前运行内核版本对应的 kernel-devel 包。

# 1. 确认 kernel-devel 包已安装
# 检查当前运行内核版本对应的 kernel-devel 包是否已安装
test -d "/lib/modules/$(uname -r)/build" && echo "kernel-devel OK" || echo "请安装 kernel-devel-$(uname -r)"

# 如果需要手动安装 kernel-devel 包
sudo yum install -y kernel-devel-$(uname -r)

# 2. 确认内核已启用 livepatch 支持
test -d /sys/kernel/livepatch && echo "livepatch sysfs OK"

步骤二:根据操作系统版本安装对应 RPM 包

# 1. 下载对应操作系统版本的 RPM 包(RPM 包下载地址采用白名单授权机制,请通过钉钉群179525012975获取下载链接)

# 2. 根据操作系统版本安装对应的 RPM 包,例如,对于 Alibaba Cloud Linux 3:
sudo yum install disable-af-alg-livepatch-1.0.0-1.al8.noarch.rpm
更换运行中的内核版本后,需要重新安装对应 RPM 包才能生效。

步骤三:验证缓解方案是否生效

方法一:检查 livepatch 状态

适用于 Alibaba Cloud Linux 3 与 Alibaba Cloud Linux 4:

# 查看 livepatch 生效状态
kpatch list

# 预期输出:Loaded patch modules: 列表中包含 disable_af_alg [enabled] 条目视为生效

方法二:验证 AF_ALG socket 是否被拦截

执行以下 Python 脚本:

python3 - <<'PY'
import socket, errno
try:
    s = socket.socket(38, socket.SOCK_SEQPACKET, 0)  # 38 = AF_ALG
    print("AF_ALG socket create: SUCCESS (缓解方案未生效)")
    s.close()
except OSError as e:
    if e.errno == errno.EAFNOSUPPORT:
        print(f"AF_ALG socket create: FAILED(缓解方案生效)")
    else:
        print(f"AF_ALG socket create: FAILED(返回非预期错误),errno={e.errno}, msg={e.strerror}")
PY

回滚方法

如果部署后出现业务异常,可通过以下方式卸载缓解方案:

sudo yum remove disable-af-alg-livepatch

卸载完成后,可再次执行验证脚本,确认对 AF_ALG socket 的拦截已被移除。