
Deterministischer Kernel-Exploit basierend auf CVE-2023-32434.
Trigon ist ein deterministischer Kernel-Exploit und PPL-Bypass basierend auf CVE-2023-32434. Er unterstützt A9 - A16 Geräte mit iOS 13 - 16.5.1. Deterministisch bedeutet, dass dieser Exploit während oder nach der Ausnutzung niemals einen Panic auslöst und vollständig zuverlässig ist.
Trigon nutzt einen Integer-Overflow in der VM-Schicht von XNU aus. Die Schwachstelle ermöglicht es uns, ein Primitiv zur Abbildung beliebiger physischer Adressen zu erstellen. Dies gibt uns Lese-/Schreibprimitive für nahezu jede physische Adresse, aber die anschließende Exploit-Strategie variiert zwischen verschiedenen Geräten und Versionen.
Wenn du dich für technische iOS-bezogene Writeups interessierst, würde ich dir empfehlen, die Trigon-Serie zu lesen! Ich habe versucht, sie so verständlich wie möglich zu gestalten, damit auch diejenigen, die keine iOS-Forscher sind, ihr folgen können.
Hinweis: arm64-Geräte werden derzeit unter iOS 16 nicht unterstützt, nur arm64e-Geräte (A12+).
Die arm64e-Unterstützung erfordert mehrere fest codierte Werte, die in unique_offsets.h eingetragen werden sollten. Die meisten davon lassen sich sehr einfach finden, einige sind Struktur-Offsets, die im Quellcode von Dopamine zu finden sind, und andere lassen sich durch Ausführen von XPF finden. Es gibt jedoch drei Offsets, die wir vor der Ausnutzung nicht ermitteln können, und ich werde nun erklären, wie man sie findet.
UniqueValues.addresses.base ist die physische Basisadresse des bösartigen Speicher-Mappings für Trigon. Eine einfache Möglichkeit, diese zu finden, besteht darin, den vorhandenen Wert als geschätzte Basisadresse zu verwenden und dann eine erkennbare physische Adresse wie 0x41410000 zu lesen. Anschließend kannst du den Offset von der physischen Adresse im Panic-Log subtrahieren, um die korrekte Basisadresse des Mappings zu bestimmen.
pv_head_table und pp_attr_tableUniqueValues.offsets.pv_head_table und UniqueValues.offsets.pp_attr_table sind relative Offsets der beiden Kernel-Datenstrukturen von der physischen Kernel-Basis. Da sie so früh während der Kernel-Initialisierung alloziert werden, befinden sie sich im physischen Speicher immer am exakt gleichen Offset von der Kernel-Basis. Um diese zu finden, kannst du einen bestehenden Kernel-Exploit (wie kfd) verwenden, um diese Strukturen zu finden und in die korrekte physische Adresse zu übersetzen, und die Offsets dann auf diese Weise zu berechnen.
Für Geräte, die über Dopamine jailbreakbar sind, habe ich hier ein benutzerfreundliches Kommandozeilen-Tool eingefügt, das alle erforderlichen Offsets für Trigon auf arm64e findet. Du kannst es verwenden, um den Exploit für deine Geräte- und Versionskombination einzurichten.