目录导航
cups-browsed 是什么?
cups-browsed
确实是 CUPS 系统的一部分,它负责发现新打印机并自动将其添加到系统中。非常有趣,我不知道 Linux 会在用户接受或收到通知之前添加在网络上发现的任何东西。
概括
- CVE-2024-47176 | cups-browsed <= 2.0.1 绑定在 UDP INADDR_ANY:631 上,信任来自任何来源的任何数据包,以触发
Get-Printer-Attributes
对攻击者控制的 URL 的 IPP 请求。 - CVE-2024-47076 | libcupsfilters <= 2.1b1
cfGetPrinterAttributes5
未验证或清理从 IPP 服务器返回的 IPP 属性,从而向 CUPS 系统的其余部分提供攻击者控制的数据。 - CVE-2024-47175 | libppd <= 2.1b1
ppdCreatePPDFromIPP2
在将 IPP 属性写入临时 PPD 文件时不会验证或清理它们,从而允许在生成的 PPD 中注入攻击者控制的数据。 - CVE-2024-47177 | cups-filters <= 2.0.1
foomatic-rip
允许通过 PPD 参数执行任意命令FoomaticRIPCommandLine
。
(您能看出这是怎么回事吗?:D)
另外,还会提到几个其他漏洞,它们可能是安全问题,但在与开发人员和 CERT 的对话中几乎被忽略了。它们仍然存在,还有其他几个或多或少可以被利用的漏洞。
漏洞描述
远程未经身份验证的攻击者可以悄悄地用恶意 URL 替换现有打印机的 IPP URL(或安装新的打印机的 IPP URL),从而导致在启动打印作业(从该计算机)时(在该计算机上)执行任意命令。
入口点
- WAN / 公共互联网:远程攻击者向端口631发送UDP 数据包。无需任何身份验证。
- LAN:本地攻击者可以欺骗 zeroconf / mDNS / DNS-SD 广播(我们将在下一篇文章中详细讨论这一点)并实现导致 RCE 的相同代码路径。
引用 CUPS 书籍作者的第一条评论之一,他试图向我解释为什么这并没有那么糟糕:
“我只是指出,公共互联网攻击仅限于直接连接到互联网的服务器”
受影响的系统
CUPS 和 cups-browsed 适用于大多数 UNIX 系统:
- 大多数GNU/Linux 发行版
- 一些BSD。
- Google Chromium / ChromeOS …也许?
- Oracle Solaris
- 可能更多吗?
这个东西是为任何东西打包的,在某些情况下它是默认启用的,在其他情况下则不是,去想象吧🤷。坦白说,几周来,我每天都会扫描整个公共互联网 IPv4 范围好几次,发送 UDP 数据包并记录所有连接回来的东西。我得到了来自数十万台设备的连接,峰值有 200-300K 个并发设备。此文件包含受影响的唯一 Linux 系统的列表。请注意,所有非 Linux 的东西都已被过滤掉。这就是为什么我在过去几周里越来越担心。
修复措施
cups-browsed
如果您不需要该服务(可能您不需要),请禁用并删除该服务。- 更新系统上的 CUPS 包。
- 如果您的系统无法更新,并且由于某种原因您依赖此服务,请阻止所有到 UDP 端口 631 的流量以及可能的所有 DNS-SD 流量(如果您使用 zeroconf,祝您好运)。
完全是个人建议,要么接受要么放弃:我已经看到并攻击了足够多的代码库,以至于从我的任何系统中删除了所有 CUPS 服务、二进制文件和库,并且再也不会使用 UNIX 系统进行打印。我还删除了每个 zeroconf / avahi / bonjour 监听器。你可以考虑这样做。
POC
GitHub:
https://github.com/RickdeJager/cupshax
对最近的 CUPS 漏洞进行快速概念验证。我原本计划对其进行更多清理,但禁令解除的时间比预期的要早得多,因此代码有点仓促。
对于所有技术细节你应该诚实地阅读 Evilsocket 的文章。
这个漏洞是在公共 OpenPrinting CUPS 仓库中发现这个提交后编写的。可能有更干净的注入点。
此 PoC 使用 dns-sd 打印机发现,因此目标必须能够接收广播消息,即位于同一网络上。

用法
该漏洞使用zeroconf
和ippserver
,都可以通过pip安装。
usage: cupshax.py [-h] [--name NAME] --ip IP [--command COMMAND] [--port PORT]
A script for executing commands remotely
options:
-h, --help show this help message and exit
--name NAME The name to use (default: RCE Printer)
--ip IP The IP address of the machine running this script
--command COMMAND The command to execute (default: 'touch /tmp/pwn')
--port PORT The port to connect on (default: 8631)
例如:
python cupshax.py --name "Print to PDF (Color)" \ --command "id>/tmp/pwn" \ --ip 10.0.0.3
漏洞详情
https://www.evilsocket.net/2024/09/26/Attacking-UNIX-systems-via-CUPS-Part-I
视频演示
在此视频中,您可以看到我在我的攻击者机器上(左侧)使用此漏洞的第一个版本来攻击我的新笔记本电脑(一台完全修补的Ubuntu 24.04.1 LTS
运行中cups-browsed 2.0.1
),并且(最终!!!)实现命令执行:
警告
顺便说一句
CERT 的 VINCE 要么有后门,要么有内部泄密,要么对他们添加到披露中的人没有任何审查,因为
我只在那里分享的确切 markdown 报告(包括漏洞)
已经泄露。
