免责声明
本文所述漏洞复现方法仅供安全研究及授权测试使用;
任何个人/组织须在合法合规前提下实施,严禁用于非法目的;
作者不对任何滥用行为及后果负责,如发现新漏洞请及时联系厂商并遵循漏洞披露规则。
漏洞简述
Linux sudo是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,-h(--host)选项在 2013 年 9 月发布的 Sudo v1.8.8 中实现,此选项允许用户列出当前主机以外的主机的sudo规则
Linux sudo host 权限提升漏洞(CVE-2025-32462)源于sudo 的-h(--host)选项错误应用远程主机规则到本地,攻击者可绕过权限提升至root并执行任意代码
CVE-2025-32462 漏洞自12 年前host选项实现以来就一直隐藏在人们的视线之外,由于它是内置选项,因此无需利用其他漏洞即可提升权限,该漏洞只能通过Host或Host_Alias指令的特定配置才能利用,而这些指令在企业环境中很常见
影响版本
1.9.0 <= sudo <= 1.9.17
1.8.8 <= sudo <= 1.8.32
利用条件
- 本地低权限用户
- 存在基于主机的权限规则:
/etc/sudoers
中定义Host
或Host_Alias
- 知道允许执行命令的远程主机名
漏洞复现与原理分析
一、环境搭建
任意找一个sudo版本在受影响区间的linux系统即可,我这里用的是CentOS7.9,sudo版本如下
创建一个新用户User1,密码为User1111
二、漏洞复现与原理分析
(一) Host_Alias
以下/etc/sudoers
文件片段展示了为User1用户定义的两条规则
此文件分发到三台服务器(LDAPClient、LDAPServer 和 Pentest),目标是限制对LDAPClient服务器的访问,但允许User1用户完全管理LDAPServer服务器
- 前两行是Host_Alias指令,定义包含主机列表的变量
- 第3行的规则使用Host_Alias指令
- 允许User1用户在LDAPServer服务器上以 root 身份执行所有命令
- 明确拒绝LDAPClient服务器上的规则
- 第4行的规则明确允许User1用户在Pentest服务器上执行所有命令
Host_Alias SERVER = LDAPClient, LDAPServer
Host_Alias CLIENT = LDAPClient
User1 SERVER, !CLIENT = NOPASSWD:ALL
User1 Pentest = NOPASSWD:ALL
在LDAPClient服务器执行sudo -l
,可验证User1不允许在LDAPClient服务器上运行任何 sudo 命令,因为!CLIENT
否定指令明确拒绝了它
(二) -h/--host选项
-h host
或--host=host
选项旨在允许用户列出其针对不同主机的 sudo 规则
当User1用户执行设置了host选项的 list 命令时,将显示指定主机的规则,确认User1用户被允许在LDAPServer服务器上执行所有 root 命令
sudo -l -h LDAPServer
(三) 漏洞点
执行sudo或sudoedit命令时,如果host选项引用了一条不相关的远程主机规则,则会导致 sudo 将该规则视为对本地系统有效,因此远程主机规则允许的任何命令都可以在本地计算机上执行
尽管明确拒绝User1用户访问LDAPClient服务器,但可以通过指定LDAPServer服务器的主机选项来实现 root 访问权限
其中sudo -i
的主要作用是 以 root 用户(超级管理员)的身份启动一个交互式的登录shell
还可以指定Pentest服务器以获得完全的 root 访问权限
防御措施
安装最新的 sudo 软件包,此问题目前没有其他解决方法