
Локальное повышение привилегий в macOS 10.12.1 через CVE-2016-1825 или CVE-2016-7617.
physmem — это инструмент для инспектирования физической памяти и локального повышения привилегий, нацеленный на macOS вплоть до версии 10.12.1. Он эксплуатирует либо CVE-2016-1825, либо CVE-2016-7617 в зависимости от целевой платформы. Эти две уязвимости практически идентичны, и эксплуатация выполняется абсолютно одинаково. Они были исправлены в OS X El Capitan 10.11.5 и macOS Sierra 10.12.2 соответственно.
Поскольку это логические ошибки, эксплуатация невероятно надёжна. Я ещё ни разу не сталкивался с паникой ядра за десятки тысяч запусков программы, (правильно) эксплуатирующей эти уязвимости.
CVE-2016-1825 — это проблема в IOHIDevice, которая позволяет задавать произвольные свойства реестра IOKit. В частности, привилегированное свойство IOUserClientClass может контролироваться непривилегированным процессом. Я не тестировал платформы старше Yosemite, но уязвимость присутствует в исходном коде, начиная с Mac OS X Leopard.
CVE-2016-7617 — это почти идентичная проблема в AppleBroadcomBluetoothHostController. По-видимому, эта уязвимость была добавлена в OS X El Capitan. О ней сообщили Иэн Бир из Google Project Zero (issue 974) и Раду Мотспан.
Соберите physmem, указав целевую версию ОС развёртывания в командной строке:
$ make MACOSX_DEPLOYMENT_TARGET=10.10.5
Вы можете прочитать слово физической памяти с помощью команды read:
$ ./physmem read 0x1000
a69a04f2f59625b3
Вы можете записать данные в физическую память с помощью команды write:
$ ./physmem write 0x1000 0x1122334455667788
$ ./physmem read 0x1000
1122334455667788
Вы можете получить root-оболочку с помощью команды root:
$ ./physmem root
sh-3.2# whoami
root
Код physmem выпущен в общественное достояние. Как жест вежливости, я прошу указывать моё авторство, если вы ссылаетесь на этот код или используете его.