Une série de nouvelles vulnérabilités dans telnetd, permettant d'obtenir des privilèges root sur le système.

Suite à la vulnérabilité révélée fin janvier, permettant de se connecter en tant qu'utilisateur root sans vérification de mot de passe, plusieurs méthodes d'escalade des privilèges ont été détectées dans le serveur telnetd du package GNU InetUtils, résultant d'une correction incomplète de la vulnérabilité en 1999 (CVE-1999-0073).

Les vulnérabilités sont causées par la possibilité, dans telnetd, pour le client de transmettre des variables d'environnement au serveur via l'option ENVIRON. Ces variables d'environnement sont définies et traitées dans le contexte du processus telnetd et sont transmises à ses processus fils, y compris le processus /bin/login exécuté avec les droits root. La vulnérabilité CVE-1999-0073 permettait à un client telnet de transmettre la variable d'environnement LD_LIBRARY_PATH, dont la définition entraîne le chargement de la bibliothèque partagée spécifiée par l'utilisateur lors de l'exécution du processus login. En cas de capacité à charger des fichiers dans un système prenant en charge les connexions par le protocole telnet, un attaquant peut charger une bibliothèque spécialement conçue et organiser son chargement avec les droits root.

Dans telnetd du package GNU InetUtils, la vulnérabilité a été corrigée en interdisant les variables d'environnement dangereuses par le biais d'un filtrage basé sur les masques «LD_», «LIBPATH», «ENV», «IFS» et «_RLD_». Cependant, la variable d'environnement «CREDENTIALS_DIRECTORY», traitée lors du lancement de /usr/bin/login, n'a pas été bloquée. Grâce à cette variable d'environnement, l'utilisateur pouvait modifier le répertoire des paramètres d'identification et placer dans ce nouveau répertoire un fichier login.noauth avec la valeur «yes», qui active la connexion sans mot de passe (similaire à la transmission du drapeau «-f» au processus login). Ce paramètre s'applique à tous les utilisateurs, y compris root.

L'attaque consiste à créer un sous-répertoire par un utilisateur non privilegié dans son répertoire personnel, à y télécharger un fichier login.noauth et à tenter de se connecter en définissant la variable d'environnement «CREDENTIALS_DIRECTORY=répertoire créé» et en transmettant la variable d'environnement «USER=root» (dans telnet, il existe un mode de connexion automatique où le nom d'utilisateur est pris non pas dans la ligne de commande, mais transmis par la variable d'environnement USER). Exemple d'exploit.

Une autre méthode d'obtention d'un accès root via telnetd a été identifiée, impliquant la manipulation des variables d'environnement OUTPUT_CHARSET et LANGUAGE, traitées par la bibliothèque GNU gettext, ainsi que de la variable d'environnement GCONV_PATH, utilisée dans glibc. En définissant les variables d'environnement OUTPUT_CHARSET et LANGUAGE, un attaquant peut activer dans gettext la fonctionnalité de conversion d'encodage des caractères, qui appelle la fonction iconv_open(). À son tour, lors de l'exécution de la fonction iconv_open() lors du chargement du fichier de configuration gconv-modules, le chemin est calculé en tenant compte de la variable d'environnement GCONV_PATH. En substituant le fichier gconv-modules, il est possible d'organiser le chargement de sa propre bibliothèque partagée lors de l'affichage d'une chaîne localisée par le processus login.

Les identifiants CVE pour les vulnérabilités identifiées n'ont pas encore été attribués. Comme méthode de protection, il est envisagé d'utiliser une liste blanche de valeurs acceptables (« TERM », « DISPLAY », « USER », « LOGNAME » et « POSIXLY_CORRECT ») en bloquant toutes les autres variables d'environnement, de manière similaire à ce qui est fait avec les variables d'environnement dans OpenSSH. Les vulnérabilités ont été confirmées dans le paquet GNU InetUtils, dont l'implémentation de serveurs telnetd, qui est fourni dans Debian, Ubuntu et ses distributions dérivées. Les correctifs pour GNU InetUtils ne sont pas encore disponibles. Rocky Linux 9 propose une version modifiée de telnetd qui n'est pas vulnérable, où au lieu de filtrer les variables d'environnement dangereuses, une vérification par liste blanche est incluse. Le filtrage par liste blanche est également mis en œuvre dans telnetd de FreeBSD. Dans OpenBSD, telnetd a été supprimé du système en 2005.

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