杯子溢出:当您的打印机溢出的墨水量超过

Elastic Security Labs 讨论了 CUPS 打印系统漏洞的检测和缓解策略,这些漏洞允许未经认证的攻击者通过 IPP 和 mDNS 利用系统,从而在基于 UNIX 的系统(如 Linux、macOS、BSD、ChromeOS 和 Solaris)上远程执行代码 (RCE)。

阅读时间:14 分钟安全研究漏洞更新
杯子溢出:当您的打印机溢出的不仅仅是墨水

Update October 2, 2024

The following packages introduced out-of-the-box (OOTB) rules to detect the exploitation of these vulnerabilities. Please check your "Prebuilt Security Detection Rules" integration versions or visit the Downloadable rule updates site.

  • Stack Version 8.15 - Package Version 8.15.6+
  • Stack Version 8.14 - Package Version 8.14.12+
  • Stack Version 8.13 - Package Version 8.13.18+
  • Stack Version 8.12 - Package Version 8.12.23+

关键要点

  • On September 26, 2024, security researcher Simone Margaritelli (@evilsocket) disclosed multiple vulnerabilities affecting the cups-browsed, libscupsfilters, and libppd components of the CUPS printing system, impacting versions <= 2.0.1.
  • 这些漏洞允许未经身份验证的远程攻击者通过 IPP(互联网打印协议)和 mDNS 利用打印系统在受影响的系统上实现远程代码执行(RCE)。
  • 攻击可以通过公共互联网或本地网络发起,目标是cups-browsed公开的 UDP 端口 631 ,无需任何身份验证要求。
  • 该漏洞链包含foomatic-rip过滤器,该过滤器允许通过FoomaticRIPCommandLine指令执行任意命令,这是一个已知( CVE-2011-2697CVE-2011-2964 )但自 2011 年以来一直未修补的问题。
  • 受影响的系统包括大多数 GNU/Linux 发行版、BSD、ChromeOS 和 Solaris,其中许多系统默认启用了cups-browsed服务。
  • 从出版物的标题“通过 CUPS 攻击 UNIX 系统,第一部分”来看,Margaritelli 可能希望发表有关该主题的进一步研究。
  • Elastic 提供了保护和指导,帮助组织检测并减轻这些漏洞的潜在利用。

CUPS RCE 一览

On September 26, 2024, security researcher Simone Margaritelli (@evilsocket) uncovered a chain of critical vulnerabilities in the CUPS (Common Unix Printing System) utilities, specifically in components like cups-browsed, libcupsfilters, and libppd. These vulnerabilities — identified as CVE-2024-47176, CVE-2024-47076, CVE-2024-47175, and CVE-2024-47177 — affect widely adopted UNIX systems such as GNU/Linux, BSDs, ChromeOS, and Solaris, exposing them to remote code execution (RCE).

问题的核心是 CUPS 组件缺乏输入验证,这使得攻击者能够利用互联网打印协议 (IPP)。 攻击者可以通过互联网(WAN)向目标的 UDP 端口631发送恶意数据包或在本地网络(LAN)内伪造 DNS-SD/mDNS 广告,迫使易受攻击的系统连接到恶意 IPP 服务器。

就上下文而言,IPP 是一种用于通过网络发送和接收打印作业的应用层协议。 这些通信包括发送有关打印机状态(卡纸、墨水不足等)和任何作业的状态的信息。 IPP 受所有主流操作系统支持,包括 Windows、macOS 和 Linux。 当打印机可用时,打印机会广播(通过 DNS)一条消息,表明打印机已准备就绪,其中包括其统一资源标识符 (URI)。 当 Linux 工作站收到此消息时,许多 Linux 默认配置将自动添加并注册打印机以供在操作系统内使用。 因此,在这种情况下,恶意打印机将自动注册并可用于打印作业。

连接后,恶意服务器返回精心设计的 IPP 属性,这些属性被注入到 PostScript 打印机描述 (PPD) 文件中,CUPS 使用该文件来描述打印机属性。 这些被操纵的 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 使用 IPP 属性进行响应,其中包括 FoomaticRIPCommandLine 参数,该参数以其 CVE 历史而闻名。 受害者根据这些 IPP 属性生成并保存PostScript 打印机描述(PPD) 文件。

此时,继续执行需要用户交互来启动打印作业并选择将其发送到假打印机。 一旦发送了打印作业,PPD 文件就会告诉 CUPS 如何处理打印作业。 包含的 FoomaticRIPCommandLine 指令允许在受害机器上执行任意命令。

在我们对 Cupshax PoC 漏洞进行审查和测试的过程中,我们发现了有关这些易受攻击的端点和执行过程的几个值得注意的障碍和关键细节。

在运行任意命令来创建文件时,我们注意到lp是报告的任意命令执行的用户和组,是使用 CUPS 实用程序的 Linux 系统上的默认打印组。 因此,Cupshax PoC/exploit 需要 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 的有效载荷以及检索和执行远程有效载荷。 一旦发现有漏洞的系统,敌对团体通常会尝试采取这些行动。 虽然还处于起步阶段,尚未发现大规模的利用,但可能会复制下面描述的一些场景。

我们首次尝试运行 Cupshax PoC 时遇到了一些小障碍,这是由于分配给lp用户的默认用户组造成的,即对交互式登录的限制,这是需要远程访问系统的用户所共有的属性。 但是,这并没有影响我们在受影响的主机系统上下载远程有效负载、编译和执行的能力:

围绕反向 shell 调用进行了持续的测试,成功演示如下:

评估影响

  • 严重性:这些漏洞的 CVSS 评分有争议地高达 9.9,表示严重性为严重。 CUPS 的广泛使用以及远程利用这些漏洞的能力使其成为一个高风险问题。
  • 谁受到影响? 该漏洞影响大多数基于 UNIX 的系统,包括主要的 GNU/Linux 发行版和运行受影响的 CUPS 组件的其他操作系统,如 ChromeOS 和 BSD。 面向公众或暴露于网络的系统尤其面临风险。 随着补丁的发布,供应商可能会提供进一步的指导和通知,以及进一步的补救措施。 尽管 CUPS 通常在本地主机上进行监听,但 Shodan 报告强调,超过 75,000 个 CUPS 服务暴露在互联网上。
  • 潜在损害:一旦被利用,攻击者可以控制系统并运行任意命令。 根据环境,这可能导致数据泄露、勒索软件安装或其他恶意行为。 通过 WAN 连接到打印机的系统尤其危险,因为攻击者无需内部网络访问即可利用这一点。

补救措施

正如@evilsocket 所强调的,有几条补救建议。

  • 禁用并卸载cups-browsed服务。 例如,请参阅Red HatUbuntu的建议。
  • 确保您的 CUPS 软件包已更新至适用于您的发行版的最新版本。
  • 如果无法更新,请阻止来自可能受影响的主机的 UDP 端口631和 DNS-SD 流量,并研究上述建议以进一步强化主机上的lp用户和组配置。

弹性保护

在本节中,我们将研究旨在发现与当前发布的漏洞相关的可疑活动的检测和搜索查询。 通过关注进程行为和命令执行模式,这些查询有助于在潜在的攻击尝试升级为全面攻击之前识别它们。

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 尝试:

https://github.com/elastic/detection-rules/blob/a3e89a7fabe90a6f9ce02b58d5a948db8d231ee5/rules/linux/execution_cupsd_foomatic_rip_shell_execution.toml

打印机用户(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 执行:

https://github.com/elastic/detection-rules/blob/a3e89a7fabe90a6f9ce02b58d5a948db8d231ee5/rules/linux/execution_cupsd_foomatic_rip_lp_user_execution.toml

通过 CUPS foomatic-rip child 进行网络连接

此规则识别由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

通过捕获父/子关系,我们可以确保网络连接源自可能受到损害的应用程序。

https://github.com/elastic/detection-rules/blob/a3e89a7fabe90a6f9ce02b58d5a948db8d231ee5/rules/linux/command_and_control_cupsd_foomatic_rip_netcon.toml

CUPS foomatic-rip 子进程创建文件

此规则检测由 foomatic-rip 的子进程发起的可疑文件创建事件。 由于所有当前的概念验证都有一个默认的测试负载,即写入/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行为,但为了增强安全性,您可以选择删除此排除,但请记住,它可能会在警报中产生更多噪音。

https://github.com/elastic/detection-rules/blob/a3e89a7fabe90a6f9ce02b58d5a948db8d231ee5/rules/linux/execution_cupsd_foomatic_rip_file_creation.toml

来自 foomatic-rip 或 cupsd 父级的可疑执行

此规则检测foomatic-ripcupsd的子进程执行的可疑命令行。 它专注于识别潜在的恶意活动,包括持久性机制、文件下载、编码/解码操作、反向 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父级,而不必担心误报。

https://github.com/elastic/detection-rules/blob/a3e89a7fabe90a6f9ce02b58d5a948db8d231ee5/rules/linux/execution_cupsd_foomatic_rip_suspicious_child_execution.toml

Elastic 的攻击发现

除了已发布的预建内容之外, Elastic 的攻击发现还可以通过分析您环境中的警报并利用大型语言模型 (LLM) 识别威胁来提供背景信息和见解。 在以下示例中,攻击发现提供了活动的简短摘要和时间表。 然后将这些行为映射到攻击链,以突出显示受影响的阶段并帮助对警报进行分类。

结论

最近的 CUPS 漏洞披露凸显了不断演变的威胁形势,强调了保护打印等服务的重要性。 由于 CVSS 评分较高,该问题需要立即采取行动,尤其是考虑到这些漏洞很容易被远程利用。 尽管该服务在某些 UNIX 操作系统(基于供应链)上默认安装,但需要手动用户交互才能触发打印机作业。 我们建议用户保持警惕,继续搜寻,不要低估风险。 虽然威胁需要用户交互,但如果与鱼叉式网络钓鱼文档结合使用,它可能会强迫受害者使用恶意打印机进行打印。 或者更糟糕的是,正如@evilsocket 所指出的那样,默默地更换现有的打印机或安装新的打印机。

由于初始披露的内容被标记为第 1 部分,因此我们期待披露更多内容。 最终,可见性和检测能力仍然是这些系统防御策略的重中之重,确保攻击者无法利用被忽视的漏洞。

主要参考

本博文所描述的任何特性或功能的发布及上市时间均由 Elastic 自行决定。当前尚未发布的任何特性或功能可能无法按时提供或根本无法提供。