mirror of
				https://github.com/HackTricks-wiki/hacktricks.git
				synced 2025-10-10 18:36:50 +00:00 
			
		
		
		
	Translated ['src/network-services-pentesting/pentesting-631-internet-pri
This commit is contained in:
		
							parent
							
								
									e8fd656218
								
							
						
					
					
						commit
						56dcb0d510
					
				@ -1,23 +1,103 @@
 | 
			
		||||
# Protocolo de Impressão da Internet
 | 
			
		||||
 | 
			
		||||
{{#include ../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
# Protocolo de Impressão da Internet \(IPP\)
 | 
			
		||||
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.
 | 
			
		||||
 | 
			
		||||
O **Protocolo de Impressão da Internet (IPP)**, conforme especificado no **RFC2910** e **RFC2911**, serve como uma base para impressão pela internet. Sua capacidade de ser estendido é demonstrada por desenvolvimentos como **IPP Everywhere**, que visa padronizar impressão móvel e em nuvem, e a introdução de extensões para **impressão 3D**.
 | 
			
		||||
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**.
 | 
			
		||||
 | 
			
		||||
Aproveitando o protocolo **HTTP**, o IPP se beneficia de práticas de segurança estabelecidas, incluindo **autenticação básica/digest** e **criptografia SSL/TLS**. Ações como enviar um trabalho de impressão ou consultar o status da impressora são realizadas por meio de **requisições HTTP POST** direcionadas ao servidor IPP, que opera na **porta 631/tcp**.
 | 
			
		||||
 | 
			
		||||
Uma implementação bem conhecida do IPP é o **CUPS**, um sistema de impressão de código aberto prevalente em várias distribuições Linux e OS X. Apesar de sua utilidade, o IPP, assim como o LPD, pode ser explorado para transmitir conteúdo malicioso através de **arquivos PostScript** ou **PJL**, destacando um potencial risco de segurança.
 | 
			
		||||
---
 | 
			
		||||
## PoC Rápido – criando IPP bruto com Python
 | 
			
		||||
```python
 | 
			
		||||
# Example of sending an IPP request using Python
 | 
			
		||||
import requests
 | 
			
		||||
import struct, requests
 | 
			
		||||
 | 
			
		||||
url = "http://printer.example.com:631/ipp/print"
 | 
			
		||||
headers = {"Content-Type": "application/ipp"}
 | 
			
		||||
data = b"..."  # IPP request data goes here
 | 
			
		||||
# 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
 | 
			
		||||
 | 
			
		||||
response = requests.post(url, headers=headers, data=data, verify=True)
 | 
			
		||||
print(response.status_code)
 | 
			
		||||
r = requests.post("http://printer:631/ipp/print", headers={"Content-Type":"application/ipp"}, data=ipp)
 | 
			
		||||
print(r.status_code, r.content[:40])
 | 
			
		||||
```
 | 
			
		||||
Se você quiser saber mais sobre [**hacking de impressoras, leia esta página**](http://hacking-printers.net/wiki/index.php/Main_Page).
 | 
			
		||||
---
 | 
			
		||||
## 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)
 | 
			
		||||
 | 
			
		||||
| 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)
 | 
			
		||||
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**.
 | 
			
		||||
 | 
			
		||||
### 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 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.
 | 
			
		||||
{{#include ../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user