Internet Printing Protocol
Reading time: 7 minutes
tip
学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
学习和实践 Azure 黑客技术:
HackTricks Training Azure Red Team Expert (AzRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。
互联网打印协议 (IPP),如 RFC 2910 和 RFC 2911 中所规定,是网络打印的事实标准。它基于 HTTP/1.1(无论是明文还是 TLS)并提供了丰富的 API,用于创建打印作业、查询打印机功能和管理队列。现代扩展如 IPP Everywhere 甚至允许在移动和云环境中进行无驱动打印,同时相同的数据包格式也被用于 3D 打印机。
不幸的是,暴露端口 631/tcp(以及用于打印机发现的 631/udp) 通常会导致严重的安全问题——无论是在传统的办公室打印机上,还是在任何运行 CUPS 的 Linux/Unix 主机上。
Quick PoC – crafting raw IPP with Python
import struct, requests
# Minimal IPP Get-Printer-Attributes request (operation-id 0x000B)
ipp = struct.pack(
">IHHIHH", # version 2.0, operation-id, request-id
0x0200, # 2.0
0x000B, # Get-Printer-Attributes
0x00000001, # request-id
0x01, 0x47, # operation-attributes-tag, charset attr (skipped)
) + b"\x03" # end-of-attributes
r = requests.post("http://printer:631/ipp/print", headers={"Content-Type":"application/ipp"}, data=ipp)
print(r.status_code, r.content[:40])
枚举与侦察
1. Nmap NSE
# run all CUPS/IPP scripts
nmap -sV -p631 --script=cups* <target>
# or only basic info
nmap -p631 --script=cups-info,cups-queue-info <target>
cups-info
脚本提取模型、状态和队列统计信息,而 cups-queue-info
列举待处理的作业。
2. 来自 CUPS 的 IPP 工具
ippfind
– 多播/UDP 发现(适用于 cups-browsed):
ippfind --timeout 3 --txt -v "@local and port=631" # 列出打印机
ipptool
– 在 .test 文件中定义的任意请求:
ipptool -tv ipp://<IP>/ipp/print get-printer-attributes.test
捆绑的 get-printer-attributes.test 文件查询固件版本、支持的文档格式等。
3. Shodan / Censys dorks
shodan search 'product:"CUPS (IPP)" port:631'
超过 70,000 个主机在2025年4月公开暴露CUPS。
最近的漏洞 (2023-2025)
年份 | CVE ID(s) | 受影响组件 | 影响 |
---|---|---|---|
2025 | CVE-2023-50739 | Lexmark固件 (IPP解析器) | 堆溢出 → 通过Wi-Fi/LAN的RCE |
2024 | CVE-2024-47076, 47175, 47176, 47177 | cups-browsed, libcupsfilters, libppd, cups-filters | 在任何启用CUPS浏览的Linux桌面/服务器上实现完全未认证的RCE链 |
2024 | CVE-2024-35235 | cupsd 2.4.8- | 符号链接技巧 → 任意 chmod 666 → 权限提升 |
2023 | CVE-2023-0856 (佳能) + Pwn2Own | sides 属性中的堆溢出 → 远程代码执行 |
cups-browsed RCE链 (2024年9月)
cups-browsed
在 UDP/631 上监听打印机广告。- 攻击者发送一个指向恶意IPP URL的伪造数据包 (CVE-2024-47176)。
libcupsfilters
自动获取远程 PPD 而不进行验证 (CVE-2024-47076 & 47175)。- 精心制作的PPD利用 foomatic-rip 过滤器在每次打印时执行任意shell命令 (CVE-2024-47177)。
概念验证代码在研究者的博客上公开,利用该漏洞 不需要认证;对UDP/631的网络访问即可。
临时缓解措施
sudo systemctl stop cups-browsed
sudo systemctl disable cups-browsed
sudo ufw deny 631/udp # or equivalent firewall rule
补丁在2024年10月由主要发行版发布 - 确保 cups-filters ≥ 2.0.0。
cupsd符号链接 Listen
配置错误 (CVE-2024-35235)
在 cupsd.conf 的 Listen
指令中放置符号链接会导致 cupds (root) 对攻击者选择的路径执行 chmod 666
,从而导致可写的系统文件,并且在Ubuntu上,通过恶意PPD与 FoomaticRIPCommandLine
实现代码执行。
攻击技术
- 未经身份验证的原始打印作业 - 许多打印机接受
POST /ipp/print
而无需身份验证。恶意的 PostScript 负载可以在高端设备上调用 shell 命令 (system("/bin/nc ...")
)。 - 作业劫持 -
Cancel-Job
后跟Send-Document
允许攻击者在文档被物理打印之前替换其他人的文档。 - SNMP → IPP 组合 - 默认社区
public
通常会泄露 IPP URL 中所需的内部队列名称。
防御最佳实践
- 及时修补 CUPS 和打印机固件;订阅供应商 PSIRT 信息。
- 禁用
cups-browsed
和 UDP/631,除非需要零配置打印。 - 将 TCP/631 限制在受信任的子网/VPN,并强制使用 TLS (ipps://)。
- 要求 Kerberos/Negotiate 或证书身份验证,而不是匿名打印。
- 监控日志:
/var/log/cups/error_log
配置为LogLevel debug2
将显示不可靠的 PPD 下载或可疑的过滤器调用。 - 在高安全性网络中,将打印移至一个加固的、隔离的打印服务器,该服务器仅通过 USB 将作业代理到设备。
参考文献
- Akamai – “CUPS中的关键Linux RCE漏洞 — 我们所知道的以及如何准备”,2025年4月。
- Debian安全跟踪器 – CVE-2024-35235 详细信息。
tip
学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
学习和实践 Azure 黑客技术:
HackTricks Training Azure Red Team Expert (AzRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。