Unix通用打印系统cups-browsed远程代码执行误差剖析

宣布时间 2024-12-13

一、误差形貌


2024年9月 ,清静研究员Simone Margaritelli披露了Unix通用打印系统CUPS(Common UNIX Printing System)保存一系列清静误差 ,使用多个误差组合可在受影响的系统上执行远程下令  。尊龙凯官网入口ADLab研究职员对该误差的原理举行深入剖析 ,同时提出修复建议缓和解步伐  。


表1.png


二、相关先容


CUPS是一个开源的打印系统 ,用于Linux和其他类UNIX操作系统  。CUPS 提供 Web界面和Berkeley下令行界面等多种方法来管理打印机和打印使命  。例如会见http://localhost:631可管理打印机  。


图1.png


CUPS主要使用Internet Printing Protocol(IPP)来实现外地和网络打印机的打印功效  。IPP是一个在互联网上打印的标准网络协议 ,它允许用户可以通过互联网作远距离打印及管理打印事情等  。IPP接纳的超文本传输协议HTTP的POST要领在客户端和打印服务器之间举行会话  。


图2.png


cups-browsed是一个开源的打印服务组件 ,它是Common UNIX Printing System(CUPS)的一部分  。cups-browsed认真在外地网络上自动发明和添加打印机 ,使用mDNS(多播DNS)或DNS-SD(DNS服务发明)协议来侦测网络上的打印装备  。它使得用户能够无需手动设置即可使用网络打印机  。


三、原理剖析


该误差源于cups-browsed服务 ,该服务绑定在UDP INADDR_ANY:631端口上 ,接受任何ip发送过来数据  。同时该服务适配大大都UNIX系统 ,且大大都装备默认开启该服务  。


该服务的功效是发明互联网上的打印机 ,然后将打印机添加到系统服务上 ,相关功效的实现代码在cups-browsed.c文件中  。代码中建设一个名为BrowseSocket的套接字 ,然后绑定在631端口  。


图3.png


当检查到系统支持BrowseRemoteProtocols时 ,建设一个 UNIX 套接字通道 ,并设置监视该通道上的输入事务  。一旦有数据可读 ,将挪用process_browse_data函数来处置惩罚这些数据  。


图4.png


BrowseRemoteProtocols参数可通过/etc/cups/cups-browsed.conf文件举行设置 ,此处一样平常默认开启  。


图5.png


process_browse_data是要害的数据处置惩罚函数 ,该函数挪用recvfrom从BrowseSocket套接字读取数据包packet  。数据包名堂遵从HEX_NUMBER HEX_NUMBER TEXT_DATA ,使用该名堂的数据的缘故原由时是程序在处置惩罚packet时使用了下面的函数对数据举行处置惩罚  。


sscanf (packet, "%x%x%1023s",&type, &state, uri)


吸收到数据包后会挪用allowed函数对ip举行合理性检查 ,该检查规则可通过/etc/cups/cups-browsed.conf文件举行设置  。


图6.png


allowed检查通事后会将数据包传入found_cups_printer函数举行进一步处置惩罚  。


found_cups_printer函数中挪用httpSeparateURI函数剖析传入的uri参数并将其拆分为协议、用户名、主机名、端口、资源路径等部分  。然后凭证剖析获得的各部分信息 ,对uri是否即是”/printers/”和”/calsses/”字符串举行检查  。检查通事后挪用examine_discovered_printer_record函数来处置惩罚发明的打印机纪录  。


图7.png


处置惩罚完数据后挪用cfGetPrinterAttributes函数举行回连 ,其中先使用httpConnect函数先建设http毗连 ,然后挪用ippNewRequest建设IPP毗连 ,最后向IPP Server发送获取打印机属性的请求  。


图8.png


发送完请求后cups-browsed程序会挪用ppdCreatePPDFromIPP2函数建设PPD文件然后将吸收的打印机属性依次生涯到文件内里  。


图9.png


至此 ,已经可以乐成设置PPD的属性 ,接下来就是想步伐执行写入的数据  。这需要使用CUPS的一个过滤器指令cupsFilter2 ,该指令用于处置惩罚打印作业中的筛选和转换操作  。

例如下面的指令要求cups将切合打印机属性的postscript名堂的数据转达给program过滤器举行处置惩罚 ,优先级为0  。


*cupsFilter2:"application/pdf application/vnd.cups-postscript 0 program


CUPS划定只能使用/usr/lib/cups/filter路径下面的可执行文件 ,最终以foomatic-rip过滤器作为使用的目的  。该过滤器接受PPD文件中的FoomaticRIPCommandLine指令 ,通过它可以执行恣意下令  。


四、误差修复

阻止现在 ,Ubuntu ,Debian ,Fedora等多个系统中涉及误差的多个版本已基本修复  。


图10.png


在Ubuntu最新版的修复计划中完全删除对旧版 CUPS 协媾和 LDAP 的支持  。


图11.png


五、缓解步伐


误差修复版本已经上传 ,Ubuntu系统中运行下面两条下令即可举行升级  。


sudo apt update

sudo apt upgrade


若是上面的升级不乐成 ,使用下面两种步伐缓解该误差:


(1)直接禁用cups-browsed服务

sudo systemctl stop cups-browsed

sudo systemctl disable cups-browsed


(2)若是该功效需要使用 ,建议将/etc/cups/cups-browsed.conf中BrowseRemoteProtocols指令值从默认的“dnssd cups”更改为“none”  。


参考链接:


[1]https://www.evilsocket.net/2024/09/26/Attacking-UNIX-systems-via-CUPS-Part-I/

[2]https://gist.github.com/stong/c8847ef27910ae344a7b5408d9840ee1

[3]https://censys.com/common-unix-printing-service-vulnerabilities/

[4]https://blog.ostorlab.co/cups-vulnerabilities.html

[5]https://github.com/OpenPrinting/cups-browsed/security/advisories/GHSA-rj88-6mr5-rcw8

[6]https://ubuntu.com/security/notices/USN-7043-4

[7]https://ubuntu.com/security/notices/USN-7042-3

[8]https://launchpad.net/ubuntu/+source/cups-browsed/2.0.1-0ubuntu2.1

[9]https://www.upwind.io/feed/analyzing-the-latest-cups-rce-vulnerability-threats-and-mitigations


尊龙凯官网入口起劲防御实验室(ADLab)


ADLab建设于1999年 ,是中国清静行业最早建设的攻防手艺研究实验室之一 ,微软MAPP妄想焦点成员 ,“黑雀攻击”看法首推者  。阻止现在 ,ADLab已通过 CNVD/CNNVD/NVDB/CVE累计宣布清静误差5000余个 ,一连坚持国际网络清静领域一流水准  。实验室研究偏向涵盖基础清静研究、数据清静研究、5G清静研究、人工智能清静研究、移动清静研究、物联网清静研究、车联网清静研究、工控清静研究、信创清静研究、云清静研究、无线清静研究、高级威胁研究、攻防系统建设  。研究效果应用于产品焦点手艺研究、国家重点科技项目攻关、专业清静服务等  。


adlab.jpg