Cinq vulnérabilités d’élévation de privilèges locaux (LPE) ont été découvertes dans l’utilitaire needrestart utilisé par défaut dans Ubuntu Linux depuis la version 21.04, introduite il y a plus de 10 ans.
Les défauts étaient découvert par Qualys et sont suivis sous les noms CVE-2024-48990, CVE-2024-48991, CVE-2024-48992, CVE-2024-10224 et CVE-2024-11003. Ils ont été introduits dans la version 0.8 de needrestart, publiée en avril 2014, et corrigés hier seulement, dans la version 3.8.
Besoin de redémarrer est un utilitaire couramment utilisé sous Linux, y compris sur Ubuntu Server, pour identifier les services qui nécessitent un redémarrage après les mises à jour des packages, garantissant ainsi que ces services exécutent les versions les plus récentes des bibliothèques partagées.
Résumé des failles du LPE
Les cinq failles découvertes par Qualys permettent aux attaquants disposant d’un accès local à un système Linux vulnérable d’élever leurs privilèges vers root sans interaction de l’utilisateur.
Des informations complètes sur les failles ont été mises à disposition dans un fichier texte séparémais un résumé peut être trouvé ci-dessous :
- CVE-2024-48990: Needrestart exécute l’interpréteur Python avec une variable d’environnement PYTHONPATH extraite des processus en cours d’exécution. Si un attaquant local contrôle cette variable, il peut exécuter du code arbitraire en tant que root lors de l’initialisation de Python en implantant une bibliothèque partagée malveillante.
- CVE-2024-48992: L’interpréteur Ruby utilisé par needrestart est vulnérable lors du traitement d’une variable d’environnement RUBYLIB contrôlée par un attaquant. Cela permet aux attaquants locaux d’exécuter du code Ruby arbitraire en tant que root en injectant des bibliothèques malveillantes dans le processus.
- CVE-2024-48991: Une condition de concurrence critique dans needrestart permet à un attaquant local de remplacer le binaire de l’interpréteur Python en cours de validation par un exécutable malveillant. En chronométrant soigneusement le remplacement, ils peuvent inciter Needrestart à exécuter leur code en tant que root.
- CVE-2024-10224: Le module ScanDeps de Perl, utilisé par needrestart, gère de manière incorrecte les noms de fichiers fournis par l’attaquant. Un attaquant peut créer des noms de fichiers ressemblant à des commandes shell (par exemple, command|) pour exécuter des commandes arbitraires en tant que root lorsque le fichier est ouvert.
- CVE-2024-11003: La dépendance de Needrestart à l’égard du module ScanDeps de Perl l’expose à des vulnérabilités dans ScanDeps lui-même, où une utilisation non sécurisée des fonctions eval() peut conduire à l’exécution de code arbitraire lors du traitement d’une entrée contrôlée par un attaquant.
Il est important de noter que pour exploiter ces failles, un attaquant devrait accéder localement au système d’exploitation via un logiciel malveillant ou un compte compromis, ce qui atténue quelque peu le risque.
Cependant, des attaquants ont exploité des vulnérabilités d’élévation de privilèges similaires dans Linux dans le passé pour obtenir le root, notamment Loony Tunables et une autre exploitant un bogue nf_tables. Cette nouvelle faille ne doit donc pas être ignorée simplement parce qu’elle nécessite un accès local.
Avec l’utilisation généralisée de needrestart et sa vulnérabilité depuis très longtemps, les failles ci-dessus pourraient créer des opportunités d’élévation de privilèges sur les systèmes critiques.
Outre la mise à niveau vers la version 3.8 ou ultérieure, qui inclut des correctifs pour toutes les vulnérabilités identifiées, il est recommandé de modifier le fichier needrestart.conf pour désactiver la fonction d’analyse de l’interpréteur, qui empêche l’exploitation des vulnérabilités.
# Disable interpreter scanners.
$nrconf{interpscan} = 0;
Cela devrait empêcher le redémarrage d’exécuter des interpréteurs avec des variables d’environnement potentiellement contrôlées par un attaquant.