Memperkuat Keamanan Memori pada Web Font
(developer.chrome.com)- 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 (sepertiint16_t)
- Makro (
- 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
- Kurangnya tipe ukuran eksplisit akibat penggunaan makro
- 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
- File font memiliki struktur data yang kompleks sehingga ada masalah yang tidak terdeteksi oleh fuzzing
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
- Pengujian fuzzing sejak Juni 2024 dilakukan pada Skrifa dan kode integrasinya
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
Dulu zlib, sekarang freetype…
Para senior satu per satu mulai tersingkir… mirip seperti dunia tempat manusia hidup ya
Komentar Hacker News
Di Google, dibutuhkan setidaknya 0,25 engineer perangkat lunak untuk memperbaiki masalah yang ditemukan lewat fuzzing
Kekuatan sejati Rust adalah transisi bertahap menuju keamanan dan kemampuannya untuk diintegrasikan ke proyek yang sudah ada
Saya sedang mempelajari cara font dirender berdasarkan tata letak subpiksel panel monitor
Skia adalah library canggih yang melakukan tata letak teks tingkat lanjut dan menyimpan cache glyph
Font diproses dengan melewati OpenType Sanitizer terlebih dahulu