文章总结: 本文披露了sudo权限提升漏洞CVE-2025-32462,该漏洞允许本地用户通过-h参数伪装主机名绕过sudoers规则中的主机限制,在无需特殊权限或复杂攻击的情况下获取root权限。漏洞影响sudo1.8.8至1.9.17版本,藏匿12年未被发现,主要威胁配置了主机限制规则的企业环境。文档提供了漏洞原理分析、利用步骤及修复建议,并提及关联漏洞CVE-2025-32463。 综合评分: 89 文章分类: 漏洞分析,渗透测试,红队,内网渗透,安全工具
[技术深潜] sudo 里藏了 12 年的提权口子,触发只要一个参数
原创
极客零零七 极客零零七
极客零零七
2026年4月30日 07:35 加拿大
在小说阅读器读本章
去阅读
#
今天我们来聊一个让我后背发凉的漏洞。
CVE-2025-32462,sudo 的 host option(-h)参数处理逻辑里有个 bug。这个 bug 不需要任何 shellcode,不需要任何缓冲区溢出技巧,触发条件是一个普通用户加一行命令——只要 sudoers 配置里出现 host 限制规则,本地任意用户就能拿到 root。
更刺激的是:这个 bug 从 2013 年的 sudo 1.8.8 开始就存在了,藏了整整 12 年才被发现。
发现者是 Stratascale 的 Rich Mirch,2025 年 4 月报给 sudo 维护者 Todd Miller,6 月底披露并修复在 1.9.17p1。受影响版本覆盖 1.8.8 到 1.9.17 全系列,几乎所有还在维护的 Linux 发行版的默认 sudo 都中招过——Ubuntu 24.04.1、macOS Sequoia 15.3.2 都是已验证目标。
距离披露快一年了,今天把这个漏洞从原理到利用拆一遍,顺带聊聊为什么这种「逻辑漏洞」比内存破坏漏洞更值得关注。
sudo 的 host option 是什么
先讲清楚 -h 参数是干嘛的,否则后面看不懂。
sudo 的 sudoers 规则可以按主机限定。一条典型规则长这样:
alice webserver01 = (root) /usr/sbin/nginx
意思是:用户 alice 在 webserver01 这台机器上,可以以 root 身份运行 nginx。规则里的 webserver01 就是 host 限定。
在企业环境里,sudoers 文件通常通过 LDAP 或 Puppet 集中分发,同一份配置推到所有机器上。每台机器在解析规则时,会用自己的 hostname 去匹配规则里的 host 字段,只执行匹配自己的那部分。
-h/--host 参数的设计初衷,是让管理员能查询「我在另一台机器上有什么 sudo 权限」:
sudo -l -h webserver02# 列出我在 webserver02 上的 sudo 权限
注意,它的本意只配合 -l(list)使用。文档里写得清清楚楚,2013 年引入这个参数时的 NEWS 文件原话是 “currently only used by the sudoers plugin in conjunction with the -l option”。
问题就出在这个「currently only」上——代码里没有强制限制。
漏洞本质:host 字段被用户控制了
把整个鉴权流程简化成一句话:
sudo 用什么 hostname 去匹配 sudoers 规则,应该由系统决定(gethostname()),但因为
-h参数生效范围没限制,实际可以被用户用命令行参数覆盖。
这就把整个 host 限定模型给击穿了。
举个例子。某公司 sudoers 配置:
Host_Alias PROD = prod-db-01Host_Alias DEV = dev.test.localHost_Alias CI = ci.test.localHost_Alias SERVERS = prod-db-01, dev.test.local, ci.test.local
# 用户 lowpriv 的权限分配:lowpriv SERVERS = (root) ALL # 所有 SERVERS 上有 rootlowpriv !PROD = (root) ALL # 但生产机器上禁止lowpriv CI=(root)ALL#CI 机器单独允许
正常逻辑:lowpriv 在 prod-db-01 上没有 root 权限(被 !PROD 显式拒绝)。
利用:lowpriv 登录到 prod-db-01 后,运行:
sudo -h dev.test.local /bin/bash
sudo 在解析规则时,把 hostname 当成了 dev.test.local,匹配到了 lowpriv SERVERS = (root) ALL 这条规则——dev 在 SERVERS 里,规则成立,授权通过。
下面是HTB Lab中Expressway题目提权后查看到的suderos文件配置以及提权过程:
然后呢?sudo 真的在本地(prod-db-01)启动了一个 root shell。
权限检查用的是远程主机的规则,命令执行用的是本地系统。整个 host 限定机制等于不存在。
为什么藏了 12 年
这种漏洞看起来很「明显」,怎么会 12 年没人发现?我觉得有三个原因:
1. 它不像漏洞,像功能
-h 参数本身就是用来「查别的主机的权限」的。当你看 sudo 源码里 host 字段的处理时,你会觉得「让用户控制 host 是合理的」——直到你意识到这个参数还能配合非 list 操作使用。
代码层面的 bug 极小,可能就缺一个 if (mode != MODE_LIST) 的分支判断。但语义层面的影响是灾难性的。
2. 利用前提需要特定 sudoers 配置
不是所有 sudo 安装都受影响。攻击成立需要:
- sudoers 里有 host 限定规则(Host_Alias 或具体 hostname)
- 用户在某些 host 上有权限、在当前 host 上无权限或权限受限
- 这种配置在小型环境少见,主要出现在用 LDAP/Puppet 集中管理 sudo 的中大型企业
所以普通个人 Linux 用户、单机服务器基本不暴露。但凡是上规模的组织,几乎一定中招。
3. 漏洞挖掘的注意力分布
sudo 历史上的高危漏洞——Baron Samedit(CVE-2021-3156)、CVE-2023-22809——都是内存破坏类。安全研究员的 fuzzing 工具、代码审计的关注点都集中在解析逻辑、堆栈缓冲区上。没人系统性审计「参数语义和执行模式之间的耦合关系」。
这是一种典型的「逻辑漏洞」,它不能被 sanitizer 抓到,不会让进程崩溃,不会触发 KASAN 警告。它只是让授权决策做出了错误的判断。
攻击链还原
整条利用其实非常简单,但完整画一遍能看清防守者要观察什么:
Step 1 侦察 sudoers 配置 └─sudo-l # 列出当前用户的权限 sudo-ll # 详细模式,显示所有规则 cat /etc/sudoers /etc/sudoers.d/* (如果可读)
关键观察:是否有 host_alias、是否有 !host 否定规则、 是否提到了"别的主机名"
Step 2 识别可利用的远程 host └─ 找到一个:当前用户在该 host 上有 (root) ALL 权限的规则 常见目标:开发机、CI 机器、跳板机、测试服务器
Step 3 触发漏洞 └─ sudo -h <target-host> /bin/bash 或 sudo -h <target-host> -i 或 sudoedit -h <target-host> /etc/shadow
注意:sudo 会打印 "a remote host may only be specified whenlistingprivileges"的警告,但仍然给你root shell
Step 4 权限维持 └─ 拿到 root 后的常规操作: -写SSHkey到 /root/.ssh/authorized_keys - 添加新的 sudo NOPASSWD 规则 - 安装内核模块 / 修改 PAM
整条链没有任何「攻击痕迹」是 EDR 能直接捕获的,因为它本身就是 sudo 的合法行为。日志里能看到的只有一条 sudo 调用记录,看上去和正常使用没区别。
顺带说一下 CVE-2025-32463(chroot 漏洞)
这个 CVE 和 32462 是同一批披露、同一个 patch 修复的,发现者也是 Rich Mirch。两个一起看更完整。
CVE-2025-32463 是 sudo -R/--chroot 参数的问题。1.9.14 版本引入了一个改动:「在评估 sudoers 规则时,先用用户指定的 chroot 路径解析符号链接」——听起来很合理,但意味着在还没鉴权通过之前,sudo 就开始读用户控制的目录了。
具体利用:攻击者在自己控制的目录下放一个伪造的 /etc/nsswitch.conf,里面指向恶意 .so 文件,然后:
sudo -R /tmp/attacker-controlled-dir true
sudo 在解析路径时通过 NSS 加载了恶意共享库,直接以 root 身份执行了攻击者代码。这个比 32462 更狠:不需要 sudoers 给你任何权限,任何能登录的本地用户都能利用。
两个漏洞放一起看,反映了 sudo 这个软件的一个共性问题:为了支持复杂的鉴权场景(host 限定、chroot 隔离),引入了大量在「鉴权完成前」就要解析的用户输入,攻击面被放大了。
参考资料
- https://www.exploit-db.com/exploits/52354
- https://www.stratascale.com/vulnerability-alert-CVE-2025-32462-sudo-host
- https://www.sudo.ws/security/advisories/host_any/
- https://nvd.nist.gov/vuln/detail/CVE-2025-32462
- https://thehackernews.com/2025/07/critical-sudo-vulnerabilities-let-local.html
思考题:你管理过的环境里,sudoers 配置是按机器一份还是全公司一份?这次漏洞之后你会调整策略吗?留言聊聊
关注「极客零零七」,每周实战攻防干货。
回复「提权」获取 Windows + Linux 提权速查表
回复「sudo」获取 sudo 安全配置审计脚本
往期推荐
Windows提权完全指南
[技术深浅] Linux提权完全指南
从网线到域控:一次完整AD渗透的全流程复盘
[技术深浅] AD域渗透攻击链全解
AD环境信息收集:域用户枚举
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:极客零零七 极客零零七 极客零零七《[技术深潜] sudo 里藏了 12 年的提权口子,触发只要一个参数》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。


![[技术深潜]sudo里藏了12年的提权口子,触发只要一个参数](/images/random/titlepic/13.jpg)







评论