Simone Margaritelli, auteur du pare-feu OpenSnitch et de l'analyseur de réseau bettercap, a divulgué prématurément des informations sur des vulnérabilités critiques précédemment annoncées, permettant d'attaquer à distance des distributions GNU/Linux, Solaris, FreeBSD et certains autres systèmes BSD. La publication était initialement prévue pour le 6 octobre, mais en raison d'une fuite d'informations, les données ont dû être publiées en avance, avant que la plupart des distributions n'aient eu le temps de préparer des mises à jour. Les vulnérabilités concernent le serveur d'impression CUPS et permettent d'exécuter du code à distance sans authentification dans le système.
Le chercheur ayant identifié le problème a préparé un prototype fonctionnel d'exploit, utilisant une combinaison de plusieurs vulnérabilités et permettant d'exécuter à distance du code avec les droits du processus de gestion des tâches d'impression CUPS (généralement l'utilisateur « lp »). L'exploit permet de remplacer discrètement les paramètres d'impression de l'utilisateur ou d'ajouter une nouvelle imprimante associée à un serveur IPP contrôlé par l'attaquant, qui fournit une description PPD spécialement formatée. Le traitement de ce PPD lors de l'initiation d'une impression entraîne l'exécution du code de l'attaquant (il est nécessaire que la victime initie une impression sur l'imprimante falsifiée ou remplacée par l'attaquant).
Les systèmes avec serveur CUPS et le processus cups-browsed en cours d'exécution, acceptant des connexions réseau sur le port 631 (UDP). L'attaque peut également être réalisée depuis le réseau local, dans lequel des protocoles de serveur impression sont utilisés, tels que zeroconf, mDNS ou DNS-SD. Seules les configurations de cups-browsed dans lesquelles le fichier /etc/cups/cups-browsed.conf a la valeur « cups » pour le paramètre BrowseRemoteProtocols sont vulnérables. Dans les distributions avec systemd, vous pouvez vérifier l'utilisation du service cups-browsed avec la commande « sudo systemctl status cups-browsed ».
La vulnérabilité se manifeste dans tous les systèmes d'impression basés sur CUPS qui utilisent des versions vulnérables des paquets cups-filters, libcupsfilters, libppd et cups-browsed. Les correctifs ne sont actuellement disponibles que sous forme de patches (1, 2, 3) - les versions actuelles cups-filters 2.0.1, libcupsfilters 2.1b1, libppd 2.1b1 et cups-browsed 2.0.1 sont affectées par ces vulnérabilités. Dans les distributions, le problème demeure non corrigé ; vous pouvez suivre l'apparition des mises à jour sur les pages suivantes : Debian, Ubuntu, RHEL, SUSE/openSUSE, Fedora, Arch, FreeBSD. En tant que solution de contournement pour protéger avant l'installation de la mise à jour, vous pouvez bloquer l'accès au port UDP 631 pour les réseaux externes, désactiver le service cups-browsed ou régler l'option BrowseRemoteProtocols sur "none".
Vulnérabilités identifiées :
- CVE-2024-47176 - vulnérabilité dans le processus cups-browsed, qui crée un socket réseau acceptant des connexions sur le port 631, attaché à toutes les interfaces réseau existantes sur le système et acceptant les requêtes IPP "Get-Printer-Attributes" de tous les systèmes externes. En manipulant ce service, il est possible d'ajouter à la système une imprimante contrôlée par l'attaquant et de l'exploiter via la transmission de la configuration PPD des vulnérabilités dans d'autres composants CUPS.
- CVE-2024-47177 - vulnérabilité dans le gestionnaire foomatic-rip de l'ensemble cups-filters, permettant l'exécution de code via le passage du paramètre FoomaticRIPCommandLine dans le fichier PPD, que l'attaquant peut transmettre grâce à la vulnérabilité décrite ci-dessus dans cups-browsed. Les commandes shell spécifiées dans le paramètre FoomaticRIPCommandLine sont exécutées telles quelles, sans tenir compte du fait que le paramètre peut être défini par un tiers. Par exemple, pour écrire dans le fichier /tmp/VULNERABLE, on peut spécifier "FoomaticRIPCommandLine: "echo 1 > /tmp/VULNERABLE".
- CVE-2024-47175 - vulnérabilité dans libppd, causée par l'absence de vérification de la validité de la valeur ppdCreatePPDFromIPP2 lors de l'écriture des attributs IPP dans un fichier PPD temporaire. Ce problème permet d'injecter des données arbitraires dans le fichier PPD résultant en attachant des attributs à l'aide du caractère de retour à la ligne. Par exemple, il est possible de contourner la vérification et de fournir l'attribut FoomaticRIPCommandLine avec les attributs autorisés pour exploiter la vulnérabilité mentionnée ci-dessus dans cups-filters.
- CVE-2024-47076 — vulnérabilité dans la bibliothèque libcupsfilters du paquet cups-filters, liée à l'absence de vérification des valeurs cfGetPrinterAttributes5 renvoyées par un serveur IPP externe, ce qui permet à un attaquant de traiter des attributs IPP arbitraires dans d'autres sous-systèmes CUPS, par exemple lors de la génération de fichiers PPD.
Le scénario d'attaque sur CUPS se déroule en plusieurs étapes :
- Déploiement par l'attaquant de son propre serveur IPP.
- Envoi à la victime d'un paquet UDP contenant un lien vers une imprimante liée au serveur IPP lancé par l'attaquant.
- Après avoir reçu ce paquet, le système de la victime se connecte au serveur IPP de l'attaquant et demande les attributs de l'imprimante.
- En réponse à la demande de la victime, le serveur IPP de l'attaquant retourne un fichier PPD avec des attributs, parmi lesquels figure l'attribut FoomaticRIPCommandLine. Cet attribut est attaché à l'un des attributs valides en utilisant le symbole «\n» dans une seule ligne (par exemple, «cupsPrivacyURI: «https://www.google.com/\n*FoomaticRIPCommandLine: «), ce qui permet de contourner la vérification et entraîne l'enregistrement de FoomaticRIPCommandLine comme un attribut distinct lors de la sauvegarde des données reçues dans un fichier temporaire.
- À la suite du traitement des attributs transmis dans le système de la victime, un fichier PPD est créé : … *cupsSNMPSupplies: False *cupsLanguages: «en» *cupsPrivacyURI: «https://www.google.com/» *FoomaticRIPCommandLine: «echo 1 > /tmp/I_AM_VULNERABLE» *cupsFilter2 : «application/pdf application/vnd.cups-postscript 0 foomatic-rip» *cupsSingleFile: True *cupsFilter2: «application/vnd.cups-pdf application/pdf 0 -» …
- Lors de l'impression sur l'imprimante fournie par l'attaquant, la commande «echo 1 > /tmp/I_AM_VULNERABLE» sera exécutée dans le système de la victime.
Le chercheur ayant découvert les vulnérabilités note qu'il lui a fallu quelques jours pour trouver la vulnérabilité, mais ensuite, une correspondance prolongée de 22 jours avec les développeurs du projet OpenPrinting a suivi, avec des tentatives de les convaincre de l'importance du problème et de la nécessité de préparer des correctifs. La discussion s'est enlisée dans des débats sur la question de savoir s'il fallait vraiment corriger les problèmes mentionnés, et la situation a pu être renversée seulement en générant un buzz public autour de la découverte d'un problème critique. Il est également intéressant de noter l'apparition d'une fuite d'informations, au cours de laquelle le rapport confidentiel et l'exploit transmis au CERT ont été publiés sur le forum breachforums.st dans l'espace public, malgré l'embargo imposé sur la divulgation des informations.
Source : opennet.ru
