> 技术文档 > 关于Linux sudo 本地提权漏洞(CVE-2025-32462、CVE-2025-32463)漏洞的修复方案

关于Linux sudo 本地提权漏洞(CVE-2025-32462、CVE-2025-32463)漏洞的修复方案


一、漏洞概述

漏洞名称: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.xUbuntu 20.04 LTS / 22.04 LTS / 24.04 LTSDebian 10/11/12SUSE Linux Enterprise 15 SP4 及更低版本Fedora ≤ 40不受影响版本:sudo ≥ 1.9.17p1(官方已发布修复版本)

三、修复建议:

1、漏洞检测:

终端执行命令检查当前版本:bashsudo --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/sudoln -sf /usr/local/sudo/sbin/visudo /usr/sbin/visudo# 设置权限chmod 4111 /usr/bin/sudochmod 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.17p1Sudoers 策略插件版本 1.9.17p1Sudoers I/O plugin version 1.9.17p1Sudoers 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/nullsudo 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

  • 作用:启用所有“侮辱”提示模式
  • 详细说明:
    • 当用户输入错误密码时,显示幽默告警信息
    • 包含的侮辱模式:lassiccopscsopsgoonshalpython 等
    • 实际效果:
$ 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
    • 优点:允许同时保留多个版本文档,避免覆盖旧版文档