【复现】Linux内核通用漏洞 Copy Fail(CVE-2026-31431)

发布时间 2026-04-30

漏洞描述


Copy Fail(CVE-2026-31431)是 Linux内核authencesn加密模板中的一处逻辑漏洞。该漏洞允许低权限本地用户,向系统任意可读文件的页缓存发起确定性、可受控的 4 字节写入。攻击者仅需一段 732 字节的 Python 脚本,就能篡改 setuid 特权二进制文件,即可在 2017 年之后发布的绝大多数 Linux 发行版上实现本地提权,直接获取root 最高权限。该漏洞CVSS评分为7.8,等级为高危。

与Dirty Cow、Dirty Pipe等经典Linux本地提权漏洞相比,Copy Fail的最大优势在于无需依赖竞争条件,漏洞利用成功率和稳定性更高。此外,该漏洞覆盖的系统范围更广,几乎影响所有Linux发行版。


影响范围


• Linux Kernel 4.14及以上版本,直至补丁发布前的所有版本(4.14 - 6.x系列)

• Ubuntu、Amazon Linux、RHEL、SUSE等主流发行版

• 容器环境(官方披露可能实现容器逃逸)


漏洞原理


2017年提交的commit 72548b093ee3为algif_aead.c引入了AEAD(带关联数据的认证加密)操作的原位优化。在解密流程中,内核将AAD和密文数据从TX SGL拷贝至RX缓冲区,并通过sg_chain()将标签页以引用方式链接。随后设置req->src = req->dst,使得原本来自文件页缓存的页(经由splice传入)进入了可写的目标散列列表(Destination SGL)。


在authencesn模板的解密函数crypto_authenc_esn_decrypt()中,当src与dst被视为同一原位缓冲区时,该函数会向标签区域写入4个字节。然而,此写入操作发生在标签检查之前——即使后续因认证标签校验失败返回-EBADMSG错误,文件缓存页中的4个字节已被篡改。该漏洞允许本地低权限用户向任意可读文件的页缓存中写入可控数据,每次请求可覆盖4个字节,通过多次请求可篡改只读或setuid程序内容,进而实现本地提权或代码执行。


漏洞复现


图片.png


安全建议


    (1)正式防护方案

    将内核更新至包含commit a664bf3d603d 的版本。

    https://github.com/torvalds/linux/commit/a664bf3d603dc3bdcf9ae47cc21e0daec706d7a5


    (2)临时防护措施

    使用seccomp阻止AF_ALG套接字创建,或将algif_aead模块列入黑名单:

    Plain Text

    echo   "install algif_aead /bin/false" >   /etc/modprobe.d/disable-algif-aead.conf

    rmmod algif_aead 2>/dev/null


    参考链接:

    [1]https://xint.io/blog/copy-fail-linux-distributions

    [2]https://copy.fail/



    启明星辰积极防御实验室(ADLab)


    ADLab成立于1999年,是中国安全行业最早成立的攻防技术研究实验室之一,微软MAPP计划核心成员,“黑雀攻击”概念首推者。截至目前,ADLab已通过 CNVD/CNNVD/NVDB/CVE累计发布安全漏洞7000余个,持续保持国际网络安全领域一流水准。实验室研究方向涵盖基础安全研究、电信运营商基础设施安全研究、移动终端安全研究、云安全研究、信创安全研究、物联网安全研究、车联网安全研究、工控安全研究、数据安全研究、5G安全研究、AI安全研究、卫星安全研究、低空安全研究、高级威胁研究、攻防体系建设。研究成果应用于产品核心技术研究、国家重点科技项目攻关、专业安全服务等。


    adlab.jpg