2024 年 10 月 2 日更新
以下软件包引入了开箱即用 (OOTB) 规则,以检测这些漏洞的利用。请检查您的“预构建安全检测规则”集成版本,或访问可下载规则更新站点。
- 堆栈版本 8.15 - 软件包版本 8.15.6+
- 堆栈版本 8.14 - 软件包版本 8.14.12+
- 堆栈版本 8.13 - 软件包版本 8.13.18+
- 堆栈版本 8.12 - 软件包版本 8.12.23+
主要要点
- 2024 年 9 月 26 日,安全研究员 Simone Margaritelli (@evilsocket) 披露了多个影响 CUPS 打印系统的
cups-browsed
、libscupsfilters
和libppd
组件的漏洞,这些漏洞影响版本 <= 2.0.1。 - 这些漏洞允许未经身份验证的远程攻击者通过 IPP(互联网打印协议)和 mDNS 利用打印系统,从而在受影响的系统上实现远程代码执行 (RCE)。
- 攻击可以通过公共互联网或本地网络发起,目标是
cups-browsed
公开的 UDP 端口 631,而无需任何身份验证要求。 - 漏洞链包括
foomatic-rip
过滤器,该过滤器允许通过FoomaticRIPCommandLine
指令执行任意命令,这是一个自 2011 年以来已知(CVE-2011-2697、CVE-2011-2964)但未修补的问题。 - 受影响的系统包括大多数 GNU/Linux 发行版、BSD、ChromeOS 和 Solaris,其中许多默认启用了
cups-browsed
服务。 - 根据该出版物的标题“通过 CUPS 攻击 UNIX 系统,第一部分”,Margaritelli 可能希望发布有关该主题的进一步研究。
- Elastic 提供了保护措施和指导,以帮助组织检测和缓解这些漏洞的潜在利用。
CUPS RCE 概览
2024 年 9 月 26 日,安全研究员 Simone Margaritelli (@evilsocket) 发现了 CUPS(通用 UNIX 打印系统)实用程序中的一系列严重漏洞,特别是 cups-browsed
、libcupsfilters
和 libppd
等组件。这些漏洞(被确定为 CVE-2024-47176、CVE-2024-47076、CVE-2024-47175 和 CVE-2024-47177)影响了广泛采用的 UNIX 系统(如 GNU/Linux、BSD、ChromeOS 和 Solaris),使其面临远程代码执行 (RCE) 的风险。
问题的核心在于 CUPS 组件中缺乏输入验证,这使得攻击者可以利用互联网打印协议 (IPP)。攻击者可以通过互联网 (WAN) 将恶意数据包发送到目标的 UDP 端口 631
,或者在本地网络 (LAN) 内欺骗 DNS-SD/mDNS 广播,从而强制易受攻击的系统连接到恶意 IPP 服务器。
作为背景,IPP 是一种应用层协议,用于通过网络发送和接收打印作业。这些通信包括发送有关打印机状态(卡纸、墨水不足等)和任何作业状态的信息。所有主要操作系统(包括 Windows、macOS 和 Linux)都支持 IPP。当打印机可用时,打印机会广播(通过 DNS)一条消息,说明打印机已准备就绪,包括其统一资源标识符 (URI)。当 Linux 工作站收到此消息时,许多 Linux 默认配置会自动添加并注册该打印机,以便在操作系统中使用。因此,在这种情况下,恶意打印机将自动注册并可用于打印作业。
连接后,恶意服务器会返回精心设计的 IPP 属性,这些属性会注入到 CUPS 用来描述打印机属性的 PostScript 打印机描述 (PPD) 文件中。这些被操纵的 PPD 文件使攻击者能够在触发打印作业时执行任意命令。
此链中的主要漏洞之一是 foomatic-rip
过滤器,已知该过滤器允许通过 FoomaticRIPCommandLine 指令执行任意命令。尽管存在十多年的漏洞,但在许多现代 CUPS 实现中仍然未修补,这进一步加剧了风险。
虽然这些漏洞非常严重,CVSS 得分高达 9.9,但可以通过禁用 cups-browsed、阻止 UDP 端口 631 以及将 CUPS 更新到已修补的版本来缓解。许多 UNIX 系统默认启用了此服务,这使得受影响的组织迫切需要解决此问题。
Elastic 的 POC 分析
Elastic 的威胁研究工程师最初找到了 @evilsocket 编写的原始概念验证,该概念验证已被泄露。但是,我们选择使用基于其本地执行能力的 cupshax 概念验证 (PoC)。
首先,PoC 利用了一个自定义 Python 类,该类负责使用 mDNS/ZeroConf 在网络上创建和注册伪打印机服务。这主要是通过为伪互联网打印协议 (IPP) 打印机创建 ZeroConf 服务条目来实现的。
执行后,PoC 会广播伪打印机广告并侦听 IPP 请求。当易受攻击的系统看到广播时,受害者会自动从广播消息中提供的 URL 请求打印机的属性。PoC 会使用包括 FoomaticRIPCommandLine 参数在内的 IPP 属性进行响应,该参数以其 CVE 历史记录而闻名。受害者会根据这些 IPP 属性生成并保存PostScript 打印机描述 (PPD) 文件。
此时,继续执行需要用户交互来启动打印作业,并选择将其发送到伪打印机。发送打印作业后,PPD 文件会告诉 CUPS 如何处理打印作业。包含的 FoomaticRIPCommandLine 指令允许在受害者计算机上执行任意命令。
在我们使用 Cupshax PoC 对漏洞进行审查和测试期间,我们确定了有关这些易受攻击的端点和执行过程的几个值得注意的障碍和关键细节。
当运行任意命令创建文件时,我们注意到,对于任意命令执行,报告的用户和组都是 lp
。这是使用 CUPS 工具的 Linux 系统上的默认打印组。因此,Cupshax PoC/漏洞利用需要 CUPS 漏洞和 lp
用户都具有足够的权限来检索和运行恶意负载。默认情况下,许多系统上的 lp
用户将具有执行有效负载(如反向 shell)的权限;但是,另一种缓解措施是限制 lp
,使其通过 Linux 中可用的本机控件(如 AppArmor 或 SELinux 策略)以及防火墙或 IPtables 强制策略使这些负载无效。
在许多默认配置中,lp
用户可以访问打印服务不需要的命令,例如 telnet
。为了减少攻击面,我们建议删除不必要的服务,并在必要时添加限制,以防止 lp
用户使用它们。
我们还注意到,由于 lp
用户没有登录 shell,因此该技术不支持立即进行交互式反向 shell;但是,通过一些创造性的策略,我们仍然可以通过 PoC 实现这一点。典型的 PoC 通过将文件写入 /tmp/
来测试漏洞利用,这在大多数情况下很容易检测到。请注意,写入此文件的用户将是 lp
,因此攻击者在磁盘上下载和保存有效负载时也会出现类似的行为。
除了这些观察结果外,在我们的遥测中,我们观察到父进程 foomatic-rip
正在执行 shell,这非常不常见。
执行“Cupshax” PoC
为了演示这些漏洞的影响,我们尝试完成两种不同的场景:使用利用“活在土地上”技术的反向 shell 有效负载,以及检索和执行远程有效负载。这些操作通常是敌对团体在识别出易受攻击的系统后尝试利用的常见操作。尽管它还处于起步阶段,但尚未观察到广泛的利用,但可能会复制下面描述的一些场景。
由于分配给 lp
用户的默认用户组(即围绕交互式登录的限制,这是需要远程访问系统的用户的常见属性),我们首次尝试运行 Cupshax PoC 时遇到了许多小的障碍。但是,这并没有影响我们下载远程负载,在受影响的主机系统上编译和执行的能力。
继续进行了围绕反向 shell 调用的测试,如下所示,已成功演示。
评估影响
- 严重性:这些漏洞的 CVSS 得分有争议地高达 9.9,表明其严重性极高。CUPS 的广泛使用以及远程利用这些漏洞的能力使这个问题成为高风险问题。
- 谁受影响?:该漏洞会影响大多数基于 UNIX 的系统,包括主要的 GNU/Linux 发行版和运行受影响 CUPS 组件的其他操作系统,如 ChromeOS 和 BSD。面向公众或暴露于网络的系统尤其面临风险。随着补丁的推出,供应商可能会提供进一步的指导和通知,以及进一步的补救措施。即使 CUPS 通常在 localhost 上侦听,Shodan 报告强调,超过 75,000 个 CUPS 服务暴露在互联网上。
- 潜在损害:一旦被利用,攻击者就可以控制系统来运行任意命令。根据环境的不同,这可能会导致数据泄露、勒索软件安装或其他恶意行为。通过 WAN 连接到打印机的系统尤其面临风险,因为攻击者无需内部网络访问即可利用此漏洞。
补救措施
正如 @evilsocket 所强调的那样,有几个补救建议。
- 禁用并卸载
cups-browsed
服务。例如,请参阅 Red Hat 和 Ubuntu 的建议。 - 确保将您的 CUPS 包更新到您的发行版可用的最新版本。
- 如果无法更新,请阻止来自可能受影响主机的 UDP 端口
631
和 DNS-SD 流量,并调查上述建议,以进一步强化主机上的lp
用户和组配置。
Elastic 防护
在本节中,我们将研究旨在发现与当前发布的漏洞相关的可疑活动的检测和搜索查询。通过关注进程行为和命令执行模式,这些查询有助于在潜在的漏洞利用升级为全面攻击之前识别它们。
cupsd 或 foomatic-rip shell 执行
第一条检测规则针对 Linux 系统上由 foomatic-rip
派生并立即启动 shell 的进程。这是有效的,因为合法的打印作业很少需要执行 shell,因此这种行为是恶意活动的有力指标。注意:如果可以执行任意命令,则 shell 可能不一定是攻击者的目标。
process where host.os.type == "linux" and event.type == "start" and
event.action == "exec" and process.parent.name == "foomatic-rip" and
process.name in ("bash", "dash", "sh", "tcsh", "csh", "zsh", "ksh", "fish")
and not process.command_line like ("*/tmp/foomatic-*", "*-sDEVICE=ps2write*")
此查询设法检测到我们执行的所有 33 次 PoC 尝试。
打印机用户 (lp) shell 执行
此检测规则假定默认打印机用户 (lp
) 处理打印进程。通过指定此用户,我们可以缩小范围,同时扩大父进程列表以包括 cupsd
。尽管目前没有迹象表明可以通过 cupsd
利用 RCE,但我们不能排除这种可能性。
process where host.os.type == "linux" and event.type == "start" and
event.action == "exec" and user.name == "lp" and
process.parent.name in ("cupsd", "foomatic-rip", "bash", "dash", "sh",
"tcsh", "csh", "zsh", "ksh", "fish") and process.name in ("bash", "dash",
"sh", "tcsh", "csh", "zsh", "ksh", "fish") and not process.command_line
like ("*/tmp/foomatic-*", "*-sDEVICE=ps2write*")
通过关注用户名 lp
,我们扩大了范围,并且像之前一样检测到了所有 33 次 PoC 执行。
CUPS foomatic-rip 子进程的网络连接
此规则识别由 foomatic-rip
的子进程发起的网络连接,这种行为引起了怀疑。由于合法操作通常不涉及这些进程建立出站连接,因此应仔细检查任何检测到的活动。如果您的环境中预期存在此类通信,请确保正确排除目标 IP,以避免不必要的警报。
sequence by host.id with maxspan=10s
[process where host.os.type == "linux" and event.type == "start"
and event.action == "exec" and
process.parent.name == "foomatic-rip" and
process.name in ("bash", "dash", "sh", "tcsh", "csh", "zsh", "ksh", "fish")]
by process.entity_id
[network where host.os.type == "linux" and event.type == "start" and
event.action == "connection_attempted"] by process.parent.entity_id
通过捕获父/子关系,我们确保网络连接源自可能受到威胁的应用程序。
CUPS foomatic-rip 子进程的文件创建
此规则检测由 foomatic-rip 的子进程发起的、可疑的文件创建事件。由于所有当前的 PoC 都具有默认测试有效负载,即将文件写入 /tmp/
中的文件,因此此规则将捕获该操作。此外,它还可以检测攻击者下载恶意负载并随后创建文件的情况。
sequence by host.id with maxspan=10s
[process where host.os.type == "linux" and event.type == "start" and
event.action == "exec" and process.parent.name == "foomatic-rip" and
process.name in ("bash", "dash", "sh", "tcsh", "csh", "zsh", "ksh", "fish")] by process.entity_id
[file where host.os.type == "linux" and event.type != "deletion" and
not (process.name == "gs" and file.path like "/tmp/gs_*")] by process.parent.entity_id
该规则排除了 /tmp/gs_*
,以说明默认的 cupsd
行为,但为了增强安全性,您可以选择删除此排除项,但请记住,它可能会在警报中产生更多噪音。
来自 foomatic-rip 或 cupsd 父进程的可疑执行
此规则检测由 foomatic-rip
和 cupsd
的子进程执行的可疑命令行。它侧重于识别潜在的恶意活动,包括持久化机制、文件下载、编码/解码操作、反向 shell 和通过 GTFOBins 加载共享对象。
process where host.os.type == "linux" and event.type == "start" and
event.action == "exec" and process.parent.name in
("foomatic-rip", "cupsd") and process.command_line like (
// persistence
"*cron*", "*/etc/rc.local*", "*/dev/tcp/*", "*/etc/init.d*",
"*/etc/update-motd.d*", "*/etc/sudoers*",
"*/etc/profile*", "*autostart*", "*/etc/ssh*", "*/home/*/.ssh/*",
"*/root/.ssh*", "*~/.ssh/*", "*udev*", "*/etc/shadow*", "*/etc/passwd*",
// Downloads
"*curl*", "*wget*",
// encoding and decoding
"*base64 *", "*base32 *", "*xxd *", "*openssl*",
// reverse connections
"*GS_ARGS=*", "*/dev/tcp*", "*/dev/udp/*", "*import*pty*spawn*", "*import*subprocess*call*", "*TCPSocket.new*",
"*TCPSocket.open*", "*io.popen*", "*os.execute*", "*fsockopen*", "*disown*", "*nohup*",
// SO loads
"*openssl*-engine*.so*", "*cdll.LoadLibrary*.so*", "*ruby*-e**Fiddle.dlopen*.so*", "*Fiddle.dlopen*.so*",
"*cdll.LoadLibrary*.so*",
// misc. suspicious command lines
"*/etc/ld.so*", "*/dev/shm/*", "*/var/tmp*", "*echo*", "*>>*", "*|*"
)
通过像在上面的规则中所做的那样对命令行进行例外处理,我们可以扩大范围以检测 cupsd
父进程,而不用担心误报。
Elastic 的攻击发现
除了发布的预构建内容外,Elastic 的攻击发现可以通过分析您环境中的警报并通过利用大型语言模型 (LLM) 来识别威胁,从而提供上下文和见解。在以下示例中,“攻击发现”提供了活动摘要和时间轴。然后将行为映射到攻击链,以突出受影响的阶段并帮助分类警报。
结论
最近 CUPS 漏洞的披露凸显了不断演变的安全威胁形势,强调了保护打印等服务的重要性。由于 CVSS 分数很高,这个问题需要立即采取行动,特别是考虑到这些漏洞可以很容易地被远程利用。虽然该服务在某些 UNIX 操作系统上默认安装(基于供应链),但需要用户手动交互才能触发打印作业。我们建议用户保持警惕,继续进行威胁搜寻,不要低估风险。虽然该威胁需要用户交互,但如果与鱼叉式网络钓鱼文档相结合,可能会迫使受害者使用恶意打印机进行打印。或者更糟糕的是,如 @evilsocket 所指出的,静默地替换现有打印机或安装新打印机。
我们预计随着最初披露被标记为第一部分,将会有更多信息被揭示。最终,对于这些系统,可见性和检测能力仍然是防御策略的首要任务,确保攻击者无法利用被忽视的漏洞。
关键参考
- https://www.evilsocket.net/2024/09/26/Attacking-UNIX-systems-via-CUPS-Part-I/
- https://github.com/RickdeJager/cupshax/blob/main/cupshax.py
- https://www.cve.org/CVERecord?id=CVE-2024-47076
- https://www.cve.org/CVERecord?id=CVE-2024-47175
- https://www.cve.org/CVERecord?id=CVE-2024-47176
- https://www.cve.org/CVERecord?id=CVE-2024-47177
本帖中描述的任何功能或特性的发布和时间安排均由 Elastic 自行决定。任何目前不可用的功能或特性可能不会按时交付,甚至根本不会交付。