文章总结: 本文深入分析了Linux内核高危本地提权漏洞CVE-2026-31431(CopyFail)。该漏洞源于AF_ALG加密子系统对splice零拷贝数据的不当处理,允许攻击者通过特定调用链将恶意代码写入setuid程序(如su)的页缓存中,从而在执行时以root权限运行shellcode,绕过密码验证。文章详细解析了其利用原理、攻击流程,并介绍了天穹沙箱针对该漏洞的检测方法与修复建议。 综合评分: 95 文章分类: 漏洞分析,渗透测试,红队,内核安全,技术标准
【天穹】内核暗渡:Linux Copy Fail 漏洞 CVE-2026-31431 利用分析
星图实验室 星图实验室
奇安信技术研究院
2026年5月11日 16:57 北京
在小说阅读器读本章
去阅读
01
概述
近期,Linux 内核爆出高危本地提权漏洞 CVE-2026-31431(Copy Fail),影响范围十分广泛。该漏洞源于 AF_ALG 加密子系统在处理 splice 零拷贝数据时,对 scatterlist 的不当合并优化,导致攻击者可将任意可读文件的页缓存页“嫁接”到目标缓冲区,实现对 setuid 程序的内存级代码篡改。
-
漏洞原语:
AF_ALG + splice → 4 字节可控写入任意可读文件的页缓存。
-
利用方式:
反复调用原语,将
/usr/bin/su的页缓存逐步替换为 shellcode。 -
触发方式:
execve("/usr/bin/su")→ 内核直接加载已被篡改的页缓存版本。 -
利用结果:
shellcode 以 setuid-root 权限运行,su 的密码验证逻辑从未被执行。
天穹沙箱已针对该漏洞增加专项监控规则,能够实时捕获 AF_ALG + splice + execve 组合调用链,并记录攻击特征,辅助安全人员快速定位利用行为。
02
漏洞信息
-
漏洞编号:
CVE-2026-31431
-
影响组件:
Linux 内核
crypto/af_alg.c及 scatterlist 处理逻辑。 -
影响版本:
Linux kernel 4.9 – 6.8(含);引入点为 2017 年 scatterlist 合并优化(约 v4.9);国产系统:kylin V10/V11 ARM64、UOS 20 x86_64、openEuler 22.03 SP2 ARM64 等均受影响;已于 6.9-rc1 修复。
-
漏洞类型:
越界写入(Out-of-Bounds Write,CWE-787);页缓存污染(Page Cache Poisoning)。
-
漏洞评分:
CVSS 3.1:7.8(本地提权,无需特权,无需交互)。
-
补丁状态:
上游已发布补丁,建议升级至 6.9+ 或应用厂商安全更新。
03
攻击全景:页缓存是如何被“偷梁换柱”的?
1. 攻击概述
为了实现无文件落地的内存提权,攻击者巧妙利用了 Linux 页缓存与 scatterlist 的特性:
- 打开 suid 文件并获取只读文件描述符(例如
/usr/bin/su); - 通过
pipe + splice零拷贝,将 su 的页缓存页引用”注入” AF_ALG 请求的 scatterlist; - 触发
authencesn等算法的越界写操作,4 字节 shellcode 片段被精准写入 su 页缓存; - 调用
execve("/usr/bin/su"),内核加载已被污染的页缓存,shellcode 以 root 权限执行。
2. 攻击流程
图1 漏洞利用攻击流程
3. 核心数据结构:scatterlist
Linux 内核使用 scatterlist 描述物理上不连续的内存块:
struct scatterlist { unsigned long page_link; // 指向物理页 unsigned int offset; // 页内偏移 unsigned int length; // 这段数据的长度 dma_addr_t dma_address; // DMA 映射后的总线地址};
多个 scatterlist 条目可通过 sg_chain() 串联,形成逻辑上连续的数据流。
4. AF_ALG 与“就地优化”的致命缺陷
2017 年的一次性能优化将 src 与 dst scatterlist 合并为同一链,省去一次内存拷贝:
优化前:src → [用户数据页] dst → [输出缓冲页]优化后:src = dst → [用户数据页 + 输出缓冲页,链在一起]
当用户通过 splice()将/usr/bin/su的缓存页喂入 AF_ALG socket 时,内核的af_alg_sendmsg路径调用iov_iter_get_pages()直接获取struct page *指针,并用sg_set_page()插入 scatterlist,再通过sg_chain()追加到dst 末尾。
authencesn 算法在处理 ESN 时,需要写入 dst[assoclen + cryptlen] 位置。由于 scatterlist 已链式连接,写指针自然越过攻击者控制的缓冲区,滑入 su 的缓存页,实现 4 字节任意写入。
5. splice() 零拷贝的“双刃剑”
普通 read() + write(): 磁盘 → 页缓存 → 用户缓冲区 → 内核缓冲区 (两次拷贝)splice(): 磁盘 → 页缓存 ----------------------→ 目标fd (零拷贝) 直接传递页面引用
攻击者利用 splice 的逻辑示意:
pythonr_fd, w_fd = os.pipe()os.splice(su_fd, w_fd, 4096) # su 的页缓存页进入 pipeos.splice(r_fd, alg_fd, 4096) # 页面引用送入 AF_ALG socket
6. setuid 授权与页缓存执行的矛盾
当内核处理 execve("/usr/bin/su") 时,分两步走:
步骤 1:检查 suid 权限 ← 读取磁盘 inode 的文件属性(st_mode) ✓ 合法步骤 2:加载并执行代码 ← 读取页缓存中的 ELF 内容 ✗ 已被污染
磁盘上的 su 文件属性完好无损,suid 位依然存在,内核合法地将进程 euid 提升为 0。但步骤 B 加载的却是已被 Copy Fail 替换过的页缓存版本。内核从未意识到这两步之间存在矛盾,因为它没有机制去校验“授权的 suid 程序”和“从页缓存加载的代码”是否一致。
7. shellcode 替换内容
攻击者通过反复 4 字节写入 shellcode 到目标位置,植入的 shellcode 大致等价于:
setuid(0);setgid(0);execve("/bin/sh", NULL, NULL);
当 execve("/usr/bin/su") 被调用后,CPU 入口点直接指向这段代码,在 euid=0 上下文中执行 root shell,整个 PAM 认证栈与 /etc/shadow 读取逻辑均未运行。
04
天穹沙箱检测
天穹沙箱具备基于行为序列的多阶段行为关联分析能力,能够有效检出 CVE-2026-31431 的漏洞触发(PoC)及利用(Exp)。
Ubuntu 18.04 x86_64
天穹沙箱 Ubuntu 18.04 x86_64 环境捕获到完整的 AF_ALG + splice 攻击链如图 2 所示。样本首先打开 su 文件获取其文件描述符,随后创建 AF_ALG 套接字并绑定至 aead 加密模式,同时设置加密认证算法为 authencesn(hmac(sha256),cbc(aes))。接着,样本通过 pipe 与 splice 的组合操作,将 su 文件的页缓存传递给 AF_ALG 套接字,并利用 authencesn 模板的逻辑漏洞将控制数据写入页缓存,最终实现本地提权。 样本执行过程调用和创建子进程的逻辑关系如图 3 所示。
图2 Ubuntu 18.04 x86_64 漏洞利用检测
图3 Ubuntu 18.04 x86_64 漏洞利用进程树
UOS 20 x86_64
在 UOS 20 x86_64 环境中,天穹沙箱同样通过多阶段行为关联分析捕获到了 setuid 页缓存篡改尝试,规则命中率 100%。
投递样本时,系统类型选择信创,分析系统选择 UOS 20 Desktop x86-64,如图 4 所示。分析配置支持自定义配置命令行参数,在命令行参数输入框中填写执行参数即可。
图4 UOS20 环境选择
图5 UOS 20 x86_64 漏洞利用检测
05
IOC
恶意文件(MD5)
de1d2a9e44ba05f083a40a3fa9530411cde0721a815d8d2a8e37e291a972e5387d5f66c7332a4f929e99380f3f496b5d
报告链接 报告链接(Ubuntu18):
https://sandbox.qianxin.com/tq/report/toViewReport.do?rid=8fc905197ef2ced24fbd7eb7304aafef&sk=66904386
报告链接(UOS20):
https://sandbox.qianxin.com/tq/report/toViewReport.do?rid=0825c6fe383cfd823f6d6e9f9503781e&sk=55540319
06
修复建议
07
参考链接
- https://xint.io/blog/copy-fail-linux-distributions
- https://copy.fail/
- https://github.com/theori-io/copy-fail-CVE-2026-31431
08
技术支持与反馈
天穹智能分析平台(联系我们申请账号):https://sandbox.qianxin.com
天穹智能分析平台持续迭代升级,致力于为每一位样本分析人员打造更高效、更智能、更易用的分析平台——这始终是我们不变的初心与追求。
如果您希望深入了解平台功能,或在使用过程中遇到任何问题,欢迎随时联系我们。您的反馈,是我们进步的重要动力!
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:奇安信技术研究院 星图实验室 星图实验室《【天穹】内核暗渡:Linux Copy Fail 漏洞 CVE-2026-31431 利用分析》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。


![[5月27至30日·武汉]高校网络安全人才项目化实战培养体系研修班启动报名](/images/random/titlepic/11.jpg)








评论