Ubuntu权限提升常见漏洞及利用方式
漏洞原理:Linux内核OverlayFS文件系统未正确验证用户名称空间的文件系统功能应用,允许非特权用户通过overlayfs挂载绕过权限检查,设置任意文件能力(capability),最终提升至root权限。
适用版本:Ubuntu 14.04/16.04/18.04/20.04/20.10 LTS等。
复现步骤:
unshare
创建新的用户和挂载命名空间;/proc/self/setgroups
、/proc/self/uid_map
、/proc/self/gid_map
映射用户ID;漏洞原理:Linux内核管道(pipe)缓存机制存在缺陷,攻击者可通过精心构造的输入,将数据覆盖至只读文件的缓存页,且修改会同步至磁盘,绕过文件只读权限限制。
适用版本:Ubuntu 21.10及使用Linux内核5.8及以上版本的系统(如5.13.0-30-generic)。
复现步骤:
/etc/passwd
,添加root用户条目(如hacker::0:0::/root:/bin/bash
);/etc/passwd
文件(命令示例:./dirtypipe /etc/passwd 1 /tmp/passwd
);su hacker
(无需密码),通过id
命令确认UID=0(root权限)。漏洞原理:Ubuntu的AppArmor防护机制存在三个绕过路径,允许非特权用户突破命名空间限制,获取root权限:
unshare
创建无限制命名空间;kernel.apparmor_restrict_unprivileged_unconfined=1
,阻断aa-exec滥用;漏洞原理:sudo工具的-h/--host
选项未严格限制其用途,本应与-l/--list
配合查询远程主机权限,但实际可结合命令执行或文件编辑操作,绕过权限检查实现提权。
适用版本:sudo 1.8.8 < 版本 <= 1.9.17(Ubuntu 24.04自带sudo 1.9.15p5受影响)。
复现步骤:
/etc/sudoers
文件(使用visudo
命令),添加ubuntu ci.test.local = NOPASSWD:ALL
(允许ubuntu用户无需密码以ci.test.local身份执行所有命令);sudo -h ci.test.local
(验证配置生效),随后通过sudo -i -h ci.test.local
获取root shell。-h
选项的权限限制逻辑。漏洞原理:Ubuntu 16.04等旧版本内核的eBPF(扩展伯克利包过滤器)bpf(2)
系统调用中,验证器模块存在计算错误,非特权用户可通过恶意BPF程序实现任意内存读写,进而提升至root权限。
适用版本:Ubuntu 16.04(内核4.4.0-116-generic及以下)。
修复建议:禁用非特权用户的eBPF功能,通过以下命令设置:
echo 1 > /proc/sys/kernel/unprivileged_bpf_disabled
或永久生效:
sysctl -w kernel.unprivileged_bpf_disabled=1
。
漏洞原理:Ubuntu Server常用的needrestart工具存在多个本地提权漏洞,包括:
/etc/needrestart/needrestart.conf
文件,禁用解释器扫描功能(如设置$nrconf{scan_interp} = 'none';
)。