macOS XPC Connecting Process Check
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)
Quando viene stabilita una connessione a un servizio XPC, il server verificherà se la connessione è consentita. Questi sono i controlli che di solito esegue:
Controlla se il processo di connessione è firmato con un certificato firmato da Apple (rilasciato solo da Apple).
Se questo non è verificato, un attaccante potrebbe creare un certificato falso per soddisfare qualsiasi altro controllo.
Controlla se il processo di connessione è firmato con il certificato dell'organizzazione (verifica dell'ID del team).
Se questo non è verificato, qualsiasi certificato di sviluppatore di Apple può essere utilizzato per la firma e connettersi al servizio.
Controlla se il processo di connessione contiene un ID bundle appropriato.
Se questo non è verificato, qualsiasi strumento firmato dalla stessa org potrebbe essere utilizzato per interagire con il servizio XPC.
(4 o 5) Controlla se il processo di connessione ha un numero di versione software appropriato.
Se questo non è verificato, un client vecchio e insicuro, vulnerabile all'iniezione di processi, potrebbe essere utilizzato per connettersi al servizio XPC anche con gli altri controlli in atto.
(4 o 5) Controlla se il processo di connessione ha un runtime rinforzato senza diritti pericolosi (come quelli che consentono di caricare librerie arbitrarie o utilizzare variabili d'ambiente DYLD).
Se questo non è verificato, il client potrebbe essere vulnerabile all'iniezione di codice.
Controlla se il processo di connessione ha un diritto che gli consente di connettersi al servizio. Questo è applicabile per i binari Apple.
La verifica deve essere basata sul token di audit del client di connessione invece che sul suo ID processo (PID) poiché il primo previene attacchi di riutilizzo del PID.
Gli sviluppatori raramente utilizzano la chiamata API del token di audit poiché è privata, quindi Apple potrebbe cambiarla in qualsiasi momento. Inoltre, l'uso di API private non è consentito nelle app del Mac App Store.
Se viene utilizzato il metodo processIdentifier
, potrebbe essere vulnerabile.
xpc_dictionary_get_audit_token
dovrebbe essere utilizzato invece di xpc_connection_get_audit_token
, poiché quest'ultimo potrebbe anche essere vulnerabile in determinate situazioni.
Per ulteriori informazioni sull'attacco di riutilizzo del PID controlla:
macOS PID ReusePer ulteriori informazioni sull'attacco xpc_connection_get_audit_token
controlla:
Trustcache è un metodo difensivo introdotto nelle macchine Apple Silicon che memorizza un database di CDHSAH dei binari Apple in modo che solo i binari non modificati autorizzati possano essere eseguiti. Questo previene l'esecuzione di versioni downgrade.
Il server implementerà questa verifica in una funzione chiamata shouldAcceptNewConnection
.
L'oggetto NSXPCConnection ha una proprietà privata auditToken
(quella che dovrebbe essere utilizzata ma potrebbe cambiare) e una proprietà pubblica processIdentifier
(quella che non dovrebbe essere utilizzata).
Il processo di connessione potrebbe essere verificato con qualcosa come:
Se un sviluppatore non vuole controllare la versione del client, potrebbe almeno verificare che il client non sia vulnerabile all'iniezione di processi:
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)