UNIX CUPS远程代码执行漏洞CVE-2024-47176预警
CUPS(Common UNIX Printing System,通用 Unix 打印系统)是Unix/Linux系统中用于管理打印的开源打印系统。
CUPS 采用 Internet Printing Protocol (IPP)实现本地和网络打印机打印功能,管理打印任务、打印请求和打印队列。
CUPS-powsed是开源打印服务组件,使用mDNS(多播DNS)或DNS-SD(DNS服务发现)协议侦测网络上打印设备。
因此该开源组件负责在本地网络上自动发现和添加打印机,是Common UNIX Printing System(CUPS)的一部分。
使得用户无需手动配置即可使用网络打印机,激活后允许计算机充当打印服务器,但并非所有系统默认启用 CUPS。
一、基本情况
CUPS打印系统多个组件中存在多个安全漏洞,标记为CVE-2024-47176、CVE-2024-47076、CVE-2024-47175等。
安全专家监测到CUPS打印系统多个组件中存在多个安全漏洞,构成远程代码执行链,部分漏洞细节及POC已公开。
CUPS-powsed守护程序启用时,未经身份验证的远程黑客可构造恶意请求利用这些漏洞在目标系统执行任意代码。
这里需要注意,CUPS-powsed默认监听UDP端口为631,并非所有系统都默认启用,因此通常情况下不会被启用。
二、漏洞描述
CVE-2024-47176 远程执行漏洞被利用的一个前提是启用CUPS-powsed服务,其在Ubuntu Desktop环境默认启用。
而另外一个前提,则是需要受害者需要主动使用恶意 IPP 服务器配置的打印机设备来进行打印操作,具体原因如下:
CVE-2024-47176漏洞是由于CUPS-powsed服务在处理网络打印任务时,会绑定到UDP端口631 INADDR_ANY地址,
如此一来,目标系统就会信任来自任意来源的数据包,导致未经身份验证的远程攻击者利用该漏洞发送特制数据包,
因此触发恶意请求到攻击者控制的URL在目标系统执行任意命令,危害包括访问敏感数据、执行命令或横向攻击等。
攻击者可通过以下流程实现远程代码执行:
l 攻击者向目标系统的 UDP 端口 631 发送包含恶意 URL 的特制数据包
l CUPS 系统的CUPS-powsed组件会连接到该URL,并请求恶意 IPP 服务器返回伪造的PPD文件
l 该PPD文件包含恶意的FoomaticRIPCommandLine指令,这些指令被写入系统的临时PPD文件中
l 当用户发送打印作业时,CUPS系统会调用foomatic-rip过滤器,并执行PPD文件中的恶意命令
l 攻击者的命令在目标系统上被执行,完成远程代码执行。
相关漏洞涉及 CUPS 的几个关键组件具体如下:
CVE-2024-47175
libppd<= 2.1b1中,函数 ppdCreatePPDFromIPP2 在将 IPP 属性写入临时 PPD 文件时不会去验证或清理IPP属性。
这是因为libppd库存在输入验证不当漏洞,未经验证的IPP 数据可能被写入临时PPD 文件导致攻击者注入恶意数据。
CVE-2024-47076
Libcupsfilters <= 2.1b1中,cfGetPrinterAttributes5 函数无法验证或清理IPP服务器返回IPP属性,可发送恶意数据。
这是因为libcupsfilters库中存在输入验证不当漏洞,可能导致攻击者控制的数据与 CUPS 系统的其余部分进行交互。
CVE-2024-47177
cups-filters<=2.0.1 中, foomatic rip可以允许通过 FoomaticRIPCommandLine PPD 的参数,从而被执行任意命令。
这是因为 cups-filters 库中存在命令注入漏洞,攻击者可以通过FoomaticRIPCommandLine PPD参数执行任意命令
CVE-2024-47176
cups-powsed <= 2.0.1,服务处理网络打印任务时绑定在UDP INADDR_ANY:631,并信任任何来源的任何数据包。
这样就可能导致`Get-Printer-Attributes`IPP 请求发送到攻击者控制的URL,构成远程代码执行链导致远程代码执行。
三、 影响范围
CUPS-powsed <= 2.0.1
CVE-2024-47176: cups-powsed ≤ 2.0.1
CVE-2024-47076: libcupsfilters ≤ 2.1b1
CVE-2024-47175: libppd ≤ 2.1b1
CVE-2024-47177: cups-filters ≤ 2.0.1
四、修复建议
目前上述漏洞暂无相关安全补丁,受影响用户只能采用相关的缓解措施,或者是并安全更新发布后升级到最新版本。
补丁尚未发布之前建议从易受攻击的系统中禁用或删除 CUPS-powsed,必要时阻止所有到 UDP 端口631 的流量。
在高可用性场景中将powseRemoteProtocols 指令值的“dnssd cups”更改为“none”,或限制该端口仅可信地址访问。
受影响用户可以使用如下命令查看 cups-powsed 服务的状态,如果服务已启用/正在运行,则系统可能容易受攻击:
systemctl status cups-powsed 或者service cups-powsed status
五、 参考链接
https://github.com/OpenPrinting/cups-powsed/security/advisories/GHSA-rj88-6mr5-rcw8
https://www.redhat.com/en/blog/red-hat-response-openprinting-cups-vulnerabilities
https://www.evilsocket.net/2024/09/26/Attacking-UNIX-systems-via-CUPS-Part-I/
https://nvd.nist.gov/vuln/detail/CVE-2024-47176