文档首页/ MapReduce服务 MRS/ 服务公告/ 漏洞公告/ Linux内核权限提升漏洞(CVE-2026-31431)公告
更新时间:2026-07-15 GMT+08:00
分享

Linux内核权限提升漏洞(CVE-2026-31431)公告

近期,互联网披露CVE-2026-31431 Linux Copy Fail本地提权漏洞。由于Linux内核加密子系统authencesn模块中存在逻辑缺陷,攻击者通过AF_ALG套接字暴露的内核加密API,配合splice()系统调用,可实现对setuid二进制文件(如 /usr/bin/su)页缓存的4字节任意写入,可导致容器逃逸、权限提升。

漏洞详情

表1 漏洞信息

漏洞类型

CVE-ID

漏洞级别

披露/发现时间

权限提升

CVE-2026-31431

严重

2026-04-22

漏洞影响

Linux内核crypto子系统中的algif_aead模块存在逻辑缺陷,导致低权限用户可利用该模块漏洞将任意数据写入内核 page cache,如可篡改SUID二进制程序(如 su、sudo 等)进行提权。由于页缓存在宿主机与容器间共享,该漏洞可导致容器逃逸。

漏洞的利用,需要用户具备主机或容器内可执行权限。

判断方法

  1. 登录MRS集群节点,执行如下命令,查看集群操作系统版本,是否在漏洞受影响范围内。
    cat /etc/system-release
    表2 欧拉受影响情况

    架构

    版本

    内核版本

    是否受影响

    X86

    Euleros 2.8及以下

    kernel 3.10

    不受影响

    Euleros 2.9、2.10

    kernel 4.18

    受影响

    ARM

    Euleros 2.9、2.10

    kernel 4.19

    受影响

    表3 HCE受影响情况

    版本

    内核版本

    是否受影响

    HCE 2.0

    kernel 5.10

    受影响

  2. 如果不在以上版本范围不确定情况,则执行uname -a查看主机内核版本,如果大于等于4.14则内核受该漏洞影响。
    uname -a

操作影响

执行规避措施之后,会影响OS热补丁的安装,热补丁实施之前,需要执行本文档中的回退操作,避免热补丁无法实施。

漏洞手工处理方案

使用root用户登录MRS节点,执行以下操作,对内置模块禁用(对受影响的HCE和EulerOS均生效)。

  1. 排查业务代码、驱动等是否有加载使用authencesn模块,如业务有使用此模块,禁用可能影响业务运行。

    1. 使用root用户登录MRS节点,执行以下命令,查看是否加载authencesn模块。
      lsmod | grep authencesn

      • 返回为空则未加载,执行步骤2
      • 返回不为空,则有加载使用authencesn模块,执行1.b
    2. 执行如下命令,卸载authencesn模块。
      modprobe -r authencesn

      如果执行报错说明有其他模块依赖authencesn,需要再次评估业务是否有使用。

      再次执行以下命令,查看是否加载authencesn模块。
      lsmod | grep authencesn

  2. 未加载authencesn或已经卸载,则执行以下命令。

    echo "install authencesn /bin/false" >> /etc/modprobe.d/blacklist.conf

  3. 执行以下命令,查看禁用黑名单是否正常写入。

    cat /etc/modprobe.d/blacklist.conf

  4. 执行以下命令验证,执行报错则黑名单加载成功。

    modprobe authencesn

【手工回退方案】

  1. 使用root用户登录集群节点。
  2. 执行以下命令,回退文件。

    sed -i '/authencesn/d' /etc/modprobe.d/blacklist.conf

漏洞批量处理方案

  1. 参考为主机安装UniAgent给集群内节点安装UniAgent。
  2. 登录COC管理控制台
  3. 进入“资源运维 > 自动化运维 > 脚本管理”页面,单击“创建脚本”按钮创建批量执行任务,并单击“确定”。

    图1 创建脚本
    脚本内容如下:
    #!/bin/bash
    # 检查入参参数是否合法
    echo "$operation_type" | grep -w -E "upgrade|rollback" > /dev/null
    [ $? -ne 0 ] && { echo "[ERROR] invalid params operation_type"; exit 1; }
    function check_version() {
        uname -a
        uname -a | awk '{print $3}' | grep -E 'hce2|euleros' > /dev/null 2>&1
        if [ $? -ne 0 ]; then
            echo "no need to handle"
            return 1
        fi
    
    
        uname -a | awk '{print $3}' | grep -E 'hce2' > /dev/null 2>&1
        is_hce_os=$?
        if [ ${is_hce_os} -eq 1 ]; then
            euleros_rversion=$(uname -a | awk '{print $3}' | awk -F 'euleros' '{print $2}' | awk -F 'r' '{print $2}' | awk -F '.' '{print $1}')
            if [ ${euleros_rversion} -lt 8 ]; then
                echo "no need to handle"
                return 1
            fi
        fi
    
        echo "need to handle"
        return 0
    }
    function check_user()
    {
        # 检查执行用户为root
        current_user=$(whoami)
        if [[ "${current_user}" != "root" ]]; then
            return 1
        fi
    }
    function check_authenc_in_blacklist() {
        # 检查是否添加过authencesn配置
        local file_path="/etc/modprobe.d/blacklist.conf"
        local search_string="authencesn"
    
        # 检查文件是否存在且为普通文件
        if [[ -f "$file_path" ]]; then
            # 文件存在,使用 grep 查找字符串
            if grep -q "$search_string" "$file_path"; then
                return 0
            else
                return 1
            fi
        else
            return 1
        fi
    }
    function upgrade()
    {
        # 检查模块是否存在于 lsmod 输出中
        if ! lsmod | grep -q 'authencesn'; then
            # 如果 grep 失败(即未找到 'authencesn'),则执行以下操作
            if check_authenc_in_blacklist; then
                echo "[INFO] 模块 authencesn 已配置,无需重复配置。"
            else
                echo "install authencesn /bin/false" >> /etc/modprobe.d/blacklist.conf
                grep authencesn /etc/modprobe.d/blacklist.conf
                if [ $? -eq 0 ]; then
                   echo "[INFO] authencesn 模块配置成功。"
                else
                   echo "[ERROR] authencesn 模块配置失败,请联系技术支持。"
                   return 1
                fi
            fi
        else
            # 如果 grep 成功(即找到了 'authencesn'),则提示
            echo "[INFO] 模块 authencesn 已加载,请联系技术支持。"
            return 1
        fi
        return 0
    
    }
    function rollback()
    {
        BLACKLIST_FILE="/etc/modprobe.d/blacklist.conf"
    
        # 删除添加的配置
        sed -i '/authencesn/d' "$BLACKLIST_FILE"
    
        # 删除后检查确认删除成功
        if ! grep -q 'authencesn' "$BLACKLIST_FILE"; then
            echo "[INFO] 成功:文件 $BLACKLIST_FILE 中已无'authencesn' 相关信息。"
            echo "[INFO] 回退完成"
            return 0
        else
            echo "[ERROR]警告:文件 $BLACKLIST_FILE 中仍存在'authencesn' 相关信息。"
            echo "[INFO] 回退失败"
            return 1
        fi
    }
    function main()
    {
        check_user || {
             echo "[ERROR] current scripts must execute by root"
             return 1
         }
        check_version || { return 0; }
        if [ "$operation_type" == "upgrade" ]; then
            upgrade || {
                echo "[ERROR] upgrade config failed";
                return 1
                }
        elif [ "$operation_type" == "rollback" ]; then
            rollback || {
                echo "[ERROR] rollback config failed";
                return 1
                }
        fi
    
        return 0
    }
    main

    在参数配置的“脚本入参”中设置参数如下:

    表4 脚本入参

    参数类型

    参数名称

    默认值

    参数描述

    是否必填

    文本

    operation_type

    upgrade

    操作类型

  4. 在自定义脚本管理页面,单击刚创建的脚本所在行的“执行”,执行用户设置为“root”,超时时间默认300秒,然后单击“添加实例”,选择要规避漏洞的ECS节点,最后单击“确定”。

    图2 选择实例

  5. 脚本执行完成后检查结果,状态均显示成功则表示批量规避成功。

    图3 查看执行结果

【批量回退方案】

  1. 登录COC管理控制台
  2. 进入“资源运维 > 自动化运维 > 脚本管理 > 自定义脚本”,找到之前创建的漏洞批量执行任务,单击“执行”。
  3. 在脚本入参中将值改为“rollback”,再单击“确定”。

    图4 修改入参

  4. 等待执行完成后检查结果,状态均显示成功则表示批量回退成功。

相关文档