
Proof-of-concept d'exploit pour CVE-2026-34990, une élévation de privilèges locale dans CUPS 2.4.16 via une écriture de fichier arbitraire à travers CUPS_CREATE_LOCAL_PRINTER et un jeton d'authentification local capturé.
Élévation de privilèges locale dans CUPS 2.4.16 via une écriture de fichier arbitraire à travers CUPS_CREATE_LOCAL_PRINTER.
CUPS permet de créer des imprimantes locales avec un device-uri défini sur un chemin file://. La soumission d'une tâche d'impression avec document-format: application/vnd.cups-raw et compression: gzip amène cupsd à décompresser les données de la tâche et à les écrire directement à cet emplacement — avec l'utilisateur sous lequel cupsd s'exécute (généralement root ou un compte de service hautement privilégié).
Le jeton d'authentification local requis pour les opérations d'administration peut être capturé en pointant le cups-create-local-printer.test d'ipptool vers un faux serveur IPP sur localhost. Lorsque CUPS se connecte pour s'authentifier, il envoie l'en-tête Authorization: Local <token>, que vous interceptez avant que CUPS ne puisse le vérifier.
ipptool avec cups-create-local-printer.test pointé vers le faux serveur — CUPS envoie son jeton d'authentification local pour s'authentifier401 WWW-Authenticate: Local trc="y" sur la première connexion pour capturer le jeton proprementdevice-uri: file:///etc/sudoers.d/<user>-pwnsudo -n /bin/bashL'appel create_local_printer garde son socket ouvert pendant la course — cela maintient l'enregistrement de l'imprimante en cours pendant que les opérations d'administration et la tâche d'impression aboutissent.
ipptool installé avec cups-create-local-printer.test (installation CUPS standard)# writes /etc/sudoers.d/<your-username>-pwn by default
python3 exploit.py
# custom target
CUPS_TARGET=/etc/sudoers.d/youruser-pwn CUPS_ATTACKER=youruser python3 exploit.py
Modifiez SUDOERS_LINE dans le script pour utiliser votre nom d'utilisateur réel — la valeur par défaut est aporter.
L'exploit essaie jusqu'à 12 fois. Chaque tentative supprime et recrée l'imprimante pour réinitialiser l'état.
Pour les tests de sécurité et la recherche autorisés uniquement.