一、漏洞概述
漏洞名称:Linux sudo 本地提权漏洞(CVE-2025-32462、CVE-2025-32463)
漏洞等级:高危
发布日期:2025 年 7 月 1 日更新日期:2025 年 7 月 1 日
漏洞描述:近日,Linux sudo 工具公开存在两个紧密关联的本地提权漏洞(CVE-2025-32462 / CVE-2025-32463)。主流 Linux 发行版默认配置下,攻击者可利用这两个漏洞从普通用户权限提升至 root 权限。
CVE-2025-32462 Linux sudo 本地权限提升漏洞在于 sudo 的 -h(--host)选项存在缺陷,该选项本应与 -l(--list)配合使用来查询远程主机权限,但实际未严格限制其仅用于查询功能,导致攻击者可能结合命令执行或文件编辑操作实现本地提权。
CVE-2025-32463 Linux sudo 本地权限提升漏洞存在于 sudo 的 chroot 功能中,当加载目标位置的 nsswitch.conf 配置文件时,会同时加载对应的动态库,攻击者可通过植入恶意动态库使非 sudoer 组用户获取 root 权限。
二、影响范围
sudo ≤ 1.9.17 的所有版本
依赖 sudo 的 Linux/Unix 发行版(包括但不限于):
RHEL/CentOS 7.x–9.x
Ubuntu 20.04 LTS / 22.04 LTS / 24.04 LTS
Debian 10/11/12
SUSE Linux Enterprise 15 SP4 及更低版本
Fedora ≤ 40
不受影响版本:
sudo ≥ 1.9.17p1(官方已发布修复版本)
三、修复建议:
1、漏洞检测:
终端执行命令检查当前版本:
bash
sudo --version | grep "Sudo version"
若输出结果为 1.9.17 或更低版本,则存在风险。
2、临时处置建议(缓解措施)
禁用 sudoedit 功能:
echo 'Defaults !sudoedit' >> /etc/sudoers.d/mitigation
限制环境变量继承:
echo 'Defaults env_reset' >> /etc/sudoersecho 'Defaults env_delete += "EDITOR SUDO_EDIT"' >> /etc/sudoers
针对CVE-2025-32462漏洞:
检查 sudoers 文件中是否使用了 Host 或 Host_Alias 选项
sudo grep -r "Host|Host_Alias" /etc/sudoers /etc/sudoers.d/
如果发现使用了这些选项,可以临时修改 sudoers 文件,将特定主机名替换为 ALL,或者确保各主机上的sudoers文件仅包含适用于该主机本身的规则。
针对CVE-2025-32463漏洞:
由于没有可用的临时解决方案,强烈建议立即更新至修复版本,若无法立即更新,可以考虑临时禁用 sudo 的 chroot 功能,但这可能会影响依赖此功能的系统操作。
3、彻底修复方案(源码更新)
完整安装步骤(有网络,无网络条件请看无网络安装步骤)
#1、安装编译依赖
yum -y install gcc
#2、下载源码
cd /tmp && wget https://www.sudo.ws/dist/sudo-1.9.17p1.tar.gz
#3、解压并进入目录
tar xzf sudo-1.9.17p1.tar.gz&&cd sudo-1.9.17p1
#4、配置编译选项
./configure \
--prefix=/usr \
--libexecdir=/usr/lib \
--with-secure-path \
--with-all-insults \
--with-env-editor \
--disable-openssl \
--docdir=/usr/share/doc/sudo-1.9.17p1
#5、编译安装
make && sudo make install
#6、强制覆盖旧版本(关键步骤)
sudo make install-binaries
#7、刷新动态链接库缓存
sudo ldconfig
无网络安装步骤(编译服务器执行后,scp打包文件到其他服务器进行配置)
#1、安装编译依赖
yum -y install gcc
#2、下载源码
cd /tmp && wget https://www.sudo.ws/dist/sudo-1.9.17p1.tar.gz
#3、解压并进入目录
tar xzf sudo-1.9.17p1.tar.gz&&cd sudo-1.9.17p1
#4、配置编译选项
./configure \
--prefix=/usr/local/sudo \
--libexecdir=/usr/local/sudo/libexec \
LDFLAGS="-Wl,-rpath,'\$\$ORIGIN/../libexec/sudo'" # 使用相对路径变量
# --disable-openssl #可选参数 如果openssl≤1.1.0可用
# 编译安装到临时目录
make -j$(nproc)
make install DESTDIR=/tmp/sudo-package # 使用DESTDIR不修改系统文件
# 在编译服务器
cd /tmp/sudo-package
# 创建自包含包(保留相对路径)
tar czf sudo-1.9.17p1-deploy.tar.gz \
--transform 's,^usr/local/sudo,sudo,' \
usr/local/sudo
# 检查包内容
tar tf sudo-1.9.17p1-deploy.tar.gz | head
# 使用scp传输(替换为目标服务器IP)
scp sudo-1.9.17p1-deploy.tar.gz root@target-server:/tmp/
# 登录目标服务器
ssh root@target-server
# 解压到系统目录
tar xzf /tmp/sudo-1.9.17p1-deploy.tar.gz -C /usr/local
# 创建系统符号链接
ln -sf /usr/local/sudo/bin/sudo /usr/bin/sudo
ln -sf /usr/local/sudo/sbin/visudo /usr/sbin/visudo
# 设置权限
chmod 4111 /usr/bin/sudo
chmod 755 /usr/local/sudo/libexec/sudo
# 验证库依赖
ldd /usr/bin/sudo | grep sudo_util
# 应显示:libsudo_util.so.0 => /usr/local/sudo/libexec/sudo/libsudo_util.so.0
# 验证安装
sudo --version
验证安装成功
[root@CentOS sudo-1.9.17p1]# sudo --version | grep "1.9.17"
Sudo 版本 1.9.17p1
当前选项:--prefix=/usr --libexecdir=/usr/lib --with-secure-path --with-all-insults --with-env-editor --disable-openssl --docdir=/usr/share/doc/sudo-1.9.17p1
Sudoers 策略插件版本 1.9.17p1
Sudoers I/O plugin version 1.9.17p1
Sudoers audit plugin version 1.9.17p1
如果版本仍未更新,执行以下操作
# 1. 查找所有 sudo 二进制位置
which -a sudo
# 2. 强制覆盖系统路径(通常是 /usr/bin/sudo)
sudo cp /usr/local/bin/sudo /usr/bin/sudo 2>/dev/null
sudo cp /usr/local/sbin/visudo /usr/sbin/visudo 2>/dev/null
# 3. 清除命令缓存
hash -r
# 4. 再次验证
sudo --version
额外说明(重要)
1、为什么版本没更新:
- 旧版本位置在/usr/bin/sudo,新版本默认安装到/usr/local/bin/sudo
- 系统优先使用/usr/bin路径下的旧版本
2、关键配置选项
--perfix=/usr #确保安装到系统目录而非/usr/local
--libexecdir=/usr/lib #重要库文件位置
make install-binaries #强制覆盖二进制文件
3、卸载旧版本(可选)
# 查看旧版本来源
rpm -qf $(which sudo) # CentOS/RHEL
dpkg -S $(which sudo) # Ubuntu/Debian
# 谨慎卸载(如 sudo-1.8.29 等)
sudo yum remove sudo # CentOS/RHEL
sudo apt remove sudo # Ubuntu/Debian
4、编译失败处理:
# 清理编译环境
make distclean
rm -rf Makefile
# 查看详细错误
cat config.log | grep -i error
各项参数说明:
1、--perfix=/usr
- 作用:指定主安装目录
- 详细说明:将软件的核心文件安装在/usr目录下(而不是默认的/usr/local),确保覆盖系统自带版本
- 影响路径:
- 二进制文件:/usr/bin/sudo
- 配置文件:/usr/etc/sudo.conf
- 库文件:/usr/lib/sudo
2、--libexecdir=/usr/lib
- 作用:设置辅助程序目录
- 详细说明:指定sudo内部组件(如sudo_noexec.so等模块)的安装路径为/usr/lib
- 重要性:确保动态加载库能被正确找到,避免 sudo:unable to load plugin 错误
3、--with-secure-path
- 作用:启用安全PATH保护
- 详细说明:
- 锁定sudo执行命令时的PATH环境变量
- 默认值:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
- 安全优势:防止用户通过修改PATH劫持sudo执行的命令
4、--with-all-insults
- 作用:启用所有“侮辱”提示模式
- 详细说明:
- 当用户输入错误密码时,显示幽默告警信息
- 包含的侮辱模式:lassic, cops, csops, goons, hal, python 等
- 实际效果:
$ sudo ls
Password:
Wrong password, you dummy!
5、--with-env-editor
- 作用:启用环境变量编辑器
- 详细说明:
- 允许使用$EDITOR 或 $VISUAL 环境变量指定的编辑器执行 sudoedit
- 使用示例:
export EDITOR=nano
sudoedit /etc/nginx/nginx.conf # 将使用 nano 编辑器
6、--disable-openssl
- 作用:禁用Open SSL支持
7、--docdir=/usr/share/doc/sudo-1.9.17p1·
- 作用:设置文档安装路径
- 详细说明:
- 将手册页(man pages)、示例文件等安装到带版本号的目录
- 默认路径对比:/usr/share/doc/sudo → /usr/share/doc/sudo-1.9.17p1
- 优点:允许同时保留多个版本文档,避免覆盖旧版文档