苹果十年老洞 CVE-2026-112445 修掉了:最简单 macOS 提权 PoC 公开下载

导语:2020 年就贴在 GitHub 上的一个 launchd 配置,六年没人报告,2026 年 10 月被研究者翻出来,苹果用一次更新把它埋了,却没在安全公告里写它的编号。


一个提问,埋了十年的雷

事情的起点在 2020 年 11 月 23 日。有人在 GitHub 的 clean-osx 仓库提了个 issue #1,标题就叫 “What is uscwoap?”—— macOS 早就换成 zsh 了,系统域里的 com.apple.xpc.uscwoap 为什么还在调 bash?

回答贴出了那个 plist 的全文:BootShell = true、三个标准流全部指向 /dev/console、ProgramArguments = [bash, -sh]。当时那位答主还贴心地提醒:这玩意儿关系到系统从单用户模式启动,建议你别乱卸载或改它。

六年过去,这个 job 一直躺在 /System/Library/LaunchDaemons/ 里,直到 10 月 29 日被 WeBin Lab 的研究者 YingQi Shi(@Mas0nShi)报告,拿到编号 CVE-2026-112445。

CVE-2026-112445 时间线

原理:一个 root bash,读着普通用户的终端

三件事凑在一起就出事。

第一,这个 job 在 launchd 的系统域里,配置中没有指定 User,所以 bash 是以 root 身份跑的;BootShell 只说明它的设计用途是单用户模式救援,不影响它在正常桌面会话里也能被拉起来。

第二,StandardInPath 指向 /dev/console。在图形登录会话中,这个设备的属主是当前那个登录用户——通常是个非管理员。而读取它的 bash 是 root。

第三,TIOCSTI 这个终端接口可以把字符塞进终端的输入队列。能影响输入队列,就能影响 bash 从 stdin 读到的东西。

于是权限边界正好卡在输入方和执行方之间:输入来自普通用户,执行者是 root,中间没有任何一次管理员授权校验。

PoC 怎么跑通的

CVE-2026-112445 提权链路

作者录屏里的画面很朴素:普通用户在交互式终端里执行 ./exp,提示符从 jeffrey@jeffreys-Mac-mini poc % 变成了 bash-3.2#,whoami 回一个 root,id 打出 uid=0(root) gid=0(wheel) 和一长串组,连 com.apple.access_ftp 都在里面。

链路是六步:打开 /dev/console 并用 setsid 加 TIOCSCTTY 把它变成自己的控制终端;用 TIOCSTI 把 chown 0:0 加 chmod 4755 逐字符注入进去;用 launchctl kickstart 拉起那个系统 job;root bash 把命令读走执行,把 helper 变成 SUID root;最后执行 helper 的 --shell 分支,setgid(0)、setuid(0) 之后 exec 一个 /bin/bash -p -i。

全程没碰过管理员密码。

苹果修了,但公告里偏偏少了这一条

macOS Golden Gate 27.2 的做法很直接:把 com.apple.xpc.uscwoap 这个配置整个删掉。这次更新一次修了 263 个 CVE,同批还发布了 Sequoia 15.8.2 和 Tahoe 26.7.2。

耐人寻味的是另一件事。苹果给了 CVE-2026-112445 这个编号,却没有把它写进安全公告。我核对了 support.apple.com/en-us/149521 这份公告全文:112441、112442、112443、112444、112446、112447 都在,唯独 112445 这一位被跳了过去。公告里 “YingQi Shi (@Mas0nShi) of DBAppSecurity’s WeBin lab” 的名字还在——他别的洞被列着,只有这一条编号消失了。

研究者自己的说法很克制:苹果没把编号写进公告,原因不明。他的原话是,这漏洞”好到让人怀疑它是不是苹果留的后门”。是玩笑还是吐槽,没有答案。推文下有人半开玩笑地说”别发这种你可能被 dup 的漏洞”,还有人问赏金、问能不能绕过 MDM 对公司锁定 Mac 的管理限制——这些回答我没在推文里看到。

紫队视角:难的不是发现,是有人愿意报告

红队视角:本地提权是横向移动和权限维持的常备零件,这条链的性价比极高——不需要凭据,不需要额外前置,前提只有一个,你已经是这台机器控制台上的登录用户。评论区那句”十年老洞总是太简单了不像真的”,说得其实挺准。

蓝队视角:防线不在于开不开 Lockdown Mode(有人在评论区问这个),而在于三件事——一是尽快升级到 27.2;二是在自己的设备上审一遍 /System/Library/LaunchDaemons,看有没有以 root 跑、stdin 接到设备节点的 job;三是留意系统目录里 setuid 二进制的变化。另外提醒一句,这类 PoC 的意义在于证明链存在,而不是人人可打:没有本地账户,一切归零。

PoC 下载与使用

研究者已经把源码和演示录屏都放出来了,仓库地址如下,README 与源码均为公开原始文件:

  • 仓库:https://github.com/Mas0nShi/CVE-2026-112445
  • 源码 exp.c:https://raw.githubusercontent.com/Mas0nShi/CVE-2026-112445/main/exp.c
  • 漏洞分析 README:https://raw.githubusercontent.com/Mas0nShi/CVE-2026-112445/main/README.md
  • 演示录屏 record.mov:https://raw.githubusercontent.com/Mas0nShi/CVE-2026-112445/main/record.mov

仓库目前 48 星、6 fork,只有 exp.c、README.md 和一段录屏,没有 release,也没有 LICENSE 文件。用法是编译后在交互式终端里运行,程序自己会检查是不是 tty:先 cc exp.c -o exp,再 ./exp,成功后它会把自己复制成 SUID root 的副本并拉起 root shell。

使用边界说清楚:这是本地提权 PoC,只能在你自己拥有或已获授权的设备上做验证;它假定你已经是那台机器的本地登录用户,拿它去碰未授权的系统属于另一回事。仓库没有 LICENSE,二次分发和商用条款不明,企业内网使用前建议先跟作者确认。

受影响范围以苹果公告为准:在 uscwoap 这个 job 还在的 macOS 版本上均可能受影响,修复版本是 macOS Golden Gate 27.2,建议同时升级 Sequoia 15.8.2 与 Tahoe 26.7.2。PoC 目前也已被 Vulners、Sploitus 等平台收录。

版权声明:本文由华盟网原创发布,保留所有权利。配图由华盟网授权使用。

© 版权声明
THE END
喜欢就支持一下吧
点赞8 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容