3 poin oleh GN⁺ 2025-03-21 | 2 komentar | Bagikan ke WhatsApp
  • Skrifa adalah library pemrosesan font baru yang ditulis dengan Rust, dikembangkan untuk menggantikan FreeType agar Chrome dapat memproses font dengan lebih aman
  • Berkat keamanan memori Rust, masalah keamanan berkurang dan kecepatan peningkatan teknologi font meningkat
  • Peralihan dari FreeType ke Skrifa meningkatkan kualitas kode dan memperpendek waktu perbaikan keamanan

Alasan mengganti FreeType

  • Di lingkungan web, sumber daya yang tidak tepercaya dari berbagai asal harus bisa diambil dan digunakan dengan aman

  • Chrome telah menerapkan berbagai langkah keamanan untuk menggunakan web font secara aman

    • Sandboxing: karena kodenya tidak aman dan font tidak dapat dipercaya, eksekusi dilakukan dalam lingkungan perlindungan terpisah
    • OpenType Sanitizer: membersihkan dan memeriksa font sebelum diproses
    • Fuzzing: menguji library terkait pemrosesan font secara luas
  • FreeType digunakan sebagai library pemrosesan font default di Android, ChromeOS, dan Linux

    • Jika muncul kerentanan keamanan, ada risiko dampaknya mengenai banyak pengguna

Masalah keamanan utama yang muncul di FreeType

  • 1. Penggunaan bahasa yang tidak aman
    • Karena FreeType ditulis dalam C, kerentanan seperti kesalahan memori dan buffer overflow dapat terjadi
  • 2. Masalah spesifik proyek
    • Kurangnya tipe ukuran eksplisit akibat penggunaan makro
      • Makro (FT_READ_*, FT_PEEK_*) menyembunyikan tipe ukuran eksplisit (seperti int16_t)
    • Bug berulang pada kode baru
      • Masalah muncul saat menambahkan dukungan COLRv1 dan OT-SVG
    • Kurangnya pengujian
      • Sulit membuat font uji yang kompleks sehingga muncul masalah kekurangan pengujian
  • 3. Masalah dependensi
    • Masalah berulang muncul pada library seperti bzip2, libpng, dan zlib yang digunakan FreeType
  • 4. Keterbatasan fuzzing
    • File font memiliki struktur data yang kompleks sehingga ada masalah yang tidak terdeteksi oleh fuzzing
      • Font mencakup aturan majemuk dan state machine yang kompleks
      • Sulit membuat struktur yang valid sehingga fuzzing yang efektif menjadi sulit dilakukan

Penerapan Skrifa dan proses adopsinya di Chrome

  • Library grafis Skia yang digunakan Chrome memakai FreeType untuk metadata font dan rendering
  • Untuk mengganti FreeType dengan Skrifa, Chrome membangun ulang backend font di Skia

Tahapan adopsi Skrifa

  • Chrome 128 (Agustus 2024):
    • Uji coba Skrifa diterapkan pada format font yang lebih jarang digunakan seperti color font dan CFF2
  • Chrome 133 (Februari 2025):
    • Skrifa diadopsi penuh untuk pemrosesan web font di Linux, Android, dan ChromeOS
    • Di Windows dan Mac, digunakan sebagai pemroses cadangan ketika sistem tidak mendukung format font tersebut

Peningkatan keamanan dan performa

  • 1. Memperkuat keamanan memori
    • Rust secara bawaan menjamin keamanan memori
    • Namun, untuk performa digunakan library bytemuck
      • Digunakan ketika reinterpretasi byte diperlukan pada struktur tipe yang kuat
      • Jika pembaruan Rust di masa depan memungkinkan konversi yang aman, rencananya akan beralih ke fitur tersebut
  • 2. Peningkatan akurasi
    • Skrifa memperkuat keterbacaan kode, kemudahan pemeliharaan, dan performa multithreading dengan menjamin immutability struktur data
    • Kualitas kode diverifikasi dengan sekitar 700 unit test
    • Menggunakan tool fauntlet untuk membandingkan output FreeType dan Skrifa → memeriksa apakah kualitas visualnya konsisten
  • 3. Pengujian luas dan penguatan keamanan
    • Pengujian fuzzing sejak Juni 2024 dilakukan pada Skrifa dan kode integrasinya
      • Hingga saat ini ditemukan 39 bug → bukan kerentanan keamanan (kesalahan visual atau crash yang terkontrol)
      • Terbukti ada peningkatan kualitas kode yang tidak berkembang menjadi masalah keamanan

Kesimpulan dan rencana ke depan

  • Adopsi Skrifa berbasis Rust memperkuat keamanan dan meningkatkan kualitas kode
  • Produktivitas pengembangan meningkat dan pengguna mendapatkan lingkungan font yang lebih aman
  • Ke depannya, ada rencana menerapkan Skrifa pada pemrosesan font sistem di Linux dan ChromeOS

2 komentar

 
iolothebard 2025-03-22

Dulu zlib, sekarang freetype…
Para senior satu per satu mulai tersingkir… mirip seperti dunia tempat manusia hidup ya

 
GN⁺ 2025-03-21
Komentar Hacker News
  • Di Google, dibutuhkan setidaknya 0,25 engineer perangkat lunak untuk memperbaiki masalah yang ditemukan lewat fuzzing

    • Saya suka cara mengukur pekerjaan tambahan seperti ini
    • Saya berharap ada cara untuk tetap bisa sepenuhnya menggunakan instruksi hinting TTF meskipun tidak memakai FreeType
    • Windows dan macOS tampaknya tidak lagi punya cara untuk mengaktifkan hinting yang benar
    • FreeType juga menetapkan hinting yang tidak tepat sebagai default sejak versi 2.7
    • Jika penasaran seperti apa tampilan teks yang di-hinting dengan benar, Anda bisa merujuk ke tangkapan layar
    • Saya curiga Windows sudah menyerah pada font hinting sejak XP
    • UI scaling dan melihat gambar raster di layar dengan berbagai resolusi menyebabkan tampilan buram
  • Kekuatan sejati Rust adalah transisi bertahap menuju keamanan dan kemampuannya untuk diintegrasikan ke proyek yang sudah ada

    • Komponen bisa dimigrasikan satu per satu tanpa perlu penulisan ulang besar-besaran
  • Saya sedang mempelajari cara font dirender berdasarkan tata letak subpiksel panel monitor

    • Windows mengasumsikan semua panel memakai tata letak RGB, dan perangkat lunak ClearType merender font berdasarkan asumsi itu
    • Pada jenis display yang lebih baru, muncul text fringing
    • Ada alat pihak ketiga seperti MacType atau Better ClearType Tuner, tetapi tidak berfungsi di Chrome atau Electron
    • Seiring teknologi panel baru makin umum, perlu ada upaya untuk mendefinisikan standar dalam meneruskan tata letak subpiksel ke lapisan grafis
    • Ada beberapa upaya dari Blur Busters, tetapi kesadaran dari vendor masih kurang
  • Skia adalah library canggih yang melakukan tata letak teks tingkat lanjut dan menyimpan cache glyph

    • Skia ditulis dalam C++ dan dibuat oleh Google
    • FreeType mengukur dan merender glyph serta mendukung berbagai mode anti-aliasing dan hinting
    • FreeType ditulis dalam C dan bukan dibuat oleh Google
    • Saya penasaran kenapa FreeType lebih dulu ditulis ulang ke Rust
  • Font diproses dengan melewati OpenType Sanitizer terlebih dahulu

    • Saya penasaran apakah format font memang seburuk itu sampai file-nya harus disanitasi
    • Integer overflow diidentifikasi sebagai salah satu penyebab kerentanan
    • Banyak bahasa tidak mendeteksi overflow, dan arsitektur modern seperti RISC-V juga tidak menyertakan overflow trap
    • Saya tidak paham mengapa bahasa baru seperti Rust tidak menyertakan overflow trap