App proof-of-concept per sovrascrivere i font su iOS utilizzando CVE-2022-46689.
Funziona su iOS 16.1.2 e versioni precedenti (testato su iOS 16.1) su dispositivi non jailbroken.
IPA disponibile nella sezione Releases.
Font inclusi:
- DejaVu Sans Condensed
- DejaVu Serif
- DejaVu Sans Mono
- Go Regular
- Go Mono
- Fira Sans
- Segoe UI
- Comic Sans MS
- Choco Cooky
Puoi anche importare font personalizzati che sono stati portati per iOS.
Screenshot
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

Crediti screenshot: @ev_ynw per i font portati Hanna Soft e Bronkoh, JoyPixels per il font emoji
Dove trovare font portati
Problemi noti
- I font integrati non sono portati correttamente (non so come portare i font). Per risultati migliori, utilizza un font personalizzato.
- con i font integrati:
- Solo il testo normale utilizza il font modificato: il testo sottile/medio/grassetto torna a Helvetica.
- Se il font non viene visualizzato affatto, disabilita "Testo in grassetto" nelle impostazioni di accessibilità.
- I selettori di file nelle app non si apriranno e daranno l'errore "Si è verificato un problema durante la visualizzazione dei documenti."
- Questo accade se sostituisci il font emoji o installi font con pesi multipli
- Prova la correzione sperimentale .ttc usando "Importa font personalizzato con fix per .ttc"
- I dispositivi iOS 14.x jailbroken o che lo sono stati in precedenza non potranno tornare al font originale.
- Soluzione alternativa: non usare questa app se sei su iOS 14.x e hai già effettuato jailbreak in precedenza. Invece, fai jailbreak e sostituisci i font normalmente.
Conversione font
Il problema CVE-2022-46689 - per quanto ne so - permette di sovrascrivere solo 16383 byte su ogni 16384: l'ultimo byte della pagina non può essere scritto.
(Potrei sbagliarmi)
Per aggirare questo problema, impacchetto il font usando il formato webfont WOFF2, che è supportato su iOS. WOFF2 utilizza Brotli per la compressione, che mi permette di inserire padding per saltare l'ultimo byte.
Vedi repackfonts/make_woff2src.sh per i dettagli: questo script:
- rinomina il font in .SFUI-Regular con TTX seguendo questa risposta
- ricostruisce il font in .woff2
- esegue
repackfonts/BrotliPadding.swift per decomprimere il file WOFF2 e inserire padding per saltare il 16384° byte
Crediti
- Ian Beer di Project Zero per aver trovato CVE-2022-46689.
- Apple per il test case e la patch. (Non ho cambiato nulla: ho solo racchiuso il test case in una libreria.)
- Tutti su Twitter che hanno aiutato e sperimentato con CVE-2022-46689, in particolare @dedbedbedded, @AppleDry05 e @haxi0sm per aver esplorato cosa si può fare con questo problema.
- WOFF2 compressor di Google
- ttcpad di LIJI32
- Fontforge stripttc
- I font DejaVu sono distribuiti secondo la loro licenza.
- I font Go sono distribuiti secondo la loro licenza.
- Il font Fira Sans è convertito da @jonpalmisc - grazie!
- Segoe UI e Comic Sans MS sono di proprietà di Microsoft.
- Choco Cooky è di proprietà di Samsung.
- Non ho alcun diritto di ridistribuirli, ma li pubblico comunque perché #yolo.