
Proof-of-concept-Exploit für CVE-2024-48990, der lokale Privilegienausweitung in needrestart mittels PYTHONPATH-Manipulation demonstriert. Enthält Runner-Skript und Payload-Binärdatei zum Testen.
Needrestart ist ein weit verbreitetes Dienstprogramm auf Linux-Systemen (standardmäßig auf vielen Ubuntu-Versionen), das nach einem Software-Update überprüft, ob ein Dienst oder das System selbst neu gestartet werden muss. Durch die Analyse laufender Prozesse wird ermittelt, ob diese aktualisierte Bibliotheken verwenden oder ob sie neu gestartet werden müssen, damit Änderungen wirksam werden.
Wenn needrestart einen Prozess erkennt, der einen Python-Interpreter ausführt, liest es die zu diesem Prozess gehörende Umgebungsvariable PYTHONPATH aus /proc/[pid]/environ und setzt sie, bevor es seinen eigenen Python-Interpreter zur Analyse startet.
Wenn der ursprüngliche Prozess einem lokalen Angreifer gehört, kann der Angreifer PYTHONPATH manipulieren, um auf eine schädliche Bibliothek zu verweisen.
Infolgedessen führt needrestart beim Ausführen des Python-Interpreters mit Root-Rechten und dem manipulierten PYTHONPATH den Code des Angreifers aus, was zu einer Rechteausweitung auf Root führt.
Diese Schwachstelle betrifft nur needrestart-Versionen vor 3.8. Version 3.8 und höher enthalten einen Fix, der Umgebungsvariablen wie PYTHONPATH ordnungsgemäß bereinigt, bevor der Python-Interpreter aufgerufen wird, wodurch eine Rechteausweitung durch bösartige Umgebungsmanipulation verhindert wird.
Klonen Sie das Repository.
Ändern Sie in runner.sh die IP, die zum Abrufen der kompilierten Binärdatei verwendet wird, so dass sie auf Ihren eigenen Rechner zeigt.
Erteilen Sie auf dem Rechner des Angreifers Ausführungsberechtigungen und führen Sie binary.sh aus.
Richten Sie einen HTTP-Server ein:
$ python3 -m http.server
