Ubuntu Exploit 攻击的原理概览
在 Ubuntu 上,攻击通常沿着“发现入口 → 触发缺陷 → 权限提升 → 持久化/横向移动”的链路展开。由于 Ubuntu 默认允许非特权用户命名空间(如 kernel.unprivileged_userns_clone),本地用户可借此访问更宽的内核攻击面;同时,桌面组件(如 accounts-daemon、gdm3)与系统服务(如 snapd)的本地逻辑缺陷,常被组合利用实现本地提权(LPE)。近年来,内核子系统如 nftables 与 af_unix 也频繁曝出可被利用的漏洞,成为攻击者的重点目标。
典型攻击面与原理
内核子系统缺陷
• nftables:作为内核包过滤的“基于寄存器的虚拟机”,由表/链/规则/表达式构成,表达式对象含函数指针表(vtable)。当解析/对齐/边界检查存在缺陷,或被kASLR绕过时,可劫持执行流实现 LPE。实战中常通过用户命名空间进入该攻击面。CVE-2023-35001 就是一例在 Pwn2Own 中展示的 nftables 提权路径。
• af_unix 引用计数/UAF:TyphoonPWN 2025 披露的 Ubuntu 6.8.0-60-generic 内核问题源于补丁不匹配,导致 oob_skb 引用计数失衡,触发对已释放 sk_buff 的“释放后重用”。攻击者通过提升 unix_tot_inflight、配合 FUSE 暂停内核线程、再喷射受控对象,完成从释放到复用的“分离阶段”,最终劫持控制流获取 root。
用户态服务与桌面组件逻辑缺陷
• accountsservice + gdm3 竞态/权限降级:将用户主目录的 .pam_environment 链接到 /dev/zero 会让 accounts-daemon 陷入无限读取而占用 100% CPU 并发生权限降级;随后通过 SIGSTOP/SIGSEGV 与 gnome-initial-setup 的配合,可在登录界面触发“创建管理员账户”对话框,从而无凭据获得 sudo 权限。该问题影响多个仍在维护的 Ubuntu 版本。
• snapd(Dirty Sock)本地 API 越权:默认安装的 snapd 通过 /run/snapd.socket(0666) 提供本地 REST API,早期版本在解析请求时将可控数据覆盖到 UID 检查变量,导致任意 API 调用。利用该缺陷可创建本地用户或侧载恶意 snap,进而获取 root。
容器/挂载与动态链接劫持
• OverlayFS 权限检查绕过 + LD_PRELOAD:通过两次 mount/unmount 与 rename 操作,将 /etc/ld.so.preload 变为可写,写入恶意库实现 getuid 劫持,从而在运行 su 等 setuid 程序时提升为 root。该路径展示了“利用挂载命名空间与文件权限检查缺陷 + 动态链接器劫持”的经典组合。
常见利用步骤示意
防护要点