
Exploit de kernel determinístico baseado em CVE-2023-32434.
Trigon é um exploit de kernel determinístico e um bypass de PPL baseado na CVE-2023-32434. Ele suporta dispositivos A9 - A16 executando iOS 13 - 16.5.1. Ser determinístico significa que este exploit nunca causará panic durante ou após a exploração e é completamente confiável.
Trigon explora um integer overflow na camada de VM do XNU. A vulnerabilidade nos permite construir uma primitiva de mapeamento de endereço físico arbitrário. Isso nos dá primitivas de leitura/escrita para quase qualquer endereço físico, mas a estratégia de exploração subsequente varia entre diferentes dispositivos e versões.
Se você gosta de writeups técnicos relacionados a iOS, eu recomendaria que você lesse a série Trigon! Tentei torná-la o mais compreensível possível para que aqueles que não são pesquisadores de iOS também possam acompanhá-la.
Nota: dispositivos arm64 não são atualmente suportados no iOS 16, apenas dispositivos arm64e (A12+).
O suporte a arm64e requer vários valores hardcoded, que devem ser colocados em unique_offsets.h. A maioria pode ser encontrada muito facilmente, com alguns sendo offsets de estrutura encontráveis no código-fonte do Dopamine, e outros sendo encontráveis através da execução do XPF. No entanto, há três offsets que não podemos encontrar antes da exploração, e vou explicar como encontrá-los agora.
UniqueValues.addresses.base é o endereço físico base do mapeamento de memória malicioso para o Trigon. Uma maneira fácil de encontrar isso é usar o valor existente como um endereço base estimado e então ler um endereço físico reconhecível como 0x41410000. Você pode então subtrair o offset do endereço físico no log de panic para determinar o endereço base correto do mapeamento.
pv_head_table e pp_attr_tableUniqueValues.offsets.pv_head_table e UniqueValues.offsets.pp_attr_table são offsets relativos das duas estruturas de dados do kernel a partir da base física do kernel. Como elas são alocadas tão cedo durante a inicialização do kernel, elas estão sempre no exato mesmo offset a partir da base do kernel na memória física. Para encontrá-las, você pode usar um exploit de kernel existente (como o kfd) para encontrar e traduzir essas estruturas para o endereço físico correto, e então calcular os offsets dessa forma.
Para dispositivos com jailbreak possível via Dopamine, incluí uma ferramenta de linha de comando fácil de usar que encontrará todos os offsets necessários para o Trigon em arm64e aqui. Você pode usá-la para configurar o exploit para funcionar na combinação do seu dispositivo e versão.