macOS FS Tricks
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Permessi in una directory:
read - puoi enumerare le voci della directory
write - puoi eliminare/scrivere file nella directory e puoi eliminare cartelle vuote.
Ma non puoi eliminare/modificare cartelle non vuote a meno che tu non abbia permessi di scrittura su di esse.
Non puoi modificare il nome di una cartella a meno che tu non ne sia il proprietario.
execute - ti è consentito di attraversare la directory - se non hai questo diritto, non puoi accedere a nessun file al suo interno, né in alcuna sottodirectory.
Come sovrascrivere un file/cartella di proprietà di root, ma:
Un proprietario della directory nel percorso è l'utente
Un proprietario della directory nel percorso è un gruppo di utenti con accesso in scrittura
Un gruppo di utenti ha accesso in scrittura al file
Con una delle combinazioni precedenti, un attaccante potrebbe iniettare un link simbolico/duro nel percorso previsto per ottenere una scrittura arbitraria privilegiata.
Se ci sono file in una directory dove solo root ha accesso R+X, questi non sono accessibili a nessun altro. Quindi una vulnerabilità che consente di spostare un file leggibile da un utente, che non può essere letto a causa di quella restrizione, da questa cartella a un'altra, potrebbe essere sfruttata per leggere questi file.
Esempio in: https://theevilbit.github.io/posts/exploiting_directory_permissions_on_macos/#nix-directory-permissions
Se un processo privilegiato sta scrivendo dati in un file che potrebbe essere controllato da un utente con privilegi inferiori, o che potrebbe essere stato creato precedentemente da un utente con privilegi inferiori. L'utente potrebbe semplicemente puntarlo a un altro file tramite un link simbolico o duro, e il processo privilegiato scriverà su quel file.
Controlla nelle altre sezioni dove un attaccante potrebbe sfruttare una scrittura arbitraria per elevare i privilegi.
I file con estensione .fileloc
possono puntare ad altre applicazioni o binari, quindi quando vengono aperti, l'applicazione/binario sarà quello eseguito.
Esempio:
Se riesci a far aprire a un processo un file o una cartella con privilegi elevati, puoi abusare di crontab
per aprire un file in /etc/sudoers.d
con EDITOR=exploit.py
, in modo che exploit.py
ottenga il FD del file all'interno di /etc/sudoers
e lo sfrutti.
Ad esempio: https://youtu.be/f1HA5QhLQ7Y?t=21098
Se un file/cartella ha questo attributo immutabile, non sarà possibile impostare un xattr su di esso.
Un devfs mount non supporta xattr, maggiori informazioni in CVE-2023-32364
Questo ACL impedisce di aggiungere xattrs
al file
Il formato di file AppleDouble copia un file inclusi i suoi ACE.
Nel codice sorgente è possibile vedere che la rappresentazione testuale dell'ACL memorizzata all'interno dell'xattr chiamato com.apple.acl.text
verrà impostata come ACL nel file decompresso. Quindi, se hai compresso un'applicazione in un file zip con formato di file AppleDouble con un ACL che impedisce ad altri xattr di essere scritti... l'xattr di quarantena non è stato impostato nell'applicazione:
Controlla il report originale per ulteriori informazioni.
Per replicare questo, dobbiamo prima ottenere la stringa acl corretta:
(Note che anche se questo funziona, la sandbox scrive l'attributo xattr di quarantena prima)
Non è davvero necessario, ma lo lascio lì giusto per caso:
macOS xattr-acls extra stuffI bundle contengono il file _CodeSignature/CodeResources
che contiene l'hash di ogni singolo file nel bundle. Nota che l'hash di CodeResources è anche incorporato nell'eseguibile, quindi non possiamo nemmeno modificarlo.
Tuttavia, ci sono alcuni file la cui firma non verrà controllata, questi hanno la chiave omit nel plist, come:
È possibile calcolare la firma di una risorsa dalla riga di comando con:
Un utente può montare un dmg personalizzato creato anche sopra alcune cartelle esistenti. Questo è il modo in cui puoi creare un pacchetto dmg personalizzato con contenuti personalizzati:
Di solito, macOS monta i dischi comunicando con il servizio Mach com.apple.DiskArbitration.diskarbitrationd
(fornito da /usr/libexec/diskarbitrationd
). Se si aggiunge il parametro -d
al file plist di LaunchDaemons e si riavvia, memorizzerà i log in /var/log/diskarbitrationd.log
.
Tuttavia, è possibile utilizzare strumenti come hdik
e hdiutil
per comunicare direttamente con il kext com.apple.driver.DiskImages
.
Se il tuo script può essere interpretato come uno script shell, puoi sovrascrivere lo /etc/periodic/daily/999.local
script shell che verrà attivato ogni giorno.
Puoi fingere un'esecuzione di questo script con: sudo periodic daily
Scrivi un LaunchDaemon arbitrario come /Library/LaunchDaemons/xyz.hacktricks.privesc.plist
con un plist che esegue uno script arbitrario come:
Just generate the script /Applications/Scripts/privesc.sh
with the comandi you would like to run as root.
If you have scrittura arbitraria, you could create a file inside the folder /etc/sudoers.d/
granting yourself privilegi sudo.
The file /etc/paths
is one of the main places that populates the PATH env variable. You must be root to overwrite it, but if a script from processo privilegiato is executing some comando senza il percorso completo, you might be able to dirottarlo modifying this file.
You can also write files in /etc/paths.d
to load new folders into the PATH
env variable.
This will generate a file that belongs to root that is writable by me (codice da qui). This might also work as privesc:
La memoria condivisa POSIX consente ai processi nei sistemi operativi conformi a POSIX di accedere a un'area di memoria comune, facilitando una comunicazione più rapida rispetto ad altri metodi di comunicazione inter-processo. Comporta la creazione o l'apertura di un oggetto di memoria condivisa con shm_open()
, la definizione della sua dimensione con ftruncate()
, e la mappatura nello spazio degli indirizzi del processo utilizzando mmap()
. I processi possono quindi leggere e scrivere direttamente in quest'area di memoria. Per gestire l'accesso concorrente e prevenire la corruzione dei dati, vengono spesso utilizzati meccanismi di sincronizzazione come mutex o semafori. Infine, i processi smappano e chiudono la memoria condivisa con munmap()
e close()
, e opzionalmente rimuovono l'oggetto di memoria con shm_unlink()
. Questo sistema è particolarmente efficace per un IPC efficiente e veloce in ambienti in cui più processi devono accedere rapidamente ai dati condivisi.
macOS guarded descriptors sono una funzionalità di sicurezza introdotta in macOS per migliorare la sicurezza e l'affidabilità delle operazioni sui descrittori di file nelle applicazioni utente. Questi descrittori protetti forniscono un modo per associare restrizioni specifiche o "guardie" ai descrittori di file, che sono applicate dal kernel.
Questa funzionalità è particolarmente utile per prevenire determinate classi di vulnerabilità di sicurezza come accesso non autorizzato ai file o condizioni di gara. Queste vulnerabilità si verificano quando, ad esempio, un thread accede a una descrizione di file dando accesso a un altro thread vulnerabile o quando un descrittore di file è ereditato da un processo figlio vulnerabile. Alcune funzioni relative a questa funzionalità sono:
guarded_open_np
: Apre un FD con una guardia
guarded_close_np
: Chiude
change_fdguard_np
: Cambia le bandiere di guardia su un descrittore (anche rimuovendo la protezione della guardia)
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)