
Exploit de noyau déterministe basé sur CVE-2023-32434.
Trigon est un exploit de noyau déterministe et un contournement de PPL basé sur CVE-2023-32434. Il prend en charge les appareils A9 - A16 exécutant iOS 13 - 16.5.1. Le caractère déterministe signifie que cet exploit ne provoquera jamais de panic pendant ou après l'exploitation et qu'il est totalement fiable.
Trigon exploite un dépassement d'entier dans la couche VM de XNU. La vulnérabilité nous permet de construire une primitive de mappage d'adresses physiques arbitraires. Cela nous donne des primitives de lecture/écriture vers presque toutes les adresses physiques, mais la stratégie d'exploitation qui s'ensuit varie selon les appareils et les versions.
Si vous vous intéressez aux articles techniques liés à iOS, je vous recommande de lire la série Trigon ! J'ai essayé de la rendre aussi compréhensible que possible afin que ceux qui ne sont pas chercheurs en iOS puissent également la suivre.
Remarque : les appareils arm64 ne sont actuellement pas pris en charge sur iOS 16, seuls les appareils arm64e (A12+) le sont.
La prise en charge d'arm64e nécessite plusieurs valeurs codées en dur, qui doivent être placées dans unique_offsets.h. La majorité peut être trouvée très facilement, certaines étant des offsets de structures repérables dans le code source de Dopamine, et d'autres pouvant être trouvées en exécutant XPF. Cependant, il y a trois offsets que nous ne pouvons pas trouver avant l'exploitation, et je vais expliquer comment les trouver maintenant.
UniqueValues.addresses.base est l'adresse physique de base du mappage mémoire malveillant pour Trigon. Un moyen simple de la trouver est d'utiliser la valeur existante comme adresse de base estimée, puis de lire une adresse physique reconnaissable comme 0x41410000. Vous pouvez ensuite soustraire l'offset de l'adresse physique dans le journal de panic pour déterminer l'adresse de base correcte du mappage.
pv_head_table et pp_attr_tableUniqueValues.offsets.pv_head_table et UniqueValues.offsets.pp_attr_table sont les offsets relatifs des deux structures de données du noyau par rapport à la base physique du noyau. Comme elles sont allouées très tôt lors de l'initialisation du noyau, elles se trouvent toujours au même offset exact par rapport à la base du noyau en mémoire physique. Pour les trouver, vous pouvez utiliser un exploit de noyau existant (comme kfd) afin de localiser et de traduire ces structures en l'adresse physique correcte, puis calculer les offsets de cette manière.
Pour les appareils jailbreakables via Dopamine, j'ai inclus un outil en ligne de commande facile à utiliser qui trouvera tous les offsets requis pour Trigon sur arm64e ici. Vous pouvez l'utiliser pour configurer l'exploit afin qu'il fonctionne sur votre combinaison d'appareil et de version.