5.8 KiB
Protocolo de Impressão da Internet
{{#include ../banners/hacktricks-training.md}}
O Protocolo de Impressão da Internet (IPP), conforme especificado no RFC 2910 e RFC 2911, é o padrão de fato para impressão em rede. Ele se baseia no HTTP/1.1 (seja em texto claro ou TLS) e expõe uma API rica para criar trabalhos de impressão, consultar capacidades da impressora e gerenciar filas. Extensões modernas como IPP Everywhere permitem até impressão sem driver a partir de ambientes móveis e em nuvem, enquanto o mesmo formato de pacote foi reutilizado para impressoras 3-D.
Infelizmente, expor a porta 631/tcp (e 631/udp para descoberta de impressoras) muitas vezes leva a sérios problemas de segurança – tanto em impressoras de escritório tradicionais quanto em qualquer host Linux/Unix executando CUPS.
PoC Rápido – criando IPP bruto com Python
import struct, requests
# Minimal IPP Get-Printer-Attributes request (operation-id 0x000B)
ipp = struct.pack(
">IHHIHH", # version 2.0, operation-id, request-id
0x0200, # 2.0
0x000B, # Get-Printer-Attributes
0x00000001, # request-id
0x01, 0x47, # operation-attributes-tag, charset attr (skipped)
) + b"\x03" # end-of-attributes
r = requests.post("http://printer:631/ipp/print", headers={"Content-Type":"application/ipp"}, data=ipp)
print(r.status_code, r.content[:40])
Enumeração & Recon
1. Nmap NSE
# run all CUPS/IPP scripts
nmap -sV -p631 --script=cups* <target>
# or only basic info
nmap -p631 --script=cups-info,cups-queue-info <target>
O script cups-info extrai modelo, estado e estatísticas da fila, enquanto cups-queue-info enumera trabalhos pendentes.
2. Utilitários IPP do CUPS
ippfind– descoberta multicast/UDP (funciona contra cups-browsed):
ippfind --timeout 3 --txt -v "@local and port=631" # lista impressoras
ipptool– solicitações arbitrárias definidas em um arquivo .test:
ipptool -tv ipp://<IP>/ipp/print get-printer-attributes.test
O arquivo get-printer-attributes.test incluído consulta a versão do firmware, formatos de documento suportados, etc.
3. Dorks do Shodan / Censys
shodan search 'product:"CUPS (IPP)" port:631'
Mais de 70 000 hosts estavam expondo publicamente o CUPS em abril de 2025.
Vulnerabilidades Recentes (2023-2025)
| Ano | ID(s) CVE | Componente afetado | Impacto |
|---|---|---|---|
| 2025 | CVE-2023-50739 | Firmware Lexmark (parser IPP) | Heap-overflow → RCE via Wi-Fi/LAN |
| 2024 | CVE-2024-47076, 47175, 47176, 47177 | cups-browsed, libcupsfilters, libppd, cups-filters | Cadeia RCE totalmente não autenticada em qualquer desktop/servidor Linux com a navegação CUPS habilitada |
| 2024 | CVE-2024-35235 | cupsd 2.4.8- | Truque de symlink → chmod 666 arbitrário → escalonamento de privilégios |
| 2023 | CVE-2023-0856 (Canon) + Pwn2Own | Stack-overflow no atributo sides → execução remota de código |
Cadeia RCE do cups-browsed (setembro de 2024)
cups-browsedescuta na UDP/631 por anúncios de impressoras.- Um atacante envia um único pacote forjado apontando para uma URL IPP maliciosa (CVE-2024-47176).
libcupsfiltersbusca automaticamente o PPD remoto sem validação (CVE-2024-47076 & 47175).- Um PPD elaborado abusa do filtro foomatic-rip para executar comandos de shell arbitrários sempre que algo é impresso (CVE-2024-47177).
O código de prova de conceito é público no blog do pesquisador e os exploits não requerem autenticação; o acesso à rede na UDP/631 é suficiente.
Mitigações temporárias
sudo systemctl stop cups-browsed
sudo systemctl disable cups-browsed
sudo ufw deny 631/udp # or equivalent firewall rule
Patches foram lançados por distribuições principais em outubro de 2024 – assegure-se de que cups-filters ≥ 2.0.0.
Configuração incorreta do symlink Listen do cupsd (CVE-2024-35235)
Colocar um link simbólico na diretiva Listen do cupsd.conf faz com que cupds (root) execute chmod 666 em um caminho escolhido pelo atacante, levando a arquivos de sistema graváveis e, no Ubuntu, à execução de código via um PPD malicioso com FoomaticRIPCommandLine.
Técnicas Ofensivas
- Trabalho de impressão bruto não autenticado – muitas impressoras aceitam
POST /ipp/printsem autenticação. Um payload PostScript malicioso pode invocar comandos de shell (system("/bin/nc ...")) em dispositivos de alto desempenho. - Sequestro de Trabalho –
Cancel-Jobseguido deSend-Documentpermite que um atacante substitua o documento de outra pessoa antes que ele seja impresso fisicamente. - Combo SNMP → IPP – a comunidade padrão
publicfrequentemente vaza o nome da fila interna necessário na URL do IPP.
Melhores Práticas Defensivas
- Aplique patches no CUPS e no firmware da impressora prontamente; inscreva-se em feeds PSIRT do fornecedor.
- Desative
cups-browsede UDP/631, a menos que a impressão zeroconf seja necessária. - Restrinja TCP/631 a sub-redes/VPN confiáveis e imponha TLS (ipps://).
- Exija autenticação Kerberos/Negotiate ou por certificado em vez de impressão anônima.
- Monitore logs:
/var/log/cups/error_logcomLogLevel debug2mostrará downloads de PPD não sólidos ou invocações de filtro suspeitas. - Em redes de alta segurança, mova a impressão para um servidor de impressão isolado e endurecido que proxy trabalhos para dispositivos apenas via USB.
Referências
- Akamai – “Vulnerabilidade Crítica de RCE no Linux no CUPS — O que sabemos e como nos preparar”, abril de 2025.
- Debian Security Tracker – detalhes do CVE-2024-35235. {{#include ../banners/hacktricks-training.md}}