cupshax POC CVE-2024-47176 47076 47175

cupshax POC CVE-2024-47176 47076 47175

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.1b1cfGetPrinterAttributes5未验证或清理从 IPP 服务器返回的 IPP 属性,从而向 CUPS 系统的其余部分提供攻击者控制的数据。
  • CVE-2024-47175 | libppd <= 2.1b1ppdCreatePPDFromIPP2在将 IPP 属性写入临时 PPD 文件时不会验证或清理它们,从而允许在生成的 PPD 中注入攻击者控制的数据。
  • CVE-2024-47177 | cups-filters <= 2.0.1foomatic-rip允许通过 PPD 参数执行任意命令FoomaticRIPCommandLine

(您能看出这是怎么回事吗?:D)

另外,还会提到几个其他漏洞,它们可能是安全问题,但在与开发人员和 CERT 的对话中几乎被忽略了。它们仍然存在,还有其他几个或多或少可以被利用的漏洞。

漏洞描述

远程未经身份验证的攻击者可以悄悄地用恶意 URL 替换现有打印机的 IPP URL(或安装新的打印机的 IPP URL),从而导致在启动打印作业(从该计算机)时(在该计算机上)执行任意命令。

入口点

  • WAN / 公共互联网:远程攻击者向端口631发送UDP 数据包。无需任何身份验证。
  • LAN:本地攻击者可以欺骗 zeroconf / mDNS / DNS-SD 广播(我们将在下一篇文章中详细讨论这一点)并实现导致 RCE 的相同代码路径。

引用 CUPS 书籍作者的第一条评论之一,他试图向我解释为什么这并没有那么糟糕:

我只是指出,公共互联网攻击仅限于直接连接到互联网的服务器

受影响的系统

CUPS 和 cups-browsed 适用于大多数 UNIX 系统:

这个东西是为任何东西打包的,在某些情况下它是默认启用的,在其他情况下则不是,去想象吧🤷。坦白说,几周来,我每天都会扫描整个公共互联网 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 打印机发现,因此目标必须能够接收广播消息,即位于同一网络上。

cupshax POC CVE-2024-47176 47076 47175

用法

该漏洞使用zeroconfippserver,都可以通过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 报告(包括漏洞)
已经泄露。

cupshax POC CVE-2024-47176 47076 47175

Leave a Reply

您的邮箱地址不会被公开。 必填项已用 * 标注