ニュース
「Google Chrome」のフォント処理がC/C++言語からRust言語に
「FreeType」からの移行でメモリ安全性を改善、脆弱性が出にくいライブラリに
2025年3月24日 10:12
「Google Chrome」のフォント処理が、C/C++言語からRust言語になったとのこと。米Googleが3月19日、開発者向けブログ「Chrome for Developers」でその詳細と理由を明らかにしている。
ネットワーク経由で配信されるWebフォントは、事前に安全性を検証することができないため、信頼できない(マルウェアかもしれない)リソースとして扱われる。信頼できないリソースにはサンドボックス化、「OpenType Sanitizer」による無毒化といったセキュリティ対策が施されるほか、ライブラリに対するファジングテスト(さまざまな入力を大量に与える自動テスト)で脆弱性があぶり出される。
さて、従来の「Chrome」には「FreeType」が同梱されており、Android、ChromeOS、Linuxでは この「FreeType」が主要なフォント処理ライブラリとして用いられている。そのため「FreeType」に脆弱性があると、多くのユーザーが影響を受けることになる。
しかし、「FreeType」はまだメモリ安全性より性能が重視されていた時代に開発されたプロダクトであり、問題が絶えず発生している。C/C++言語でメモリが手動管理されているためプログラムミスでメモリが破壊されたり、安全な記述やテストの追加が難しかったりするだけでなく、「FreeType」が依存する外部ライブラリ(bzip2、libpng、zlib など)の脆弱性も影響する。フォントファイルは動画ファイルに匹敵するほど複雑なので、ファジングテストも困難なのが実情だ。
そこで、メモリ安全性を考慮したRust言語で記述された「Skrifa」が新たに開発された。
「Skrifa」はOpenTypeフォントの読み取り・操作ライブラリ「Fontations」の一部で、「Chrome」のグラフィックライブラリ「Skia」が「FreeType」でフォントからメタデータと文字形を読み込む処理を代替する。つまり、この処理部分では今後、メモリ安全性にかかわる脆弱性を心配しなくて済むというわけだ。
同社は「FreeType」を「Skia」に移行するため、「Skrifa」に基づく新しい「Skia」フォントバックエンドを開発し、変更を段階的にユーザーにロールアウトしている。
- 「Chrome 128」(2024年8月):安全な試験運用として、カラーフォントやCFF2など、あまり使用されていないフォント形式で使用できるように「Fontations」を有効化
- 「Chrome 133」(2025年2月):Linux、Android、ChromeOSにおけるすべてのWebフォントと、Windows/MacにおけるフォールバックとしてWebフォント使用(システムがフォント形式をサポートしていないが「Chrome」で表示する必要がある場合)で「Fontations」を有効化
「Fontations」「Skrifa」が有効化されているのは今のところWebフォントにかかわる処理のみだが、今後はLinux/ChromeOSを皮切りに、OSに含まれるフォントに関する処理も「Fontations」に置き換えられる予定。将来的にはテキストスタックでもRustが積極的に採用されるとのことだ。