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

发布于:2025-08-04 ⋅ 阅读:(16) ⋅ 点赞:(0)

一、漏洞概述

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

网站公告

今日签到

点亮在社区的每一天
去签到