Vulnérabilité permettant d'insérer des séquences d'échappement dans les terminaux d'autrui

Une vulnérabilité (CVE-2024-28085) a été découverte dans l'outil wall, fourni dans le paquet util-linux et destiné à envoyer des messages vers des terminaux. Cette vulnérabilité permet d'attaquer les terminaux d'autres utilisateurs en manipulant les séquences d'échappement. Le problème réside dans le fait que l'outil wall bloque l'utilisation des séquences d'échappement dans le flux d'entrée, mais ne le fait pas pour les arguments de la ligne de commande, permettant ainsi à un attaquant d'exécuter des séquences d'échappement dans le terminal d'autres utilisateurs.

Par exemple, en exécutant ‘wall $(printf «\033[33mHI»)’ on peut afficher le message «HI» en jaune. Grâce aux séquences d'échappement, qui permettent de déplacer le curseur, de nettoyer et de remplacer le contenu à l'écran, il est possible de simuler l'affichage d'un prompt de saisie de mot de passe depuis l'outil sudo dans le terminal d'un autre utilisateur. Si l'utilisateur ne se rend pas compte de la supercherie et saisit son mot de passe, celui-ci sera visible dans l'historique des commandes comme une commande inexistante (en réalité, l'utilisateur saisit son mot de passe dans la ligne de commande au lieu d'une commande). «\033[3A» // déplace le curseur de 3 lignes vers le haut «\033[K» // supprime l'affichage précédent «[sudo] password for a_user:» // affiche une demande sudo fictive «\033[?25l» // définit la couleur de fond pour masquer l'entrée «\033[38;2;48;10;36m»

Lors de l'affichage d'un avertissement indiquant que la commande saisie est introuvable, de nombreuses distributions lancent le gestionnaire /usr/lib/command-not-found, qui tente de déterminer le paquet contenant la commande manquante et de fournir une indication sur la possibilité de son installation. Le problème est que lors du lancement du gestionnaire command-not-found, la commande inexistante lui est transmise en tant que paramètre de ligne de commande, visible lors de l'examen des processus dans le système (par exemple, lorsque l'on tente de lancer l'outil non installé «xsnow», on verra dans la liste des processus «/usr/lib/command-not-found — xsnow»). En conséquence, un attaquant peut organiser la surveillance des processus lancés (par exemple, en analysant l'apparition de «/proc/$pid/cmdline» pour un numéro de PID prévisible) et déterminer le mot de passe saisi par la victime dans la ligne de commande.

Pour que l'utilisateur saisisse son mot de passe en réponse à une fausse invite sudo, une astuce consiste à surveiller la véritable exécution de l'outil sudo dans la liste des processus, à attendre sa fin et à lancer une attaque via « wall » juste après. Grâce à des manipulations avec des séquences d'échappement, l'attaquant peut remplacer le message après l'exécution réelle de sudo par une fausse invite redemandant le mot de passe. La victime peut penser qu'elle a fait une erreur de saisie et entrer le mot de passe une seconde fois, exposant ainsi le mot de passe dans les arguments du gestionnaire « command-not-found ».

Pour réussir l'attaque, il est nécessaire d'installer le mode « mesg » à la valeur « y », qui est par défaut dans Ubuntu, Debian et CentOS/RHEL. La possibilité de mener l'attaque a été démontrée dans Ubuntu 22.04 avec la configuration par défaut en utilisant gnome-terminal. Dans Debian, l'attaque est compliquée car le gestionnaire « command-not-found » n'est pas activé par défaut, tandis que dans CentOS/RHEL l'attaque ne fonctionnera pas, car l'outil wall est installé sans l'option setgid et n'a pas accès aux terminaux d'autres utilisateurs. Lors de l'utilisation de windows-terminal, l'attaque peut être modifiée pour changer le contenu du presse-papiers.

La vulnérabilité est présente dans le paquet util-linux depuis 2013, après que la version 2.24 a ajouté la possibilité de spécifier un message dans la ligne de commande wall, mais a omis d'appliquer le nettoyage des séquences d'échappement. Le correctif de la vulnérabilité a été inclus dans la sortie d'hier d'util-linux 2.40. Il est intéressant de noter que, lors de l'essai de correction de la vulnérabilité dans la version 2.39 d'util-linux, une autre vulnérabilité similaire a été découverte, permettant de substituer des caractères de contrôle par manipulation des locales.

Source : opennet.ru

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster