
webkit; but pwned
Ce programme n'est définitivement pas un logiciel espion.
Exécutez-le sur votre appareil iOS 64 bits dès que possible.
Votre conformité sera récompensée.
[ Version en direct sur totally-not.spyware.lol ]
Le frontend et l'exploit WebKit sont dans /root.
L'exploit du noyau est dans /glue.
La post-exploitation est dans /glue/dep.
DoubleH3lix et Meridian peuvent être compilés indépendamment en bibliothèques statiques avec make headless et make all respectivement, dans leurs répertoires.
Ceux-ci sont ensuite utilisés pour construire la payload dans /glue, qui est le binaire exécuté depuis le JIT après l'exploit WebKit. Peut être compilé avec un simple make, et construira toutes les dépendances nécessaires.
Et tout cela est finalement assemblé avec l'exploit WebKit en exécutant make dans /root, ce qui construira à nouveau les dépendances nécessaires.
Nous voulions à l'origine porter le correctif WebKit sur 10.x, mais nous avons finalement abandonné.
Voir /patch pour les détails, mais l'essentiel est :
Une partie du bug WebKit consistait en des prédictions incorrectes dans JSC::DFG::clobberize, qui est essentiellement un énorme switch-case. Le correctif consistait à réacheminer certaines valeurs vers des blocs déjà utilisés pour d'autres valeurs.
Sur les versions que nous avons vérifiées, le compilateur avait généré des tables de saut pour cela, donc notre idée aurait été de simplement trouver et corriger toutes ces tables de saut, puisque le code correct serait déjà présent.
Le problème est que les valeurs dont tout dépend ont changé des centaines de fois au cours de la vie d'iOS 10 (oui, bien plus fréquemment qu'il n'y a eu de versions d'iOS), et il ne semble y avoir aucun point de repère à proximité dans le code, ce qui rend pratiquement impossible pour nous de déterminer quelles valeurs corriger. :(