Proof-of-Concept-App zum Überschreiben von Schriftarten auf iOS unter Verwendung von CVE-2022-46689.
Funktioniert auf iOS 16.1.2 und darunter (getestet auf iOS 16.1) auf nicht-gejailbreakten Geräten.
IPA verfügbar im Releases-Bereich.
Enthaltene Schriftarten:
- DejaVu Sans Condensed
- DejaVu Serif
- DejaVu Sans Mono
- Go Regular
- Go Mono
- Fira Sans
- Segoe UI
- Comic Sans MS
- Choco Cooky
Sie können auch benutzerdefinierte Schriftarten importieren, die für iOS portiert wurden.
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

Screenshot-Credit: @ev_ynw für die portierten Schriftarten Hanna Soft und Bronkoh, JoyPixels für die Emoji-Schriftart
Wo finde ich portierte Schriftarten
Bekannte Probleme
- Die eingebauten Schriftarten sind nicht richtig portiert (ich weiß nicht, wie man Schriftarten portiert). Für beste Ergebnisse verwenden Sie eine benutzerdefinierte Schriftart.
- bei den eingebauten Schriftarten:
- Nur normaler Text verwendet die geänderte Schriftart: dünner/mittlerer/fetter Text fällt stattdessen auf Helvetica zurück.
- Wenn die Schriftart überhaupt nicht angezeigt wird, deaktivieren Sie "Fetten Text" in den Bedienungshilfen.
- Dateiauswahlen in Apps schlagen mit dem Fehler "Etwas ist beim Anzeigen von Dokumenten schiefgelaufen." fehl.
- Dies passiert, wenn Sie die Emoji-Schriftart ersetzen oder Schriftarten mit mehreren Strichstärken installieren.
- Versuchen Sie die experimentelle .ttc-Korrektur mit "Import custom with fix for .ttc"
- iOS 14.x-Geräte, die jailbroken sind oder zuvor jailbroken waren, können nicht zur Originalschriftart zurückkehren.
- Problemumgehung: Verwenden Sie diese App nicht, wenn Sie iOS 14.x verwenden und zuvor jailbroken haben. Breaken Sie stattdessen einfach und ersetzen Sie Schriftarten normal.
Schriftart-Konvertierung
Der CVE-2022-46689-Fehler – soweit ich weiß – erlaubt es Ihnen nur, 16383 Bytes von jeweils 16384 Bytes zu überschreiben: Das letzte Byte der Seite kann nicht geschrieben werden.
(Ich könnte falsch liegen)
Um dies zu umgehen, verpacke ich die Schriftart im WOFF2-Webfont-Format, welches auf iOS unterstützt wird. WOFF2 verwendet Brotli zur Komprimierung, was es mir erlaubt, Padding einzufügen, um das letzte Byte zu überspringen.
Siehe repackfonts/make_woff2src.sh für Details: Dieses Skript:
- benennt die Schriftart in .SFUI-Regular um mit TTX gemäß dieser Antwort
- erstellt die Schriftart als .woff2
- führt
repackfonts/BrotliPadding.swift aus, um die WOFF2-Datei zu dekomprimieren und Padding einzufügen, um das 16384. Byte zu überspringen
Danksagungen
- Ian Beer von Project Zero für das Finden von CVE-2022-46689.
- Apple für den Testfall und den Patch. (Ich habe nichts geändert: Ich habe den Testfall nur in eine Bibliothek verpackt.)
- Allen auf Twitter, die geholfen und mit CVE-2022-46689 experimentiert haben, insbesondere @dedbeddedbed, @AppleDry05 und @haxi0sm für die Erkundung, was mit diesem Fehler möglich ist..
- WOFF2-Komprimierer von Google
- ttcpad von LIJI32
- Fontforge stripttc
- Die DejaVu-Schriftarten werden gemäß ihrer Lizenz verteilt.
- Die Go-Schriftarten werden gemäß ihrer Lizenz verteilt.
- Die Fira Sans-Schriftart wurde von @jonpalmisc konvertiert – danke!
- Segoe UI und Comic Sans MS sind Eigentum von Microsoft.
- Choco Cooky ist Eigentum von Samsung.
- Ich habe keine Rechte, diese weiterzuverteilen, aber ich poste sie trotzdem wegen #yolo.