仅限授权测试/研究使用。 仅对你拥有或明确获得授权测试的系统运行此 PoC。
本仓库包含针对 CUPS 2.4.16 中本地打印机漏洞的、面向系统 CUPS 的复现。
该实现基于已公开的 CUPS 漏洞复现开发,并经过调整以针对已在运行的系统 CUPS 安装工作,而无需单独安装的 CUPS 构建版本和以 root 运行的复现框架。
复现遵循以下总体链条:
CUPS 2.4.16
│
▼
本地身份验证质询
│
▼
攻击者控制的 IPP 端点
│
▼
Authorization: Local <token>
│
▼
已认证的 CUPS 管理
│
▼
CUPS-Create-Local-Printer
│
▼
file:// 设备 URI
│
▼
打印机/任务竞态
│
▼
Root 拥有的目标文件
该漏洞利用依赖竞态,因此并非每次尝试都能保证成功执行。
已公开的复现被设计为一个受控的漏洞框架。特别是,它假定存在专用的 CUPS 安装,并执行适用于复现环境但不代表已在运行的发行版安装的设置/重置操作。
本实现则:
ipptool 二进制文件。cups-create-local-printer.test 定义。Local 授权令牌。file:// 原语。在作者的实验环境中测试通过:
ipptool测试定义预期位于:
/usr/share/cups/ipptool/cups-create-local-printer.test
使用以下命令检查你的安装:
cupsd -v
which ipptool
find /usr/share/cups -name 'cups-create-local-printer.test' 2>/dev/null
通过环境变量配置攻击者身份和目标路径:
export CUPS_ATTACKER="$USER"
export CUPS_TARGET="/tmp/cups-poc-target"
python3 exploit.py
对于受控的权限提升复现,请选择适合你隔离测试环境的目标。
该脚本还默认使用 /etc/sudoers.d/ 下的 sudoers 风格目标,因此不要在生产系统上随意运行它。
该 PoC 启动一个 IPP 监听器,并使 CUPS 对其发起身份验证。监听器最初返回 401 质询,内容为:
WWW-Authenticate: Local trc="y"
随后的请求包含:
Authorization: Local <token>
然后该令牌被复用于本地 CUPS 管理端点。
复现使用:
CUPS-Create-Local-Printer
并带有 file:// 设备 URI。
候选循环反复执行打印机操作,包括:
CUPS-Add-Modify-Printer
CUPS-Accept-Jobs
Resume-Printer
Print-Job
该竞态被有意重复,因为单次尝试可能无法成功。
本仓库是一个改编版本,而非规范的上游实现。
请求构建逻辑和利用序列基于已公开的复现。主要变化在于针对现有系统 CUPS 安装运行,并移除了复现环境的设置/重置假设。
有关权威的漏洞信息和原始复现,请参阅上游 OpenPrinting CUPS 安全公告和仓库。
未经授权,请勿对 CUPS 安装使用此工具。
对于防御性验证,有用的指标包括:对攻击者控制端点的意外 IPP 请求、异常的 Local 身份验证交换、意外本地打印机的创建,以及可疑的打印机/任务活动。