Temi


Debolezze


  1. La directory /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 asset

🐲 Strategia di attacco


1. Si analizzano i permessi di accesso agli asset

Nella cartella /home/flag03 ci sono due asset:

Si 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.

2. Visualizzare il cronjob [root]

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.

3. Sfruttare la debolezza

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

👼 Mitigazione debolezze


Mitigazione #1

La directory writable.d ha permessi di accesso eccessivi

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