V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
ggdxwz

刚刚爆了一个影响 17 年后所有 Linux 内核的本地提权漏洞 CVE-2026-31431 / Copy Fail,尽快排查

  •  1
     
  •   ggdxwz · 9h 15m ago · 3543 views
    详情 (不确定这个网站靠不靠谱):
    https://copy.fail/

    这是 HN 上的讨论:
    https://news.ycombinator.com/item?id=47952181

    各家的报告:
    https://access.redhat.com/security/cve/cve-2026-31431
    https://security-tracker.debian.org/tracker/CVE-2026-31431
    https://ubuntu.com/security/CVE-2026-31431
    https://www.suse.com/security/cve/CVE-2026-31431.html

    实现方法:
    https://github.com/theori-io/copy-fail-CVE-2026-31431

    按目前我了解到的情况,先排查影响,然后禁用 algif_aead ,最后要重启一下生效
    楼主不是信息安全专家,具体还得等大佬补充
    24 replies    2026-04-30 15:15:22 +08:00
    wfg
        1
    wfg  
       8h 47m ago via iPhone
    2017 年后还是从现在开始 17 年之后?
    ggdxwz
        2
    ggdxwz  
    OP
       8h 43m ago
    @wfg #1 2017 H2 引入的漏洞
    minikekeke
        3
    minikekeke  
       7h 48m ago
    @ggdxwz 我看见第一眼以为是 17 年后才会有问题......那样的话就不管了
    elboble
        4
    elboble  
       7h 47m ago
    呃,运维要忙死了
    arfa
        5
    arfa  
       7h 28m ago
    测试了几个新的系统,都给攻破了,老旧的系统竟然没有事
    ggdxwz
        6
    ggdxwz  
    OP
       7h 0m ago
    @arfa #5 我试了一下,ARM 开发板好像没事,HN 评论说目前 Payload 是针对 x86_64 的,但其他架构改改就能用
    villivateur
        7
    villivateur  
       6h 55m ago
    目前能想到一个危害是,现在很多 AI agent 是以非 root 用户运行的,如果 agent 被投毒,利用此漏洞可以直接提权到 root 。
    还有就是,配合其他远程访问漏洞,比如 nginx 如果有漏洞,本来是 www-data 用户的权限,可以提升至 root 。
    ggdxwz
        8
    ggdxwz  
    OP
       6h 44m ago
    @villivateur #7 是这样的,就像一个放大器。Agent 投毒一个中转站就能实现,甚至中转站供应链出问题都有极大风险
    zxp
        9
    zxp  
       6h 16m ago   ❤️ 1
    以防有人需要,源站上写了临时解决方案,就是临时禁掉 algif_aead 核心模块。

    ```bash
    echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif-aead.conf
    rmmod algif_aead 2>/dev/null
    ```
    andlp
        10
    andlp  
       5h 57m ago
    总结
    该脚本的目的是在系统上创建一个后门,可能是通过修改 su 命令文件来获得 root 权限。
    利用网络套接字( socket )和一些加密伪装,隐藏了与远程主机的通信。
    通过修改关键的系统文件,特别是 su ,它能够使攻击者获得管理权限。

    隐藏的后门分析:

    通过修改 /usr/bin/su ,攻击者可以在没有用户知情的情况下获取 root 权限。
    套接字部分可能与远程控制服务器通信,允许攻击者远程执行命令。
    可能通过网络连接执行其他命令或传输敏感数据。

    结论:这段代码显然是恶意的,试图在系统中安装后门,并且可能被用于进一步控制目标系统。
    Tiande
        11
    Tiande  
    PRO
       5h 55m ago
    好离谱
    ajax10086
        12
    ajax10086  
       5h 10m ago
    打完补丁安心出去玩
    tyzrj766
        13
    tyzrj766  
       5h 7m ago
    还好是五一前,五一发漏洞都得炸了
    herozzm
        14
    herozzm  
       5h 3m ago via iPhone
    17 年现在才被发现?
    w568w
        15
    w568w  
       4h 59m ago   ❤️ 2
    以防你想问:不,大部分 Android 手机禁用了 algif_aead 等内核模块,因此可能不能利用这个漏洞提权。
    cnevil
        16
    cnevil  
       4h 52m ago
    @andlp 换个好点的 ai 吧。。
    1. 核心触发原语:AF_ALG 与特定加密算法
    脚本开头使用了 a = s.socket(38, 5, 0)。其中 38 对应的是 AF_ALG ( Linux Kernel Crypto API 的用户态接口)。
    接着它绑定了特定的加密算法:a.bind(("aead", "authencesn(hmac(sha256),cbc(aes))"))。
    algif_aead 是内核中处理 AEAD (认证加密)的核心模块。
    authencesn 是一种用于 IPsec 的加密包装器,它需要处理扩展序列号( ESN )。在计算 HMAC 时,它需要对序列号的字节进行重新排列,这会导致它在目标缓冲区中执行一次 4 字节的临时写入( Scratch Write )。
    2. 内存越权:splice 与页缓存投毒
    脚本中使用了 os.splice (对应 C 语言的 splice() 系统调用)。splice 可以在两个文件描述符之间移动数据,而不需要将数据复制到用户空间(即零拷贝)。
    在这个 payload 中,攻击者通过 splice 将目标文件(这里是高权限的可执行文件 /usr/bin/su )映射到了加密套接字( Socket )的内存空间中作为“密文”输入。
    漏洞的致命点在于:algif_aead 模块在执行加密操作时,默认是 “原地操作”( in-place ) 的(即源缓冲区和目标缓冲区是同一个)。当输入数据是通过 splice 从普通文件映射过来时,目标散列表( Scatterlist )实际上直接指向了该文件在内核中的 页缓存( Page Cache )。
    3. 利用过程:积少成多的 4 字节写入
    当脚本调用 u.recv() 触发解密操作时,底层的 authencesn 算法会将攻击者通过 sendmsg 传入的 4 字节序列号( seqno_lo ,即 payload 中的恶意指令片段),直接覆盖写入到由于原地操作而共享的“目标缓冲区”中。
    因为目标缓冲区就是 /usr/bin/su 的页缓存,这就导致内核的只读页缓存被直接篡改了 4 个字节。
    payload 中的 while i<len(e): c(f,i,e[i:i+4]); i+=4 是一个循环。它将一大段经过 zlib 压缩的 Shellcode (提权恶意代码)解压后,每次 4 个字节,利用上述机制一点点“缝合”进内核中 /usr/bin/su 的内存映像里。
    4. 提权执行
    当 4 字节循环写入完成后,内核中缓存的 /usr/bin/su 已经被注入了恶意的 Shellcode 。
    此时脚本执行 g.system("su")。由于 Linux 内核会优先从页缓存中读取文件执行,加上 su 本身带有 setuid 属性(执行时拥有 root 权限),被投毒的 Shellcode 就会以 root 权限运行,从而完成提权
    ------
    3. Linux 本该有的保护机制去哪了?(漏洞的真正命门)
    是的,Linux 有一个极其核心的机制:内存权限控制( Memory Management Permission )。
    在这个漏洞场景中,攻击者是用只读( Read-Only )权限打开的 /usr/bin/su 。
    按照 Linux 正常的逻辑,当 authencesn 算法试图把那 4 字节的脏数据写到 /usr/bin/su 的页缓存时,内存管理系统( MM subsystem )应该立刻跳出来大喊:“停下!这个页面是只读的!”然后触发一个缺页异常( Page Fault ),直接把操作干掉,甚至把当前的进程杀掉( Segmentation Fault )。
    如果这个机制生效,那 4 字节根本写不进去!
    那为什么没生效呢?这恰恰是这个漏洞( CVE )最核心的代码 Bug 所在:
    内核的 algif_aead 模块在处理 splice 传过来的内存页( Page )时,它底层调用的是 kmap_atomic 之类的底层函数去直接映射物理内存。
    这个底层的写入操作绕过了 VFS (虚拟文件系统)的写权限检查,也绕过了正常的 Copy-on-Write (写时复制)机制。它盲目地假设:“既然你把这个缓冲区指定为加密/解密的输出目标( dst ),那它一定在前面已经被检查过是可写的了。”
    fr13ncl5
        17
    fr13ncl5  
       4h 34m ago
    @zxp 可能会导致代理出问题
    blackmirror
        18
    blackmirror  
       4h 31m ago
    五一劳动节,劳动个不停,真应景了
    ggdxwz
        19
    ggdxwz  
    OP
       3h 41m ago
    @blackmirror #18 至少没有放假那几天说,收到消息赶紧远程把补丁打了
    f1ynnv2
        20
    f1ynnv2  
       3h 4m ago
    能通过 apt 打补丁吗
    HFX3389
        21
    HFX3389  
       2h 58m ago
    @andlp #10 你这是哪门子的 AI ,牛头不对马嘴的
    jimchiyuan
        22
    jimchiyuan  
       1h 22m ago
    我试了 debian13 和 ubuntu 2404 都可以提权
    lanhiy
        23
    lanhiy  
       1h 12m ago
    cs8425
        24
    cs8425  
       1h 2m ago
    @cnevil #16
    @HFX3389 #21
    也有可能是上下文的问题
    我用 gemma 4 E4B Q4_K_M 完全离线的情况来说
    只丢 poc 的 code 总结出来就类似 @andlp #10
    https://xint.io/blog/copy-fail-linux-distributions 内 "The Root Cause: Page Cache Pages in the Writable Scatterlist"到"The Exploit"这几段乱的内容+poc code 丢进去
    总结出来的就是正确的:
    执行: 所有 Shellcode 片段都被写入后,g.system("su") 执行。由于 /usr/bin/su 的 Page Cache 已经被 Shellcode 覆写,当 su 被载入执行时,它会执行攻击者植入的代码,并以 root 权限运行。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5089 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 79ms · UTC 08:17 · PVG 16:17 · LAX 01:17 · JFK 04:17
    ♥ Do have faith in what you're doing.