
Exploit di escalation dei privilegi locali per macOS (CVE-2016-1757) che sfrutta una condizione di gara in Mach IPC per bypassare le protezioni SIP e SUID, prendendo di mira diverse versioni di OS X.
Mach Race OS X Local Privilege Escalation Exploit
(c) fG! 2015, 2016, [email protected] - https://reverse.put.as
Un exploit universale per OS X per SUID, SIP e entitlements binari (CVE-2016-1757).
Utilizzo contro un binario SUID:
./mach_race_server /bin/ps _compat_mode
for i in seq 0 1000000; do ./mach_race_client /bin/ps; done
Contro un binario con entitlements per bypassare SIP:
./mach_race_server /System/Library/PrivateFrameworks/PackageKit.framework/Versions/A/Resources/system_shove _geteuid
for i in seq 0 1000000; do ./mach_race_client /System/Library/PrivateFrameworks/PackageKit.framework/Versions/A/Resources/system_shove; done
Nota: poiché il nome del servizio non viene modificato, non è possibile concatenare questo exploit da utente a root e poi usarlo per bypassare SIP poiché bootstrap_register2 fallirà la seconda volta (il servizio è già registrato con launchd dalla prima esecuzione). La soluzione è aggiungere un parametro per utilizzare un nome di servizio diverso, per esempio.
Nota2: non è necessario creare due app separate, un singolo binario funziona, basta fare un fork di un server e un client.
Riferimenti:
http://googleprojectzero.blogspot.pt/2016/03/race-you-to-kernel.html
Testato su Mavericks 10.10.5, Yosemite 10.10.5, El Capitan 10.11.2 e 10.11.3.
Risolto in El Capitan 10.11.4.
Dovrebbe funzionare con tutte le versioni di OS X (dipende se bootstrap_register2 esiste sulle versioni precedenti).
Implementazione alternativa con bootstrap_create_server possibile per versioni precedenti.