
Escalade de privilèges locale sur macOS 10.12.1 via CVE-2016-1825 ou CVE-2016-7617.
physmem est un outil d'inspection de la mémoire physique et une escalade de privilèges locale ciblant macOS jusqu'à 10.12.1. Il exploite soit CVE-2016-1825 soit CVE-2016-7617 selon la cible de déploiement. Ces deux vulnérabilités sont presque identiques, et l'exploitation peut être effectuée exactement de la même manière. Elles ont été corrigées respectivement dans OS X El Capitan 10.11.5 et macOS Sierra 10.12.2.
Comme ce sont des bogues logiques, l'exploitation est incroyablement fiable. Je n'ai pas encore rencontré de panique parmi les dizaines de milliers de fois où j'ai exécuté un programme (correctement) exploitant ces vulnérabilités.
CVE-2016-1825 est un problème dans IOHIDevice qui permet de définir des propriétés arbitraires du registre IOKit. En particulier, la propriété privilégiée IOUserClientClass peut être contrôlée par un processus non privilégié. Je n'ai pas testé les plateformes antérieures à Yosemite, mais la vulnérabilité apparaît dans le code source dès Mac OS X Leopard.
CVE-2016-7617 est un problème presque identique dans AppleBroadcomBluetoothHostController. Cette vulnérabilité semble avoir été introduite dans OS X El Capitan. Elle a été signalée par Ian Beer de Google Project Zero (problème 974) et Radu Motspan.
Compilez physmem en spécifiant votre cible de déploiement en ligne de commande :
$ make MACOSX_DEPLOYMENT_TARGET=10.10.5
Vous pouvez lire un mot de la mémoire physique avec la commande read :
$ ./physmem read 0x1000
a69a04f2f59625b3
Vous pouvez écrire dans la mémoire physique avec la commande write :
$ ./physmem write 0x1000 0x1122334455667788
$ ./physmem read 0x1000
1122334455667788
Vous pouvez exécuter un shell root avec la commande root :
$ ./physmem root
sh-3.2# whoami
root
Le code de physmem est placé dans le domaine public. Par courtoisie, je demande que si vous référencez ou utilisez ce code, vous m'en attribuiez le crédit.