在网络安全的重大发展中,在 CUPS(通用 Unix 打印系统)中发现了多个关键漏洞,CUPS(通用 Unix 打印系统)是 Linux 系统和其他平台(如 BSD、Oracle Solaris 和 Google Chrome OS)上广泛使用的打印服务器。安全研究员 Simone Margaritelli 发现了这些漏洞,并提供了一份全面的文章,详细说明了它们的潜在影响。
CVE 详情
Margaritelli 在他的博客文章中总结了核心问题:
“未经身份验证的远程攻击者可以静默地将现有打印机(或安装新打印机)的 IPP URL 替换为恶意 URL,从而导致在(从该计算机)启动打印作业时(在计算机上)执行任意命令。”
这些漏洞不会影响 Linux 内核本身,但会影响 CUPS 系统的组件。分配的 CVE 包括:
CVE-2024-47176漏洞此漏洞存在于 cups-browsed(最高版本 2.0.1)中。cups-browsed 守护程序在端口 631 上侦听 UDP 数据包,并使用 DNS 服务发现自动查找打印机,使其可供用户使用。该漏洞是由于未正确验证打印机发现期间收到的 URL 造成的。攻击者可利用此漏洞诱骗 cups-browsed 请求任意 URL。
漏洞:CVE-2024-47076此漏洞存在于 libcupsfilters(最高版本 2.1b1)中,它与库如何处理文件转换以使其可在特定打印机上打印有关。与上一个问题类似,它允许攻击者注入恶意数据,这些数据会传递到其他 CUPS 组件。
CVE-2024-47175漏洞此漏洞会影响 libppd(最高版本 2.1b1)。该库无法验证 IPP 属性,并无意中将它们添加到 PPD(PostScript 打印机描述)文件中,然后由驱动程序和其他组件使用,这可能会导致进一步的漏洞利用。
CVE-2024-47177漏洞在 cups-filters(版本 2.0.1)中,此缺陷允许由无效的 PPD 参数触发任意命令执行。cups-filters 组件执行外部代码(“filters”)来转换文件。通过接受来自未经验证的外部来源的数据,它为攻击者执行任意代码打开了大门。具体来说,“foomatic-rip”过滤器使攻击者能够提供任意命令行。
此外,根据 Margaritelli 的说法,还有“其他几个或多或少可以利用的错误”。
利用链
这些漏洞可以链接在一起以实现远程代码执行。利用过程包括:
启用 cups-browsed:必须在目标系统上手动启用或启动 cups-browsed 服务。
访问易受攻击的服务器:攻击者通过以下方式获得对易受攻击的服务器的访问权限:
不受限制的公共 Internet 访问,或
访问本地连接受信任的内部网络。
公布恶意 IPP 服务器:攻击者公布虚假 IPP 服务器,从而有效地配置恶意打印机。
受害者发起打印作业:用户尝试使用恶意打印机进行打印。
执行任意代码:攻击者在打印作业启动期间在受害者的计算机上执行任意代码。
值得注意的是,假设 CUPS 端口通过路由器或防火墙打开,则可以通过公共互联网通过将 UDP 数据包发送到端口 631 来利用这种远程代码执行,而无需任何身份验证。LAN 攻击也可以通过欺骗 zeroconf、mDNS 或 DNS-SD 通告来实现。
影响和受影响的系统
由于 CUPS 在各种平台上的广泛使用,这些漏洞具有广泛的影响。运行 Linux 发行版的系统、某些 BSD 变体、Oracle Solaris 和 Google Chrome OS 都会受到影响。截至目前,没有适用于 Linux 系统的可用修复程序,因此立即缓解至关重要。
Margaritelli 针对 CVE-2024-47176 开发了概念验证 (PoC),可在 GitHub 公告中找到。另一个基于 OpenPrinting CUPS 存储库中提交的 PoC 也已在 GitHub 上发布。