Application de preuve de concept pour écraser les polices sur iOS utilisant CVE-2022-46689.
Fonctionne sur iOS 16.1.2 et inférieur (testé sur iOS 16.1) sur des appareils non jailbreakés.
IPA disponible dans la section Releases.
Polices incluses :
- DejaVu Sans Condensed
- DejaVu Serif
- DejaVu Sans Mono
- Go Regular
- Go Mono
- Fira Sans
- Segoe UI
- Comic Sans MS
- Choco Cooky
Vous pouvez également importer des polices personnalisées qui ont été portées pour iOS.
Screenshots
DejaVu Sans Condensed | DejaVu Serif | DejaVu Sans Mono | Choco Cooky

Go Regular | Go Mono | Segoe UI | Comic Sans MS

Hanna Soft + JoyPixels | Bronkoh | Noto Serif SC | Fira Sans

Crédit des captures d'écran : @ev_ynw pour les polices portées Hanna Soft et Bronkoh, JoyPixels pour la police d'emoji
Où trouver les polices portées
Problèmes connus
- Les polices intégrées ne sont pas correctement portées (je ne sais pas comment porter des polices). Pour de meilleurs résultats, utilisez une police personnalisée.
- avec les polices intégrées :
- Seul le texte normal utilise la police modifiée : le texte fin/moyen/gras revient à Helvetica à la place.
- Si la police ne s'affiche pas du tout, désactivez le « Texte en gras » dans les réglages d'accessibilité.
- Les sélecteurs de fichiers dans les applications ne s'ouvriront pas avec l'erreur « Un problème est survenu lors de l'affichage des documents. »
- Cela se produit si vous remplacez la police d'emoji, ou installez des polices avec plusieurs graisses
- Essayez le correctif expérimental .ttc en utilisant « Importer une police personnalisée avec correction pour .ttc »
- Les appareils iOS 14.x qui sont jailbreakés ou l'ont été ne pourront pas revenir à la police d'origine.
- Solution de contournement : n'utilisez pas cette application si vous êtes sous iOS 14.x et avez déjà jailbreaké. À la place, jailbreakez et remplacez les polices normalement.
Conversion de polices
Le problème CVE-2022-46689 - d'après ce que je sais - ne permet d'écraser que 16383 octets sur 16384 : le dernier octet de la page ne peut pas être écrit.
(Je pourrais me tromper)
Pour contourner cela, je conditionne la police en utilisant le format de police web WOFF2, qui est supporté sur iOS. WOFF2 utilise Brotli pour la compression, ce qui permet d'insérer un remplissage pour sauter le dernier octet.
Voir repackfonts/make_woff2src.sh pour les détails : ce script :
- renomme la police en .SFUI-Regular avec TTX suivant cette réponse
- reconstruit la police en .woff2
- exécute
repackfonts/BrotliPadding.swift pour décompresser le fichier WOFF2 et insérer un remplissage pour sauter le 16384ème octet
Crédits
- Ian Beer de Project Zero pour avoir trouvé CVE-2022-46689.
- Apple pour le cas de test et le correctif. (Je n'ai rien changé : j'ai seulement enveloppé le cas de test dans une bibliothèque.)
- Tous ceux sur Twitter qui ont aidé et expérimenté avec CVE-2022-46689, en particulier @dedbeddedbed, @AppleDry05, et @haxi0sm pour avoir exploré ce qui peut être fait avec ce problème..
- Compresseur WOFF2 par Google
- ttcpad par LIJI32
- Fontforge stripttc
- Les polices DejaVu sont distribuées selon leur licence.
- Les polices Go sont distribuées selon leur licence.
- La police Fira Sans est convertie par @jonpalmisc - merci !
- Segoe UI et Comic Sans MS sont la propriété de Microsoft.
- Choco Cooky est la propriété de Samsung.
- Je n'ai aucun droit de redistribuer ces polices, mais je les poste quand même parce que #yolo.