Protocolo de Impressão da Internet
Reading time: 6 minutes
tip
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporte o HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
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-browsed
escuta na UDP/631 por anúncios de impressoras.- Um atacante envia um único pacote forjado apontando para uma URL IPP maliciosa (CVE-2024-47176).
libcupsfilters
busca 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/print
sem autenticação. Um payload PostScript malicioso pode invocar comandos de shell (system("/bin/nc ...")
) em dispositivos de alto desempenho. - Sequestro de Trabalho –
Cancel-Job
seguido deSend-Document
permite que um atacante substitua o documento de outra pessoa antes que ele seja impresso fisicamente. - Combo SNMP → IPP – a comunidade padrão
public
frequentemente 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-browsed
e 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_log
comLogLevel debug2
mostrará 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.
tip
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporte o HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.