Mehr Speichersicherheit für Webfonts
(developer.chrome.com)- Skrifa ist eine neue in Rust geschriebene Bibliothek zur Font-Verarbeitung, die FreeType ersetzt und entwickelt wurde, um die Font-Verarbeitung in Chrome sicherer zu machen
- Dank der Speichersicherheit von Rust treten weniger Sicherheitsprobleme auf, und Verbesserungen an Font-Technologien können schneller umgesetzt werden
- Durch den Wechsel von FreeType zu Skrifa haben sich die Codequalität verbessert und die Zeit für Sicherheitskorrekturen verkürzt
Warum FreeType ersetzt wird
-
Im Web müssen nicht vertrauenswürdige Ressourcen aus verschiedenen Quellen sicher geladen und verwendet werden können
-
Chrome setzte bereits mehrere Sicherheitsmaßnahmen ein, um Webfonts sicher zu nutzen
- Sandboxing: Da der Code nicht sicher und die Fonts nicht vertrauenswürdig sind, werden sie in einer separaten geschützten Umgebung ausgeführt
- OpenType Sanitizer: Bereinigt und prüft Fonts vor der Verarbeitung
- Fuzzing: Testet Bibliotheken zur Font-Verarbeitung umfassend
-
FreeType wird auf Android, ChromeOS und Linux als Standardbibliothek für die Font-Verarbeitung verwendet
- Sicherheitslücken könnten daher viele Nutzer betreffen
Wichtige Sicherheitsprobleme bei FreeType
- 1. Verwendung einer unsicheren Sprache
- FreeType ist in C geschrieben, wodurch Sicherheitslücken wie Speicherfehler und Buffer Overflows entstehen können
- 2. Projektspezifische Probleme
- Fehlende explizite Größentypen durch Makronutzung
- Makros (
FT_READ_*,FT_PEEK_*) verbergen explizite Größentypen (int16_tusw.)
- Makros (
- Wiederholt auftretende Bugs in neuem Code
- Beim Hinzufügen von Unterstützung für COLRv1 und OT-SVG traten Probleme auf
- Mangel an Tests
- Das Erstellen komplexer Test-Fonts ist schwierig, was zu unzureichender Testabdeckung führt
- Fehlende explizite Größentypen durch Makronutzung
- 3. Abhängigkeitsprobleme
- In von FreeType verwendeten Bibliotheken wie bzip2, libpng und zlib traten wiederholt Probleme auf
- 4. Grenzen von Fuzzing
- Aufgrund der komplexen Datenstrukturen von Font-Dateien gibt es Probleme, die durch Fuzzing nicht entdeckt werden
- Fonts enthalten komplexe Regeln und Zustandsmaschinen (state machines)
- Da sich gültige Strukturen nur schwer erzeugen lassen, ist effektives Fuzzing schwierig
- Aufgrund der komplexen Datenstrukturen von Font-Dateien gibt es Probleme, die durch Fuzzing nicht entdeckt werden
Einführung von Skrifa und Rollout in Chrome
- Die von Chrome verwendete Grafikbibliothek Skia nutzt FreeType für Font-Metadaten und Rendering
- Chrome hat das Font-Backend von Skia neu aufgebaut, um FreeType durch Skrifa zu ersetzen
Phasen der Skrifa-Einführung
- Chrome 128 (August 2024):
- Skrifa wurde testweise für seltener genutzte Font-Formate wie Color Fonts und CFF2 eingesetzt
- Chrome 133 (Februar 2025):
- Vollständige Einführung von Skrifa für die Verarbeitung von Webfonts unter Linux, Android und ChromeOS
- Unter Windows und Mac wird es als Fallback-Handler verwendet, wenn das System ein Font-Format nicht unterstützt
Verbesserungen bei Sicherheit und Leistung
- 1. Stärkere Speichersicherheit
- Rust garantiert standardmäßig Speichersicherheit
- Für die Performance wird jedoch die Bibliothek bytemuck verwendet
- Sie kommt zum Einsatz, wenn Byte-Reinterpretation mit stark typisierten Strukturen nötig ist
- Sobald künftige Rust-Updates sichere Konvertierungen ermöglichen, soll darauf umgestellt werden
- 2. Verbesserte Korrektheit
- Skrifa verbessert durch garantierte Immutabilität der Datenstrukturen Lesbarkeit, Wartbarkeit und Multithreading-Performance des Codes
- Rund 700 Unit-Tests prüfen die Codequalität
- Mit dem Tool fauntlet werden die Ausgaben von FreeType und Skrifa verglichen → so wird geprüft, ob die Darstellungsqualität übereinstimmt
- 3. Umfangreiche Tests und stärkere Sicherheit
- Für Skrifa und den Integrationscode laufen seit Juni 2024 Fuzzing-Tests
- Bisher wurden 39 Bugs gefunden → keine Sicherheitslücken, sondern visuelle Fehler oder kontrollierte Abstürze
- Das zeigt Verbesserungen der Codequalität, ohne dass daraus Sicherheitsprobleme entstehen
- Für Skrifa und den Integrationscode laufen seit Juni 2024 Fuzzing-Tests
Fazit und Ausblick
- Die Einführung des Rust-basierten Skrifa stärkt die Sicherheit und verbessert die Codequalität
- Die Entwicklungsproduktivität steigt, und Nutzer erhalten eine sicherere Font-Umgebung
- Künftig ist geplant, Skrifa auch für die Verarbeitung von Systemfonts unter Linux und ChromeOS einzusetzen
2 Kommentare
Letztes Mal zlib, diesmal FreeType…
Dass die alten Veteranen nach und nach verdrängt werden … ist irgendwie ähnlich wie in der Welt, in der Menschen leben.
Hacker-News-Kommentare
Bei Google sind mindestens 0,25 Softwareentwickler nötig, um per Fuzzing entdeckte Probleme zu beheben
Die wahre Stärke von Rust liegt im schrittweisen Übergang zu mehr Sicherheit und in der Fähigkeit, sich in bestehende Projekte integrieren zu lassen
Ich lerne gerade, wie Fonts abhängig vom Subpixel-Layout des Monitorpanels gerendert werden
Skia ist eine fortschrittliche Bibliothek für komplexes Textlayout und das Caching von Glyphen
Fonts werden durch den OpenType Sanitizer geleitet, bevor sie verarbeitet werden