
PoC Python reproduisant la faille d’imprimante locale de CUPS 2.4.16 : capture le jeton d’authentification Local via un point de terminaison IPP malveillant, crée une imprimante file:// et lance une course de tâche pour écrire des fichiers appartenant à root.
Utilisation uniquement pour tests / recherche autorisés. N'exécutez ce PoC que contre des systèmes que vous possédez ou pour lesquels vous êtes explicitement autorisé à effectuer des tests.
Ce dépôt contient une reproduction orientée CUPS système de la vulnérabilité de l'imprimante locale dans CUPS 2.4.16.
L'implémentation a été développée à partir de la reproduction publiée de la vulnérabilité CUPS et adaptée pour fonctionner contre une installation CUPS système déjà en cours d'exécution, plutôt que de nécessiter une build CUPS installée séparément et un harnais de reproduction exécuté en root.
La reproduction suit cette chaîne générale :
CUPS 2.4.16
│
▼
Local authentication challenge
│
▼
Attacker-controlled IPP endpoint
│
▼
Authorization: Local <token>
│
▼
Authenticated CUPS administration
│
▼
CUPS-Create-Local-Printer
│
▼
file:// device URI
│
▼
Printer/job race
│
▼
Root-owned target file
L'exploit dépend d'une condition de course, donc une exécution réussie n'est pas garantie à chaque tentative.
La reproduction publiée est conçue comme un harnais de vulnérabilité contrôlé. En particulier, elle suppose une installation CUPS dédiée et effectue des opérations de configuration/réinitialisation qui sont appropriées pour un environnement de reproduction mais ne sont pas représentatives d'une installation de distribution déjà en cours d'exécution.
Cette implémentation, en revanche :
ipptool installé.cups-create-local-printer.test lorsqu'elle est disponible.Local de CUPS.file://.Testé dans le laboratoire de l'auteur avec :
ipptoolLa définition de test est attendue à l'emplacement :
/usr/share/cups/ipptool/cups-create-local-printer.test
Vérifiez votre installation avec :
cupsd -v
which ipptool
find /usr/share/cups -name 'cups-create-local-printer.test' 2>/dev/null
Configurez l'identité de l'attaquant et le chemin cible via des variables d'environnement :
export CUPS_ATTACKER="$USER"
export CUPS_TARGET="/tmp/cups-poc-target"
python3 exploit.py
Pour une reproduction contrôlée d'élévation de privilèges, choisissez une cible appropriée à votre environnement de test isolé.
Le script utilise également par défaut une cible de type sudoers sous /etc/sudoers.d/, donc ne l'exécutez pas à la légère sur un système de production.
Le PoC démarre un écouteur IPP et amène CUPS à s'authentifier auprès de celui-ci. L'écouteur renvoie initialement un challenge 401 avec :
WWW-Authenticate: Local trc="y"
La requête suivante contient :
Authorization: Local <token>
Le jeton est ensuite réutilisé contre le point de terminaison d'administration CUPS local.
La reproduction utilise :
CUPS-Create-Local-Printer
avec une URI de périphérique file://.
La boucle de candidats effectue les opérations sur l'imprimante de manière répétée, notamment :
CUPS-Add-Modify-Printer
CUPS-Accept-Jobs
Resume-Printer
Print-Job
La course est intentionnellement répétée car une seule tentative peut ne pas aboutir.
Ce dépôt est une adaptation, et non l'implémentation upstream canonique.
La logique de construction des requêtes et la séquence d'exploitation sont basées sur la reproduction publiée. Les principaux changements concernent l'exécution contre une installation CUPS système existante et la suppression des hypothèses de configuration/réinitialisation de l'environnement de reproduction.
Consultez l'avis de sécurité et le dépôt OpenPrinting CUPS en amont pour les informations faisant autorité sur la vulnérabilité et la reproduction originale.
N'utilisez pas ceci contre des installations CUPS sans autorisation.
Pour la validation défensive, les indicateurs utiles incluent des requêtes IPP inattendues vers des points de terminaison contrôlés par l'attaquant, des échanges d'authentification Local inhabituels, la création d'imprimantes locales inattendues et une activité suspecte sur les imprimantes/tâches.