
Exploit deterministico del kernel basato su CVE-2023-32434.
Trigon è un exploit kernel deterministico e un bypass PPL basato su CVE-2023-32434. Supporta dispositivi da A9 a A16 con iOS 13 - 16.5.1. Essendo deterministico, questo exploit non causerà mai un panic durante o dopo l'exploitation ed è completamente affidabile.
Trigon sfrutta un integer overflow nel layer VM di XNU. La vulnerabilità ci consente di costruire una primitiva di mappatura arbitraria di indirizzi fisici. Questo ci fornisce primitive di lettura/scrittura su quasi qualsiasi indirizzo fisico, ma la successiva strategia di exploit varia tra i diversi dispositivi e versioni.
Se ti interessano i writeup tecnici relativi a iOS, ti consiglio di leggere la serie Trigon! Ho cercato di renderla il più comprensibile possibile affinché anche chi non è un ricercatore iOS possa seguirla.
Nota: i dispositivi arm64 non sono attualmente supportati su iOS 16, solo i dispositivi arm64e (A12+) lo sono.
Il supporto arm64e richiede diversi valori hardcoded, che devono essere inseriti in unique_offsets.h. La maggior parte può essere trovata molto facilmente, alcuni sono offset di strutture reperibili nel codice sorgente di Dopamine, e altri possono essere trovati eseguendo XPF. Tuttavia, ci sono tre offset che non possiamo trovare prima dell'exploitation, e ora spiegherò come trovarli.
UniqueValues.addresses.base è l'indirizzo fisico di base della mappatura di memoria malevola per Trigon. Un modo semplice per trovarlo è usare il valore esistente come indirizzo di base stimato e poi leggere un indirizzo fisico riconoscibile come 0x41410000. Puoi quindi sottrarre l'offset dall'indirizzo fisico nel log del panic per determinare l'indirizzo di base corretto della mappatura.
pv_head_table e pp_attr_tableUniqueValues.offsets.pv_head_table e UniqueValues.offsets.pp_attr_table sono gli offset relativi delle due strutture dati del kernel rispetto alla base fisica del kernel. Poiché vengono allocate così presto durante l'inizializzazione del kernel, si trovano sempre allo stesso identico offset dalla base del kernel in memoria fisica. Per trovarli, puoi usare un exploit kernel esistente (come kfd) per individuare e tradurre queste strutture nel corretto indirizzo fisico, e quindi calcolare gli offset in questo modo.
Per i dispositivi jailbreakabili tramite Dopamine, ho incluso uno strumento da riga di comando facile da usare che troverà tutti gli offset richiesti per Trigon su arm64e qui. Puoi usarlo per configurare l'exploit affinché funzioni sulla combinazione del tuo dispositivo e della tua versione.