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

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

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

bash
# 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):
bash
ippfind --timeout 3 --txt -v "@local and port=631"  # lista impressoras
  • ipptool – solicitações arbitrárias definidas em um arquivo .test:
bash
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

bash
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)

AnoID(s) CVEComponente afetadoImpacto
2025CVE-2023-50739Firmware Lexmark (parser IPP)Heap-overflow → RCE via Wi-Fi/LAN
2024CVE-2024-47076, 47175, 47176, 47177cups-browsed, libcupsfilters, libppd, cups-filtersCadeia RCE totalmente não autenticada em qualquer desktop/servidor Linux com a navegação CUPS habilitada
2024CVE-2024-35235cupsd 2.4.8-Truque de symlink → chmod 666 arbitrário → escalonamento de privilégios
2023CVE-2023-0856 (Canon) + Pwn2OwnStack-overflow no atributo sides → execução remota de código

Cadeia RCE do cups-browsed (setembro de 2024)

  1. cups-browsed escuta na UDP/631 por anúncios de impressoras.
  2. Um atacante envia um único pacote forjado apontando para uma URL IPP maliciosa (CVE-2024-47176).
  3. libcupsfilters busca automaticamente o PPD remoto sem validação (CVE-2024-47076 & 47175).
  4. 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.

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 TrabalhoCancel-Job seguido de Send-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

  1. Aplique patches no CUPS e no firmware da impressora prontamente; inscreva-se em feeds PSIRT do fornecedor.
  2. Desative cups-browsed e UDP/631, a menos que a impressão zeroconf seja necessária.
  3. Restrinja TCP/631 a sub-redes/VPN confiáveis e imponha TLS (ipps://).
  4. Exija autenticação Kerberos/Negotiate ou por certificado em vez de impressão anônima.
  5. Monitore logs: /var/log/cups/error_log com LogLevel debug2 mostrará downloads de PPD não sólidos ou invocações de filtro suspeitas.
  6. 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