CUPS 中的高危 Linux RCE - 已知信息和准备方法
执行摘要
2024 年 9 月 26 日,业界 披露 了一个高危远程代码执行 (RCE) 漏洞链,拒信此漏洞链会影响到许多类 Unix 主机。
存在漏洞的组件是通用 Unix 打印系统 (CUPS),具体来说是 cups-browsed。
漏洞利用攻击要想得逞,需要用到四个漏洞构成的链条:CVE-2024-47176、CVE-2024-47076、CVE-2024-47175 和 CVE-2024-47177。
在这篇博文中,Akamai 分享了有关该漏洞的详细信息、分析了技术披露,并提供了相关建议,帮助您在等待补丁发布期间采取行动,做好有效准备并降低风险。
前言
2024 年 9 月 23 日,安全研究人员 Simone Margaritelli 在社交媒体上分享了一个即将披露的漏洞的详细信息。在他的 文章中,Margaritelli 说明了他在三周前向开发人员披露的一个重要漏洞。这是一个未经验证的 RCE 漏洞,可能影响到所有 GNU/Linux 设备。
2024 年 9 月 26 日,完整的 技术披露 发布。总计涉及到四个漏洞:
cups-browsed 中的 CVE-2024-47176,此漏洞会将请求强制发送到攻击者控制的地址
libcupsfilters 中的 CVE-2024-47076,它不会对攻击者服务器返回的数据执行验证或清理,并且会将其传递给 CUPS 系统的其他部分
libppd 中的 CVE-2024-47175,这同样涉及到不对输入进行清理,并将其写入临时文件
cups-filters 中的 CVE-2024-47177允许执行任意命令
本博文旨在帮助组织做好准备,确保修复过程尽可能顺畅。为此,我们提供了该漏洞利用链的技术摘要和一些缓解步骤(采用分段建议的形式),在等待补丁发布期间,网络管理员可以采取这些步骤来降低风险。
如何做好准备?
要利用 RCE 漏洞发动攻击,攻击者需要具备两个条件:其一是存在漏洞的软件,其二当然是远程访问权限。我们已经知道,存在漏洞的组件是 CUPS,那么在有补丁的情况下,我们只需为其安装补丁即可,也可以专门针对该组件采取一些缓解措施,但我们相信,最佳方法是借此机会更广泛地解决远程访问问题。
不过我们还是从更为紧迫的问题入手。
与 CUPS 相关的风险和潜在漏洞
我们的讨论目标和存在漏洞的组件是 CUPS,这是一种允许计算机充当打印服务器的服务。它非常流行,各种类 Unix 设备都会用到这种服务。
考虑到这种服务十分常见,而且有着往往能接触到其他设备(甚至有可能接触到互联网)的特点,它无疑会成为高价值的漏洞利用目标。先前的打印服务漏洞(例如 CVE-2021-34527 (PrintNightmare) 甚至是 CVE-2010-2729)表明了这种攻击媒介的潜在影响。
甚至在“官方”披露之前,我们就已经从理论上推测出,CUPS 是存在漏洞的组件。在查看 Margaritelli 的 GitHub 账户之后,我们发现了一个有趣的细节——Apple CUPS 仓库的一个分叉(2024 年 9 月 17 日),时间就在他发表第一篇文章的前几天(图 1)。
在 cups-browsed GitHub 中还有一个问题 ,引用了 Margaritelli (@evilsocket) 的一段话,提到的可能是主要漏洞的后果。(其中还有一些精选评论,请准备好爆米花细细品鉴。)
漏洞利用分析
这种攻击并不是非常复杂,但成功的漏洞利用仍然需要完成多个步骤。图 2 展示了我们对此过程的总结,但我们鼓励您阅读完整的 漏洞披露博客 ,以获得更详尽的解释。
第 1 步:首先,cups-browsed 守护程序监听通过 631 端口传入的 UDP 连接。其目的是将发现的打印机添加到系统中。与守护程序通信的攻击者可以简单地强迫遭入侵的机器将恶意地址注册为合法打印机;这利用的是 CVE-2024-47176。
第 2 步:下一步是注册恶意“打印机”。在注册过程中, libcupsfilters 将向攻击者发送出站请求,通过互联网打印协议 (IPP) 请求打印机属性。打印机可在这些属性中定义特定的 PostScript 打印机描述 (PPD) 文件,这些文件可用于合法地定义打印机的功能。随后,这些内容会写入到一个 .ppd 文件中,未经清理且不受约束。这利用的是 CVE-2024-47076 和 CVE-2024-47175。
现在我们获得了一个恶意 .ppd 文件。但如何通过它执行命令?
第 3 步:在 PPD 中输入 cupsFilter2 指令,这样在创建新打印任务时,它就会运行各种筛选器(采用可执行文件的形式)。我们使用筛选指令运行 foomatic-rip 筛选器,这很容易受到任意命令注入的攻击。这利用的是 CVE-2024-47177。
细节分析
使用 Shodan,我们可以看到 全球大约有 75,000 台设备在互联网上暴露了 CUPS,大多数使用的是默认的 631 端口(图 3)。
以下筛选器可用于查询 Shodan 中暴露的 CUPS 服务器:
product:"CUPS (IPP)"
更多深度见解
利用 Akamai 对流量数据的独特分析洞见,我们注意到 CUPS 服务在各种平台上运行,包括 Ubuntu、macOS、CentOS、Debian、Fedora、OpenShift、Oracle Linux Server、Red Hat、Rocky Linux、SUSE、openSUSE、AlmaLinux、Amazon Linux 等。
在 Akamai 生态系统中,总计有 10.1% 的 Linux 机器开放了 631 端口(CUPS 端口),但其中只有 3% 的机器会通过该端口定期接收任何外部流量。
尽管这些数字可以表明,该服务对外暴露的情况并不普遍,但组织仍有必要评估自身的暴露情况,并相应地审查安全策略。
分析互联网暴露情况
在入侵组织时,攻击者采用的最常见方法之一是利用在互联网上暴露的服务。CUPS 只是此类服务的一个例子,但问题显然不止于此。我们再次利用 Akamai 对流量数据的分析洞见,评估了数千个组织不同服务的暴露状况。
根据 Akamai 的数据,约有 5.4% 的 Linux 设备暴露在互联网中,并接收外部的传入流量(图 4)。
在检查影响此类流量的网络策略时,我们注意到 有 19.3% 的设备默认情况下允许互联网传入流量 ,这就意味着不存在限制或控制传入流量的特定网络策略。
暴露的服务很容易成为攻击媒介,因此组织必须审查并加强其访问控制措施。
建议
由于此漏洞尚未公开,修补时间表也尚不确定,因此要为该漏洞的披露做好准备,最佳方法是摸排网络中的所有“摩擦”点——无论是所有 Linux 设备的列表、其互联网暴露情况,还是 CUPS 使用情况,并确定与它们相关的分段策略。
在摸排全面完成之后,建议您应用分段策略来限制任何潜在攻击的爆炸半径。无论现状如何,这都是一种良好的做法,因为 Linux 横向移动 并非仅限于 SSH 或 RCE。
确定组织中的 CUPS 使用情况
要确定设备上运行的 CUPS,您可以搜索服务和进程名称。根据我们对各种 Unix 系统和发行版的观察,以下进程可能表明使用了 CUPS:
cups-browsed (受影响的进程)。
cupsd
cancel.cups
lpq.cups
cupsfilter
lpc.cups
lp.cups
cupsaccept
cups-lpd
lpstat.cups
lpr.cups
cupsctl
部署了 osquery 的组织可使用以下查询来确定其系统中潜在的 CUPS 使用(Akamai Guardicore Segmentation 客户可使用 Insight 功能来运行这些查询)。
检测监听 631 端口的设备:
SELECT pid, port, protocol, family, address, path
FROM listening_ports
WHERE port = 631
检测可能与 CUPS 相关且正在运行的进程:
SELECT name, parent, cwd, cmdline, pid, start_time, path
FROM processes
WHERE path LIKE '%cups%'
确定互联网暴露情况
您可以使用 Shodan 等暴露扫描服务来识别在互联网上暴露的服务,包括 CUPS 在内。
Akamai Guardicore Segmentation 客户可以使用“揭示”选项卡中的“互联网连接”筛选器,直观地查看接收互联网流量的所有服务和设备(图 5)。
使用分段来限制潜在爆炸半径
考虑以下情景:漏洞已经披露,其情况不符合我们的预期,我们的准备工作也没有涵盖相关方面,有人创建了一种有效的漏洞利用攻击手法,攻击者利用它入侵了您的网络。
然后会怎样?他们能否跳转到域控制器、感染整个网络、植入僵尸网络/加密货币挖矿程序/勒索软件/木马,然后神不知鬼不觉地离开?还是他们必须付出更多努力,执行复杂的侦察扫描,利用多次横向移动跳转,并整体上采取更为主动的行动(这能给您创造足够的机会来检测入侵并作出反应)?
入侵事件在持续发生,正因如此,分段无比重要。即便没有今天这个 RCE,未来也会出现另一个 零日 漏洞。扁平式网络很容易成为攻击目标,但如果我们增加攻击者的入侵难度,就可以让他们放弃(转为攻击更容易得逞的地方),或者迫使他们付出足够的时间、执行足够多的操作,乃至于疏忽出错并被发现。
两步加强安全态势
您可以通过两个相对简单的步骤大幅度加强安全态势:实施 DMZ 以及为应用程序服务器分段。
实施 DMZ。对互联网开放的服务器有着更高的固有风险;因此,不应为其提供访问网络其他部分的完整访问权限。应该为这些服务器实施边界 DMZ,确保其无法访问网络中较为敏感的部分,从而大大增加攻击者的入侵难度。
为应用程序服务器分段。通常情况下,可以将类似的应用程序服务器分段在一起,基于其应用程序逻辑来限制入站和出站流量也可能比较容易实现。
以 CUPS 服务器为例:我们知道其端口 (UDP 631) 和进程 (cupsd),从技术上来讲,它只需要产生发送到实际打印机的流量。有鉴于此,我们可以为这些 CUPS 服务器创建一个应用程序分段,仅允许特定流量传入,而将大部分流量拒之门外。
这样,即便攻击者成功利用 CUPS 入侵服务器,也只能跳转到打印机,而恶作剧式的打印作业并没有那么可怕。
了解更多
组织还可以通过分段来应用其他快速致胜解决方案,从而加强安全态势。如需了解相关信息,请阅读我们介绍 实际分段的博客文章。