重大な WebP ゼロデイ脆弱性 CVE-2023-4863 を発見・修正する方法
2023年10月5日
0 分で読めます先月、2 件の重大な WebP 脆弱性 (CVE-2023-4863 と CVE-2023-5129) が Apple Security Engineering、Architecture (SEA)、トロント大学マンク校のThe Citizen Lab の合同チームによって発見されました。この脆弱性は、Chromium ベースのブラウザと Google が提供する webmproject/libwebp
ライブラリを悪用する、悪意を持って作成された WebP 画像に関係していました。 この脆弱性と最近の経緯についての詳細は、以前のブログ記事をご覧ください。
特に、libwebp
の脆弱性はブラウザだけでなく、開発者エコシステム、オペレーティングシステム、コンテナにも影響を及ぼします。ここでは、libwebp
の影響を受けることがわかっているすべてのエコシステムとコンテナを紹介します。
この脆弱性が広範に影響することを示すものとして、異なる開発者エコシステムで直接的・推移的な依存関係として検出されていることがわかります。これは主に Cocoapods、Swift、Python プロジェクトの推移的な依存関係として発見されており、開発者が影響を認識しにくくしています。ただし、Snyk Container と Snyk Open Source はいずれも関連パッケージを検出できるため、今すぐ Snyk を無料で使用して、それらがどのプロジェクトに組み込まれているかを調べることができます。
Synk では libwebp
の影響について包括的な分析を行っていますが、セキュリティの専門家は現在も、アプリケーション、エコシステム、オペレーティングシステム全体にわたる libwebp
の多様な用途を調査中です。この脆弱性は、.webp イメージコーデックを利用してそのコンテンツをレンダリングするソフトウェアコンポーネント (ブラウザやデザインツールなど) に影響するため、その範囲は拡大を続けるものと思われます。そのため、 libwebp
に関する最新ニュースを常に把握することが重要です。
このブログ記事の目的は、この脆弱性がソフトウェアエコシステムに与える影響をより深く理解し、その対処方法を簡単に参照できるようにすることです。
2023 年 9 月 27 日現在、以下の CVE はこの libwebp
の脆弱性を積極的に追跡していることが知られています。
CVE-2023-4863: 2023 年 9 月 11 日公開、CVSS スコア
9.6
、EPSS スコア 31.86%(97 パーセンタイル\*)。注: この CVE のスコアは、詳細が公表される前は8.8
(「高」) でした。CVE-2023-5129: 2023 年 9 月 25 日に CVSS スコア
10
(可能な最大値) で公開され、その後 2023 年 9 月 27 日に CVE 番号付与機関である Google により重複として拒否されました。
この脆弱性と最近の経緯についての詳細は、以前のブログ記事をご覧ください。このブログでは、次の対策推奨事項について説明します。
1. libwebp の使用場所の特定
ゼロデイ脆弱性への対処で最も難しいのは、その脆弱性によって影響を受けるかどうか、またどこで影響を受けるかを判断することです。libwebp
の場合も同様です。libwebp
はプロジェクト内で直接的な依存関係、あるいは推移的な依存関係として間接的に見つかる場合もあります。知らないうちに何らかの影響を受けている可能性が高いため、問題に適切に対処できるよう対応することが重要です。影響が及ぶ領域には次のようなものがあります。
libwebp
ライブラリに直接的に依存しているソフトウェア、または推移的な依存関係を介して間接的に依存しているソフトウェアはすべてこの脆弱性の影響を受けます。.webp イメージのエンコードやデコードを行うソフトウェアはすべてこの脆弱性の影響を受けます。
.webp イメージを処理するツールがバンドルされているオペレーティングシステムまたはコンテナイメージはすべてこの脆弱性の影響を受けます。
広範囲な開発者エコシステムがこの脆弱性の影響を受ける要因の 1 つは、高レベルのプログラミング言語では libwebp
ライブラリを基盤として使用していることです。例として、2D や3D のゲーム作成に使われる GoDot ゲームエンジンは libwebp ライブラリに依存しており、広く使われている FFmpeg ユーティリティも libwebp ライブラリを利用しています。
Snyk による libwebp の脆弱性の検出
Snyk を無料で使用して libwebp
の脆弱性を検出する方法はいくつかあります。Snyk CLI を利用して、プロジェクトをローカルでテスト可能です。
アプリケーションの場合、Snyk CLI から
snyk test --unmanaged
を実行して、リポジトリ内の未管理の依存関係を比較し、個々のパッケージとその脆弱性を検出します。コンテナの場合、サポートされているオペレーティングシステムのパッケージが
libwebp
の脆弱なバージョンに依存しているかどうかを検出するには、snyk container test
を実行します。
すべての Git リポジトリ内のプロジェクトを対象にスキャンを実行し、使用しているすべての直接および推移的な依存関係のレポートを提供することもできます。このレポートからは、libwebp
に依存しているかどうか、および依存関係グラフ内のいくつのパスで使用されているかがわかります。すべてのプロジェクトを対象に、"CVE-2023-4863" を検索することもできます。
2a. libwebp 1.3.2 以降へのアップグレード
自動修正: Snyk を Git リポジトリに接続し、可能な場合は依存関係グラフを更新できるようにプルリクエストを発行します。その後、アプリケーションをリビルドします。
手動修正: アプリケーションで
libwebp
を直接的な依存関係として使用している場合は、依存関係ファイルを1.3.2
以降に直接アップグレードできます。その後、アプリケーションをリビルドします。手動修正: アプリケーションで
libwebp
を推移的な依存関係として使用している場合は、推移的なlibwebp
の依存関係を取り込む直接的な依存関係のバージョンを1.3.2
以降で特定します。その後、アプリケーションをリビルドします。
2b. libwebp 1.3.2 以降へのアップグレード (コンテナ)
自動修正: Snyk を Git リポジトリに接続し、可能な場合は Dockerfile のベースイメージを更新できるようにプルリクエストを発行します。
https://snyk.io/test/docker/
<image_name>
を使用して、提案されたベースイメージのアップグレードにまだ脆弱性が残っているかどうかをプレビューし、許容されるアップグレードパスを特定したらコンテナをリビルドします。手動修正: イメージに脆弱なバージョンの
libwebp
が含まれており、ベースイメージのアップグレードが利用できないか望ましくない場合は、Snyk Container の対策アドバイスに基づいて自分でアップグレードできます。 例: Debian ベースのイメージで、Snyk Container CLI から次が報告される場合。
✗ High severity vulnerability found in libwebp/libwebpdemux2 Description: Out-of-bounds Write Info: https://security.snyk.io/vuln/SNYK-DEBIAN12-LIBWEBP-5918869 Introduced through: imagemagick@8:6.9.11.60+dfsg-1.6, imagemagick/libmagickcore-dev@8:6.9.11.60+dfsg-1.6, libwebp/libwebp-dev@1.2.4-0.2, libwebp/libwebp7@1.2.4-0.2 From: imagemagick@8:6.9.11.60+dfsg-1.6 > imagemagick/imagemagick-6.q16@8:6.9.11.60+dfsg-1.6 > imagemagick/libmagickcore-6.q16-6@8:6.9.11.60+dfsg-1.6 > libwebp/libwebpdemux2@1.2.4-0.2 From: imagemagick/libmagickcore-dev@8:6.9.11.60+dfsg-1.6 > imagemagick/libmagickcore-6.q16-dev@8:6.9.11.60+dfsg-1.6 > librsvg/librsvg2-dev@2.54.7+dfsg-1~deb12u1 > gdk-pixbuf/libgdk-pixbuf-2.0-dev@2.42.10+dfsg-1+b1 > tiff/libtiff-dev@4.5.0-6 > libwebp/libwebp-dev@1.2.4-0.2 > libwebp/libwebpdemux2@1.2.4-0.2 From: imagemagick@8:6.9.11.60+dfsg-1.6 > imagemagick/imagemagick-6.q16@8:6.9.11.60+dfsg-1.6 > imagemagick/libmagickcore-6.q16-6@8:6.9.11.60+dfsg-1.6 > libwebp/libwebpmux3@1.2.4-0.2 and 4 more... Fixed in: 1.2.4-0.2+deb12u1
ライブラリを手動でアップグレードするには、次を追加できます。
…
RUN apt-get update && \
apt-get install -y libwebp-dev=1.2.4-0.2+deb12u1 && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
…
3. 自動 PR のサポートを使用したプロジェクトのモニタリング
ゼロデイ脆弱性の特性として、その影響は日々発見されているため、問題の修正に関する新たな推奨事項がないかプロジェクトを定期的・積極的に監視することが重要です。Snyk を使用している場合は、プロジェクトを常に監視してください (リポジトリを Snyk アプリにインポートするときにデフォルトで有効になります)。これにより、Snyk では更新時に実行されるその他のテストに加えて、プロジェクトを毎日自動的にテストします。
毎日のテストにより、新しい修正を適用できる場所など、セキュリティを改善できるタイミングが自動的に特定されます。たとえば、libwebp
をパッケージ A
の推移的な依存関係として使用している場合、パッケージ A
では libwebp
のバージョン 1.3.2
以降を使用するバージョンをリリースする必要があります。今すぐ利用できなくても、明日または来週にはリリースされる場合があります。snyk monitor
を使用すると、テストが毎日行われ、新しいアップグレードが利用可能になると PR が送信され、libwebp
のバージョンがアップグレードされて脆弱性が修正されます。
また、この脆弱性に対してさらなる修正が行われた場合や、将来的に新たな脆弱性を表面化させる攻撃ベクトルを発見した場合は、Snyk から PR またはその他の方法を通じて警告します。これにより、将来的に問題が発生しても、何をすべきかをいち早く知ることができます。
libwebp を使用するアプリの安全を守る
Snyk は、直接的または推移的な依存関係として libwebp
を使用するアプリケーションにワンクリック修正 PR を提供します。