
Preuve de concept pour CVE-2024-48990, démontrant une élévation de privilèges locale dans needrestart via la manipulation de PYTHONPATH. Inclut un script d'exécution et un binaire de charge utile pour les tests.
Needrestart est un utilitaire largement utilisé sur les systèmes Linux (par défaut sur de nombreuses versions d'Ubuntu) qui vérifie, après une mise à jour logicielle, si un service ou le système lui-même doit être redémarré. En analysant les processus en cours d'exécution, il détermine s'ils utilisent des bibliothèques mises à jour ou s'ils doivent être redémarrés pour que les modifications prennent effet.
Lorsque needrestart détecte un processus exécutant un interpréteur Python, il lit la variable d'environnement PYTHONPATH associée à ce processus depuis /proc/[pid]/environ, puis la définit avant de lancer son propre interpréteur Python à des fins d'analyse.
Si le processus d'origine appartient à un attaquant local, celui-ci peut manipuler PYTHONPATH pour pointer vers une bibliothèque malveillante.
Par conséquent, lorsque needrestart exécute l'interpréteur Python avec les privilèges root et le PYTHONPATH manipulé, il finit par exécuter le code de l'attaquant, ce qui conduit à une élévation de privilèges vers root.
Cette vulnérabilité n'affecte que les versions de needrestart antérieures à 3.8. Les versions 3.8 et ultérieures incluent un correctif qui nettoie correctement les variables d'environnement comme PYTHONPATH avant d'invoquer l'interpréteur Python, empêchant ainsi l'élévation de privilèges via une manipulation malveillante de l'environnement.
Clonez le dépôt.
Dans runner.sh, modifiez l'IP utilisée pour récupérer le binaire compilé afin qu'elle pointe vers votre propre machine.
Sur la machine de l'attaquant, accordez les permissions d'exécution et exécutez binary.sh.
Mettez en place un serveur HTTP :
$ python3 -m http.server
