ニュース
「Chromium」の画像デコードをRustに ~脆弱性削減、処理時間も最大50%短縮
Microsoftらの取り組み。PNGでの成果をBMPにも適用、ICO/JPEGでも進行中
2026年7月24日 14:26
「Chromium」をベースとした「Microsoft Edge」や「Google Chrome」といったWebブラウザーで、画像デコーダーをメモリ安全な言語「Rust」で書き換える取り組み(rustification)が進んでいるとのこと。米Microsoftが7月17日(現地時間)、公式ブログ「Microsoft Browser Vulnerability Research」に記事を掲載し、その取り組みを解説している。
Webページでは「img」タグやFaviconなど、多くの画像データが読み込まれる。その処理には画像デコーダー(コーデック)が用いられるが、処理速度を稼ぐ必要があることから、歴史的にC++言語で実装されることが多かった。
しかし、大規模かつ高度に最適化されたC++実装のコーデックでメモリ破壊の不具合を完全に取り除くのは難しく、脆弱性の温床になってきたという。「libtheora」(CVE-2024-56431)や「AV1」(CVE-2024-0444)はその一例だ。
そこで近年、C++と同程度の速度でありながら、メモリ安全性を言語仕様で保証しているRust実装への移行が進められている。
その最初の成果が、Google主導で行われた「Rust」実装のPNGデコーダー「Rust PNG」だ。Microsoftも、「Rust PNG」で学んだ手法をBMPやICOといった他の画像形式へ適用する仕組み(再利用可能なモデル)を発展させることに貢献したという。
この再利用可能なモデルには、対象コーデックに潜在するリスクの評価、既存のRustコンポーネントの成熟度評価、「Chromium」のグラフィックス層(Skia)と接合するインフラ、機能不足なRustコンポーネントの改善、C++実装との互換性テスト、性能・安定性の検証といったさまざまなプロセスが含まれる。
C++実装をRust化(Rustifying)するにあたっては、レガシーデコーダーの古い前提が再検討され、すでにあるRustエコシステムから新しくクリーンなコーデック実装が採用された。その結果、デコード処理はよりシンプルで、最適化に適したものになったという。たとえば「Rust BMP」の場合、プラットフォームによるが、平均デコード時間が20~50%短縮された。
また、メモリ破損に起因するクラッシュが減ったのも成果。そうしたクラッシュが、さまざまな箇所で“ノイズ”のように現れることが減った結果、ロジックや互換性の問題が明確になり、その解決に注力できるようになった。このことが、さらなる信頼性向上につながっている。
こうした水平展開はICOやJPEGでも進んでおり、いずれはWebP、TIFF、JPEG 2000、SVGなどでも実現される見込み。
ただし、すべてをRust実装に置き換えるのがこの取り組みの目標ではない。目的はあくまでも画像デコード処理の安全性を高めることだ。Rust実装でなくても、すでにメモリセーフな実装であればそれがそのまま採用される。「Wuffs」で実装されているというGIFデコード処理などはその一例だ。また、攻撃対象になりかねない古い仕様も評価され、必要であれば削除される。たとえば「BMPファイル内に埋め込まれたJPEG/PNG画像のサポート」はWindows環境の古い印刷シナリオのために残されていた仕様だが、現在では必要性が薄く、攻撃対象となりかねないため削除された。























