
摘要CVE-2026-31431又名Copy Fail是 Linux Kernel 中一个影响较广的本地权限提升漏洞。该漏洞位于algif_aead用户态加密接口相关逻辑中攻击者在具备普通本地用户权限的情况下可能通过AF_ALG、splice()与 AEAD 加密路径的组合实现对 page cache 的受控写入最终影响 setuid-root 程序执行流程并获得 root 权限。该漏洞对多用户 Linux 主机、容器节点、CI/CD Runner、在线代码执行平台、Notebook 平台和沙箱环境影响较大。本文将从漏洞背景、影响范围、技术原理、非破坏性 PoC、复现思路、检测方法、修复方案和临时规避方式几个方面进行分析。本文仅用于安全研究、漏洞验证和防御加固。请勿在未授权环境中测试或利用漏洞。一、漏洞基本信息项目内容CVE 编号CVE-2026-31431漏洞名称Copy Fail漏洞类型Linux Kernel 本地权限提升影响组件algif_aead/AF_ALG/ Kernel Crypto API攻击权限本地普通用户攻击复杂度低影响结果普通用户可能提升为 rootCVSS7.8修复方式升级内核或禁用相关攻击面公开参考https://copy.fail/https://nvd.nist.gov/vuln/detail/CVE-2026-31431https://cert.europa.eu/publications/security-advisories/2026-005/https://www.sysdig.com/blog/cve-2026-31431-copy-fail-linux-kernel-flaw-lets-local-users-gain-root-in-seconds二、漏洞背景Linux 内核提供了 Kernel Crypto API用于向内核和用户态程序提供加密能力。其中AF_ALG是 Linux 暴露给用户态的加密 socket 接口。用户态程序可以通过类似下面的方式调用内核加密能力socket(AF_ALG,SOCK_SEQPACKET,0)algif_aead则是AF_ALG中用于 AEAD 算法的接口。AEAD 全称为 Authenticated Encryption with Associated Data即“带关联数据的认证加密”。正常情况下普通用户调用这些接口并不应该获得修改系统敏感内存或提权的能力。但 CVE-2026-31431 的问题在于特定数据路径组合会导致来自 page cache 的页面被错误地当作可写目标缓冲区使用。三、影响范围该漏洞影响包含相关algif_aeadin-place 优化逻辑、但尚未合入修复补丁的 Linux 内核版本。高风险环境包括多用户 Linux 服务器普通用户账号可能被提升为 root。Kubernetes / Docker 容器节点容器内低权限代码可能借助内核漏洞影响宿主机。CI/CD Runner如果 Runner 会执行不可信 PR、构建脚本或测试代码风险较高。在线代码运行平台例如在线评测、沙箱执行、Notebook、实验平台等。已经存在 WebShell 或 RCE 的服务器攻击者可将该漏洞作为后续本地提权手段。需要注意的是判断是否受影响不能只看uname -r。不同发行版可能会将安全补丁 backport 到旧版本号内核中因此应以发行版安全公告和实际补丁状态为准。四、漏洞原理分析4.1 涉及的关键机制该漏洞涉及三个核心机制1. AF_ALGAF_ALG是 Linux 内核提供的加密算法 socket 接口。用户态程序可以通过它调用内核中的加密算法。2. algif_aeadalgif_aead是AF_ALG中处理 AEAD 加密算法的接口。漏洞主要出现在该模块相关的数据处理路径中。3. splice()splice()是 Linux 的零拷贝系统调用可在文件描述符之间移动数据例如文件、管道、socket 等。零拷贝机制可以提高性能但也使得数据页的所有权和读写语义变得更加复杂。4.2 根因简述该漏洞与algif_aead中的 in-place 优化有关。所谓 in-place 操作是指源缓冲区和目标缓冲区复用同一块内存区域从而减少额外拷贝提高性能。问题在于当攻击者将AF_ALG、AEAD 加密操作和splice()组合使用时来自 page cache 的页面可能进入本应可写的目标 scatterlist。最终低权限用户可能借助加密接口触发对 page cache 的受控写入。研究方披露的关键能力是攻击者可以对任意可读文件对应的 page cache 进行小范围受控写入。这意味着攻击者不一定需要直接写磁盘文件也能影响该文件在内存中的内容。五、为什么可以导致提权Linux 系统中存在一些 setuid-root 程序例如/usr/bin/su /usr/bin/passwd /usr/bin/sudo这类程序的特点是普通用户执行时程序可以在特定条件下以 root 权限运行。如果攻击者能够污染这些 setuid-root 程序在 page cache 中的内容就可能影响程序执行流程。由于修改发生在 page cache 中而不是磁盘文件本身所以会出现几个特点磁盘文件内容未必发生变化。文件哈希检测可能发现不了异常。重启或 page cache 回收后污染通常会消失。被污染的 setuid 程序一旦执行可能触发 root 权限代码路径。这也是 Copy Fail 漏洞比较危险的地方它攻击的是内核缓存层而不是传统文件写入路径。六、非破坏性 PoC检测 AF_ALG AEAD 暴露面下面的 PoC 不会提权不会修改系统文件也不会污染 page cache。它只用于检测当前系统中普通用户是否可以访问AF_ALGAEAD 相关接口。保存为copyfail_exposure_check.py代码如下#!/usr/bin/env python3importosimportplatformimportsocketimportsubprocessimportsys AF_ALGgetattr(socket,AF_ALG,38)AEAD_CANDIDATES[authencesn(hmac(sha1),cbc(aes)),authenc(hmac(sha1),cbc(aes)),]defrun(cmd):try:returnsubprocess.check_output(cmd,textTrue,stderrsubprocess.DEVNULL).strip()exceptException:returndefhas_proc_crypto(name):try:withopen(/proc/crypto,r,encodingutf-8,errorsignore)asf:returnnameinf.read()exceptException:returnFalsedeftry_afalg_aead(alg_name):try:ssocket.socket(AF_ALG,socket.SOCK_SEQPACKET,0)s.bind((aead,alg_name))s.close()returnTrue,NoneexceptOSErrorase:returnFalse,f{e.errno}:{e.strerror}exceptExceptionase:returnFalse,str(e)defmain():print([*] Kernel:,platform.release())print([*] User:,fuid{os.getuid()}euid{os.geteuid()})configrun([sh,-c,zgrep -h CONFIG_CRYPTO_USER_API_AEAD /proc/config.gz /boot/config-$(uname -r) 2/dev/null | tail -1])print([*] CONFIG_CRYPTO_USER_API_AEAD:,configorunknown)loadedbool(run([sh,-c,lsmod | awk {print $1} | grep -x algif_aead]))print([*] algif_aead loaded:,loaded)print([*] /proc/crypto contains authencesn:,has_proc_crypto(authencesn))exposedFalseforalginAEAD_CANDIDATES:ok,errtry_afalg_aead(alg)ifok:print(f[] AF_ALG AEAD bind succeeded:{alg})exposedTrueelse:print(f[-] AF_ALG AEAD bind failed:{alg}({err}))print()ifexposed:print([!] Result: AF_ALG AEAD is reachable by this user.)print([!] If the kernel is unpatched, this host should be treated as potentially vulnerable.)sys.exit(2)else:print([] Result: AF_ALG AEAD was not reachable with tested algorithms.)print([] This may indicate mitigation, missing module, policy block, or unsupported algorithm.)sys.exit(0)if__name____main__:main()运行方式python3 copyfail_exposure_check.py如果输出中出现AF_ALG AEAD bind succeeded说明当前普通用户可以访问相关攻击面。此时应进一步确认内核是否已经合入修复补丁。七、漏洞复现建议不建议直接在生产环境复现真实提权过程。推荐的复现环境创建隔离虚拟机。安装可能受影响的 Linux 内核。创建普通用户。给虚拟机打快照。运行本文提供的非破坏性检测 PoC。如需进一步验证真实漏洞利用应只在授权实验环境中使用研究方公开 PoC。测试完成后回滚快照或销毁虚拟机。基础信息收集命令iduname-auname-rlsmod|grepalgif_aeadcat/proc/crypto|grep-A5-Eauthencesn|aead研究方公开页面提供的 exploit 哈希如下可用于验证样本完整性sha256: a567d09b15f6e4440e70c9f2aa8edec8ed59f53301952df05c719aa3911687f9公开仓库地址https://github.com/theori-io/copy-fail-CVE-2026-31431再次强调真实 exploit 只应在隔离、授权、可回滚环境中运行。八、检测方法8.1 检查内核版本uname-auname-r但不要只依赖版本号。发行版可能已经 backport 修复补丁。8.2 检查内核配置zgrep CONFIG_CRYPTO_USER_API_AEAD /proc/config.gz2/dev/nullgrepCONFIG_CRYPTO_USER_API_AEAD /boot/config-$(uname-r)2/dev/null如果结果为CONFIG_CRYPTO_USER_API_AEADy或CONFIG_CRYPTO_USER_API_AEADm说明 AEAD 用户态接口可能存在。8.3 检查模块状态lsmod|grepalgif_aead modinfo algif_aead2/dev/null8.4 检查发行版安全状态Ubuntu / Debianaptupdateaptlist--upgradable|grep-Elinux-image|linux-generic|linuxRHEL / Rocky / Alma / Fedoradnf updateinfo list--cves|grepCVE-2026-31431 dnf updateinfo info--cveCVE-2026-31431SUSEzypperlp--cveCVE-2026-31431九、修复方案9.1 升级内核最推荐的修复方式是升级到发行版官方发布的修复版本。Ubuntu / Debiansudoaptupdatesudoaptfull-upgradeRHEL / Rocky / Alma / Fedorasudodnf update kernelSUSEsudozypperpatch升级完成后需要重启系统sudoreboot重启后确认当前内核uname-r十、临时规避方式如果短时间内无法升级内核可以先禁用algif_aead模块。echoinstall algif_aead /bin/false|sudotee/etc/modprobe.d/disable-algif-aead.confsudormmod algif_aead2/dev/null||true验证是否卸载lsmod|grepalgif_aead||echoalgif_aead not loaded该方式通常不会影响常见的 OpenSSL、SSH、LUKS、dm-crypt 等场景但可能影响显式依赖AF_ALGAEAD 的应用。因此建议在生产环境执行前先评估业务影响。十一、容器环境加固建议对于 Kubernetes、Docker、CI Runner 等运行不可信代码的环境可以通过 seccomp 阻断AF_ALGsocket 创建。AF_ALG地址族编号通常为38。Docker seccomp 规则片段示例{names:[socket],action:SCMP_ACT_ERRNO,args:[{index:0,value:38,op:SCMP_CMP_EQ}]}该策略尤其适合自托管 GitLab Runner / GitHub Actions Runner在线编译平台CTF / OJ 平台Notebook 平台多租户容器平台十二、入侵排查建议可以重点关注以下行为普通用户创建AF_ALGsocket。异常调用splice()。普通用户频繁执行 setuid-root 程序。容器内出现异常 root shell。/usr/bin/su、/usr/bin/passwd、/usr/bin/sudo等程序执行链异常。需要注意的是由于该漏洞主要影响 page cache磁盘文件哈希不一定发生变化。因此仅依赖文件完整性检测可能不足以发现利用痕迹。建议结合auditdeBPFFalcoEDR容器运行时安全策略进行综合检测。十三、总结CVE-2026-31431 是一个典型的 Linux 内核本地提权漏洞。它的危险点在于攻击者不需要直接修改磁盘文件而是通过内核数据路径污染 page cache从而影响 setuid-root 程序执行。对于企业环境建议按以下优先级处置优先排查多用户主机、容器节点、CI/CD Runner。尽快升级内核并重启。无法立即升级时临时禁用algif_aead。对容器和不可信代码执行环境限制AF_ALG。使用非破坏性 PoC 验证攻击面是否仍然存在。结合审计日志和运行时安全工具排查异常行为。一句话总结Copy Fail 不是远程漏洞但它可以把一个普通本地账号变成 root。在容器、CI 和多租户场景中应按高优先级漏洞处理。