
CUPS 2.4.16 Élévation de privilèges locale via fuite de jeton d'administrateur local et écriture arbitraire de fichier file:// (CVE-2026-34990)
CUPS 2.4.16 contient une vulnérabilité d'élévation de privilèges locale (également référencée sous GHSA-c54j-2vqw-wpwp).
Socket accessible en écriture par tous — /run/cups/cups.sock est accessible en écriture par tous,
permettant à tout utilisateur local d'envoyer des requêtes IPP au démon CUPS
(s'exécutant en tant que root).
Fuite de jeton local — CUPS-Create-Local-Printer peut être exploité pour
divulguer le jeton d'autorisation Local en pointant device-uri vers un
serveur IPP contrôlé par l'attaquant.
Écriture de fichier arbitraire — Avec le jeton divulgué, un attaquant peut créer
une imprimante avec device-uri=file:///etc/sudoers.d/<user>, amenant CUPS
(en tant que root) à écrire un contenu arbitraire vers n'importe quel chemin sur le disque.
# 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
🧠 Comment ça fonctionne
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 │
└─────────────────────────────────────────────────────────────────┘
🛡️ Avertissement
Cet outil est fourni à des fins de tests de sécurité autorisés et
d'éducation uniquement. Ne l'utilisez pas contre des systèmes que vous ne possédez pas ou pour
lesquels vous n'avez pas l'autorisation explicite de tester. L'auteur n'est pas responsable de toute mauvaise utilisation
ou dommage causé par cet outil.
📚 Références
GHSA-c54j-2vqw-wpwp
CVE-2026-34990
CUPS Security Advisories
📄 Licence
MIT — voir le fichier LICENSE.
text
### Ficheiro 3: `LICENSE`
```bash
nano LICENSE