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