/home/flag03/writable.d ha permessi di accesso 777. Ogni utente che ha accesso alla home directory di flag03 ha anche accesso alla directory writable.d. → Riduci l’esposizione superflua di un assetNella cartella /home/flag03 ci sono due asset:
writable.dwritable.shSi nota che la cartella writable.d ha permessi di accesso estremamente generosi.
Inoltre esaminando il file writable.sh notiamo come vengano eseguiti i file presenti all’interno della cartella sopra (per 5 secondi) e poi essi vengano eliminati.
Dalla consegna dell’esercizio sappiamo che c’è un cronjob.
Diventando root possiamo vedere a scopi didattici il cronjob dell’utente flag03 .
su - nebula
sudo -i
crontab -l -u flag03
L’ultima riga conferma che lo script /home/flag03/writable.sh è eseguito automaticamente dal cronjob.
Debolezza: Eseguire codice arbitrario con i permessi di flag03 .
Grazie ai permessi di accesso laschi, è possibile creare uno script all’interno della cartella writable.d che eseguirà con i permessi di flag03.
#!/bin/bash
cp /bin/getflag /home/flag03/getflag
chmod u+s /home/flag03/getflag
In questo modo quando il cronjob viene eseguito, viene creata una copia del binario getflag e gli viene assegnato il SETUID bit. In questo modo l’utente level03 potrà tranquillamente eseguirlo come utente flag03.
Per attende in maniera “elegante” si può usare il comando seguente:
watch -n 1 ls -l /home/flag03
La mitigazione più semplice e diretta è quella di abbassare i privilegi lungo tutto il percorso /home/flag03/writable.d. In questo modo si impedisce a utenti diversi da flag03 e da root di iniettare script arbitrari nella cartella writable.d.
Per farlo si imposta il gruppo di lavoro della home directory a flag03:
chgrp flag03 /home/flag03
Si impostano i permessi di accesso della home directory al solo utente, oppure all’utente e al gruppo (ma non in scrittura).
chmod 700 /home/flag03 # oppure
chmod 750 /home/flag03
Questo basta per impedire all’utente level03 di iniettare script arbitrari nella cartella writable.d e quindi di effettuare l’exploit.
Tuttavia è sempre buona norma restringere i permessi laddove possibile. Si restringono quindi anche quelli di writable.d:
chmod 700 /home/flag03/writable.d