
PoC em Python que reproduz a falha de impressora local do CUPS 2.4.16: captura o token de autenticação Local por meio de um endpoint IPP malicioso, cria uma impressora file:// e explora uma condição de corrida em um job para gravar arquivos pertencentes ao root.
Apenas para testes autorizados / uso em pesquisa. Execute este PoC somente contra sistemas que você possui ou está explicitamente autorizado a testar.
Este repositório contém uma reprodução orientada ao CUPS do sistema da vulnerabilidade de impressora local no CUPS 2.4.16.
A implementação foi desenvolvida a partir da reprodução publicada da vulnerabilidade do CUPS e adaptada para funcionar contra uma instalação do CUPS do sistema já em execução, em vez de exigir uma compilação do CUPS instalada separadamente e um harness de reprodução executado como root.
A reprodução segue esta cadeia geral:
CUPS 2.4.16
│
▼
Desafio de autenticação local
│
▼
Endpoint IPP controlado pelo atacante
│
▼
Authorization: Local <token>
│
▼
Administração autenticada do CUPS
│
▼
CUPS-Create-Local-Printer
│
▼
URI de dispositivo file://
│
▼
Corrida entre impressora/job
│
▼
Arquivo alvo pertencente ao root
O exploit depende de corrida, portanto a execução bem-sucedida não é garantida em todas as tentativas.
A reprodução publicada foi projetada como um harness de vulnerabilidade controlado. Em particular, ela assume uma instalação dedicada do CUPS e realiza operações de configuração/reset apropriadas para um ambiente de reprodução, mas que não são representativas de uma instalação de distribuição já em execução.
Esta implementação, em vez disso:
ipptool instalado.cups-create-local-printer.test do sistema quando disponível.Local do CUPS.file://.Testado no laboratório do autor com:
ipptoolA definição de teste é esperada em:
/usr/share/cups/ipptool/cups-create-local-printer.test
Verifique sua instalação com:
cupsd -v
which ipptool
find /usr/share/cups -name 'cups-create-local-printer.test' 2>/dev/null
Configure a identidade do atacante e o caminho alvo por meio de variáveis de ambiente:
export CUPS_ATTACKER="$USER"
export CUPS_TARGET="/tmp/cups-poc-target"
python3 exploit.py
Para uma reprodução controlada de escalonamento de privilégios, escolha um alvo apropriado para o seu ambiente de teste isolado.
O script também usa por padrão um alvo no estilo sudoers em /etc/sudoers.d/, portanto não o execute de forma descuidada em um sistema de produção.
O PoC inicia um listener IPP e faz com que o CUPS se autentique contra ele. O listener inicialmente retorna um desafio 401 com:
WWW-Authenticate: Local trc="y"
A requisição subsequente contém:
Authorization: Local <token>
O token é então reutilizado contra o endpoint de administração local do CUPS.
A reprodução usa:
CUPS-Create-Local-Printer
com uma URI de dispositivo file://.
O loop de candidatos executa as operações de impressora repetidamente, incluindo:
CUPS-Add-Modify-Printer
CUPS-Accept-Jobs
Resume-Printer
Print-Job
A corrida é repetida intencionalmente porque uma única tentativa pode não vencer.
Este repositório é uma adaptação, não a implementação upstream canônica.
A lógica de construção de requisições e a sequência de exploração são baseadas na reprodução publicada. As principais mudanças estão em executar contra uma instalação do CUPS do sistema já existente e remover suposições de configuração/reset do ambiente de reprodução.
Consulte o aviso de segurança e o repositório upstream do OpenPrinting CUPS para obter as informações autoritativas sobre a vulnerabilidade e a reprodução original.
Não use isto contra instalações do CUPS sem autorização.
Para validação defensiva, os indicadores úteis incluem requisições IPP inesperadas para endpoints controlados pelo atacante, trocas incomuns de autenticação Local, criação de impressoras locais inesperadas e atividade suspeita de impressora/job.