3 Punkte von GN⁺ 2025-03-21 | 2 Kommentare | Auf WhatsApp teilen
  • 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_t usw.)
    • 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
  • 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

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

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

 
iolothebard 2025-03-22

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.

 
GN⁺ 2025-03-21
Hacker-News-Kommentare
  • Bei Google sind mindestens 0,25 Softwareentwickler nötig, um per Fuzzing entdeckte Probleme zu beheben

    • Mir gefällt die Art, wie dieser zusätzliche Aufwand gemessen wird
    • Ich wünschte, es gäbe eine Möglichkeit, TTF-Hinting-Befehle vollständig zu nutzen, auch ohne FreeType zu verwenden
    • Unter Windows und macOS scheint es keine Möglichkeit mehr zu geben, korrektes Hinting zu aktivieren
    • Auch FreeType setzt seit Version 2.7 standardmäßig ungeeignetes Hinting ein
    • Wenn man sehen möchte, wie korrekt gehinteter Text aussieht, kann man sich die Screenshots ansehen
    • Ich vermute, dass Windows seit XP das Font-Hinting aufgegeben hat
    • UI-Skalierung und das Betrachten von Rasterbildern auf Displays mit unterschiedlichen Auflösungen verursachen Unschärfe
  • 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

    • Man kann Komponenten einzeln migrieren, ohne ein groß angelegtes Rewrite durchführen zu müssen
  • Ich lerne gerade, wie Fonts abhängig vom Subpixel-Layout des Monitorpanels gerendert werden

    • Windows geht davon aus, dass alle Panels ein RGB-Layout verwenden, und die ClearType-Software rendert Fonts auf Basis dieser Annahme
    • Bei neuen Display-Typen kommt es zu Text-Fringing
    • Es gibt Drittanbieter-Tools wie MacType oder Better ClearType Tuner, aber sie funktionieren nicht in Chrome oder Electron
    • Da neue Panel-Technologien immer verbreiteter werden, braucht es Bemühungen zur Definition eines Standards, um das Subpixel-Layout an die Grafikschicht zu übermitteln
    • Bei Blur Busters sind einige Bemühungen zu sehen, aber das Bewusstsein der Anbieter ist noch gering
  • Skia ist eine fortschrittliche Bibliothek für komplexes Textlayout und das Caching von Glyphen

    • Skia ist in C++ geschrieben und wurde von Google entwickelt
    • FreeType misst und rendert Glyphen und unterstützt verschiedene Anti-Aliasing-Modi sowie Hinting
    • FreeType ist in C geschrieben und wurde nicht von Google entwickelt
    • Ich frage mich, warum FreeType zuerst in Rust neu geschrieben wurde
  • Fonts werden durch den OpenType Sanitizer geleitet, bevor sie verarbeitet werden

    • Ich frage mich, ob Font-Formate wirklich so schlimm sind, dass Dateien bereinigt werden müssen
    • Integer-Overflow wurde als eine der Ursachen für die Schwachstelle identifiziert
    • Viele Sprachen erkennen Overflow nicht, und moderne Architekturen wie RISC-V enthalten ebenfalls keine Overflow-Traps
    • Ich kann nicht verstehen, warum neue Sprachen wie Rust keine Overflow-Traps enthalten