昨天提到有研究人员透露多数 Linux 发行版都存在某个高危安全漏洞,这个漏洞评分高达 9.9/10 分,借助漏洞攻击者无需身份验证即可远程执行任意代码。今天发现该漏洞的研究人员开始披露漏洞的细节,该漏洞位于 CUPS 组件中 (通用 UNIX 打印系统),有些情况下这是默认启用的,有些情况下则没有默认启用。
受影响的操作系统包括大多数 Linux 发行版、部分 BSD 系统、ChromeOS/ChromiumOS、Oracle Solaris,或许还有更多系统受影响。
目前已经分配 CVE 编号的漏洞列表:
CVE-2024-47176:cups-browsed<= 2.0.1,绑定在 UDP INADDR_ANY:631 上信任来自任何来源的数据包并触发 Get-Printer-Attributes 对攻击者控制的 URL 的 IPP 打印请求。
CVE-2024-47076:libcupsfilters <= 2.1b1,cfGetPrinterAttributes5 未验证或清理从 IPP 服务器返回的 IPP 属性,从而向 CUPS 系统的其余部分提供攻击者控制的数据。
CVE-2024-47175:libppd <= 2.1b1,ppdCreatePPDFromIPP2 在将 IPP 属性写入到临时 PPD 文件时不会验证或清理,从而导致在生成的 PDD 中注入攻击者控制的数据。
CVE-2024-47177:cups-filters <= 2.0.1,foomatic-rip 允许通过 PPD 参数执行任意命令 FoomaticRIPCommandLine
有直接参与 CUPS 项目的开发者称:
从一般的安全角度来看,如今整个 Linux 系统只是一个无休止、无可救药的安全漏洞大杂烩,等待着被利用。
如何利用该漏洞:
未经身份验证的攻击者可以远程悄悄利用恶意 URL 替换现有打印机的 IPP URL 或安装新的打印机 IPP URL,从而导致启动打印作业时在该计算机上执行任意命令。
其中在公网上攻击者只需要远程向设备 UDP 631 端口发送特制数据包即可,无需任何身份验证;如果是在内网,则可以通过欺骗 zeroconf/mDNS/DNS-SD 实现相同的操作。
理论上说暴露在公网上的 Linux 系统 (以及其他受影响的版本,下同) 在默认启用 CUPS 的情况下,攻击者可以通过自动化程序进行扫描并收集数据,也可以通过自动化程序批量进行攻击。
研究人员在公网上进行扫描时轻松获得数十万台设备的连接,峰值时有 200K~300K 个并发设备,也就是仅从扫描数据来看公网上受影响的 Linux 系统可能就超过百万台。
目前的补救措施:
如果你不需要使用打印相关服务请直接在系统上删除 cups-browsed
更新系统上的 CUPS 包
如果系统无法执行更新并且出于某种原因你依赖该服务,则需要阻止所有通过 UDP 到 631 端口的流量以及可能的所有 DNS-SD 流量
研究人员自己的做法是从所有系统中删除了所有的 CUPS 服务、二进制文件和库,并且也不会再使用 UNIX 系统进行打印,还删除了 zeroconf、avahi、bonjour 监听器。
最后这里还是要提下研究人员与开发者之间的漏洞反馈问题:
在昨天的文章中开发者已经提到关于这个 / 这些漏洞的披露并不顺利,因为负责这些项目的开发者似乎并不认同相关漏洞,在最新披露的文章里研究人员也说明了这些问题。
从 9 月 5 日开始研究人员通过 OpenPrinting cups 存储库提交了安全公告,原本这应该是负责任的披露流程的一部分,但之后披露流程已经崩溃。
负责分类漏洞的工程师似乎对研究人员抱有极高的期望,你必须证明自己值得被倾听 (也就是必须详细向他们说明漏洞的各种信息),但他们几乎不关心处理和理解你在说什么。
在 22 天的沟通中,研究人员称对接的工程师 (不止一个人) 傲慢、不屑一顾甚至存在人身攻击,他们试图证明这些” 漏洞 “在其他项目上也存在,而且是用于其他功能而非修复。
直到三周后对接的工程师才意识到研究人员是对的,整个过程让研究人员心力交瘁,估计也已经对目前 Linux 社区这种流程或机制失望透顶。
以上出自研究人员关于该漏洞的第一部分披露,接下来可能还有第二部分和第三方部分:https://www.evilsocket.net/2024/09/26/Attacking-UNIX-systems-via-CUPS-Part-I/