macOS Installers Abuse
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)
Un pacchetto di installazione macOS (noto anche come file .pkg
) è un formato di file utilizzato da macOS per distribuire software. Questi file sono come una scatola che contiene tutto ciò di cui un software ha bisogno per installarsi e funzionare correttamente.
Il file del pacchetto stesso è un archivio che contiene una gerarchia di file e directory che verranno installati sul computer di destinazione. Può anche includere script per eseguire operazioni prima e dopo l'installazione, come la configurazione di file di configurazione o la pulizia di versioni precedenti del software.
Distribuzione (xml): Personalizzazioni (titolo, testo di benvenuto…) e controlli di script/installazione
PackageInfo (xml): Info, requisiti di installazione, posizione di installazione, percorsi degli script da eseguire
Bill of materials (bom): Elenco dei file da installare, aggiornare o rimuovere con permessi di file
Payload (archivio CPIO compresso gzip): File da installare nella install-location
da PackageInfo
Scripts (archivio CPIO compresso gzip): Script di pre e post installazione e altre risorse estratte in una directory temporanea per l'esecuzione.
In order to visualize the contents of the installer without decompressing it manually you can also use the free tool Suspicious Package.
I file DMG, o Apple Disk Images, sono un formato di file utilizzato da macOS di Apple per le immagini disco. Un file DMG è essenzialmente un immagine disco montabile (contiene il proprio filesystem) che contiene dati di blocco grezzi tipicamente compressi e a volte crittografati. Quando apri un file DMG, macOS lo monta come se fosse un disco fisico, permettendoti di accedere ai suoi contenuti.
Nota che gli installer .dmg
supportano così tanti formati che in passato alcuni di essi contenenti vulnerabilità sono stati abusati per ottenere l'esecuzione di codice nel kernel.
La gerarchia di un file DMG può essere diversa in base al contenuto. Tuttavia, per i DMG delle applicazioni, di solito segue questa struttura:
Livello superiore: Questo è la radice dell'immagine disco. Contiene spesso l'applicazione e possibilmente un collegamento alla cartella Applicazioni.
Applicazione (.app): Questa è l'applicazione reale. In macOS, un'applicazione è tipicamente un pacchetto che contiene molti file e cartelle individuali che compongono l'applicazione.
Collegamento Applicazioni: Questo è un collegamento alla cartella Applicazioni in macOS. Lo scopo di questo è rendere facile per te installare l'applicazione. Puoi trascinare il file .app su questo collegamento per installare l'app.
Se uno script di pre o post installazione sta ad esempio eseguendo da /var/tmp/Installerutil
, un attaccante potrebbe controllare quello script in modo da poter elevare i privilegi ogni volta che viene eseguito. O un altro esempio simile:
Questa è una funzione pubblica che diversi installer e aggiornamenti chiameranno per eseguire qualcosa come root. Questa funzione accetta il percorso del file da eseguire come parametro, tuttavia, se un attaccante potesse modificare questo file, sarebbe in grado di abusare della sua esecuzione con root per elevare i privilegi.
For more info check this talk: https://www.youtube.com/watch?v=lTOItyjTTkw
Se un installer scrive in /tmp/fixedname/bla/bla
, è possibile creare un mount su /tmp/fixedname
senza proprietari in modo da poter modificare qualsiasi file durante l'installazione per abusare del processo di installazione.
Un esempio di questo è CVE-2021-26089 che è riuscito a sovrascrivere uno script periodico per ottenere l'esecuzione come root. Per ulteriori informazioni dai un'occhiata alla conferenza: OBTS v4.0: "Mount(ain) of Bugs" - Csaba Fitzl
È possibile generare semplicemente un file .pkg
con script di pre e post-installazione senza alcun payload reale a parte il malware all'interno degli script.
È possibile aggiungere tag <script>
nel file xml di distribuzione del pacchetto e quel codice verrà eseguito e può eseguire comandi utilizzando system.run
:
Installer malevolo che utilizza uno script e codice JS all'interno di dist.xml
Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)