通过 CUPS 漏洞实现非特权用户提权至 root,影响 macOS Tahoe、Sequoia 和 Sonoma,涉及 macOS 26.6 / 15.7.8 / 14.8.8 之前的版本。



该漏洞源于特权 cupsd 守护进程中两个相互串联的逻辑缺陷。
1. 特权认证令牌跨越信任边界被转发。
当 CUPS 探测新注册的打印机时,它会将一个有效的 Local 认证令牌转发给打印机的后端——即由打印机的 device-uri 指定的端点。由于非特权用户可以控制该 device-uri,他们可以注册一台指向自己控制的监听器的打印机,并接收一个本不应离开受信任子系统边界的令牌。该设计假定后端是受信任的;允许非特权用户注册打印机破坏了这一假设。
2. 在认证验证完成之前即可触达 root 特权文件 I/O。
在打印机注册期间一个可稳定复现的时间窗口内,cupsd 会在认证验证完成之前以 root 权限执行文件写入。该特权 I/O 并未以认证检查的完成为前提,且在写入发生时,目标路径和文件内容均受攻击者影响。
python3 poc.py
该概念验证分三个阶段串联这两个缺陷。
阶段 1 — 令牌捕获。
攻击者注册一台打印机,其 device-uri 指向自己控制的本地监听器,然后触发一次探测。cupsd 会将一个有效的 Local 认证令牌转发给攻击者控制的监听器。
阶段 2 — 令牌重放。
攻击者重放捕获的令牌,注册第二台打印机,其 device-uri 使用 file:// 协议,指向攻击者选择的任意非 SIP 保护路径。
阶段 3 — 以 root 身份任意写入。
攻击者向第二台打印机提交一个包含攻击者控制内容的打印任务。cupsd 会以 root 身份将任务数据写入指定路径。任何阶段均无需用户交互。
随后,脚本将验证该文件是以 root 身份创建的,从而证明该漏洞。
由 Dallas Dubs 独立发现;Apple 同时致谢 Aaron Grattafiori - NVIDIA AI Red Team、XBreach.ai、Andreas Jaegersberger 与 Nosebeard Labs 的 Ro Achterberg