WebP の重大なゼロデイ脆弱性 CVE-2023-4863 はより広範なソフトウェア・エコシステムに影響
2023年9月28日
0 分で読めますアジェンダ
今月、Apple Security Engineering and Architecture (SEA)とトロント大学Munk SchoolのThe Citizen Labは、ChromeブラウザとGoogleの`webmproject/libwebp`ライブラリを悪用するために悪意を持って形成された `WebP` 画像に関する2つの`重大な`脆弱性を公開しました。
2023年9月27日現在、このlibwebpの脆弱性を積極的に追跡していることが知られているCVEは以下の通りです:
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によって重複として拒否されました;
WebPライブラリ`libwebp`で確認された脆弱性は、ブラウザだけでなく、Chromeを搭載したアプリケーション(例えば、以下のようなもの)にも及んでいます:macOS 用の 1Password).`libwebp`ライブラリは、人気のあるElectronフレームワークを含む、 多くのオペレーティングシステム や一般的なアプリケーションフレームワークでwebp画像をレンダリングするために使用されているため、これは特に重要です。そのため、 `libwebp` の脆弱性は、Pillow や、ffmpeg 、Gimp などのアプリケーションを含む汎用ソフトウェアにも及んでいます。これらのアプリケーションやソフトウェア・コンポーネントの一部は、コンテナ・イメージにバンドルされています。
`webmproject/libwebp` の 0.5.0 から 1.3.1 までのバージョンが影響を受けます。脆弱性を修正するためには、オペレーティングシステムとソフトウェアプロジェクトに少なくともバージョン1.3.2が必要であることを確認する必要があります。しかし、`libwebp` は、それをバンドルしている他のソフトウェアによって間接的に利用されていることがほとんどであり、この脆弱性がより広いソフトウェア・エコシステムに影響を与える一因となっていることに注意してください。
Googleや他のベンダーは、最初のCVEに対応して、一般的なブラウザに修正プログラムを迅速にリリースしました。
Snyk はこの脆弱性を監視しており、新しい情報が入り次第、この記事を更新する予定です。また、Snyk 脆弱性データベースは、最新のデータを入手次第更新していきますので、引き続き定期的なスキャンを実施し、プロジェクトの安全を確保してください。この`libwebp` の脆弱性は、アプリケーションやコンテナイメージの脆弱性をスキャンすることが重要であり、ソフトウェアのサプライチェーンを安全に保つために頻繁に行うべきことであることを改めて認識しましょう。
最新のニュースや開発については、X (@snyksec) をチェックするか、フォローしてください。詳しくは下記をお読みください。
EPSSスコアは EPSSモデルの直接の出力を評価します。これらのスコアは、既知の脆弱性からの攻撃の脅威を総合的に示しています。パーセンタイルは、すべての既知のEPSSスコアとの相対的なEPSS確率を測定します。この例では、CVE-2023-4863は、評価された全脆弱性の97%よりも悪用される確率が高くなっています。つまり、この脆弱性は、悪意のある行為者によって悪用される可能性が他の脆弱性よりも高いということです。このデータは、利用可能な最新のEPSSモデルバージョンに基づき、毎日更新されます。詳しくは EPSSのドキュメント をチェックしてください。
libwebpは何に使われていますか?
この脆弱性は、開発者のエコシステム全体にも広がっている可能性が高いです。高水準のプログラミング言語では、基礎となるlibwebpライブラリが使われることが多いためです。例として、2Dや3Dのゲーム作成に使われるGoDotゲームエンジンはlibwebpライブラリに依存しており、広く使われているFFmpegユーティリティも libwebpライブラリを利用しています。
セキュリティ専門家は、この脆弱性が.webpイメージコーデックを使用し、その内容をレンダリングするソフトウェアコンポーネント(ブラウザ、デザインツールなど)に影響を与える可能性があるため、アプリケーション全体におけるこの脆弱性の影響範囲をまだ特定していません。
libwebpの脆弱性についての説明
`libwebp`ライブラリは webp フォーマットの画像を処理します。10年以上前に Googleによって作成され、.webp画像をレンダリングするアプリケーションの大半で使用されています。この脆弱性は、悪意を持って細工された webp ロスレス・ファイルを使用して悪用される可能性があり、脆弱なライブラリがヒープをオーバーフローする原因となります。
この脆弱性に対する攻撃は、サービス拒否(DoS)からリモートコード実行(RCE)の可能性まで、さまざまな影響を及ぼす可能性があります。一例として、ゼロデイ BLASTPASSエクスプロイト(Apple CVE-2023-41064、CVE-2023-41061)などの密接に関連する攻撃は、iMessageシステムを介して送信された悪意のある.webp画像が、その所有者の操作なしに被害者のiOSデバイスを危険にさらす可能性があることを示しました。
詳細な情報や、詳細な分析およびPOC例へのリンクについては、 Snyk 脆弱性データベースのページを参照してください。
Snyk による libwebp の脆弱性の検出
Snyk を使用して libwebp の脆弱性を検出するには、さまざまな方法があります。Snyk CLIを使用すれば、ローカルでプロジェクトをテストしたり、SCM 統合機能を使って Snyk にプロジェクトをインポートしたり、Snyk レポートを使って Snyk にインポート済みのすべてのプロジェクトで libwebp の検索をすばやく実行したりできます。
Snyk CLI を使用したプロジェクトのテスト
Snyk Containerは、`libwebp` の脆弱なバージョンに依存するオペレーティング システム パッケージを警告します。 Snyk はウェブインタフェースを使用してコンテナまたは Dockerfile を監視することができ、`snyk container test` という CLI コマンドを使用して手動でスキャンをトリガーすることもできます。
次の例は、Snyk CLI を使って Docker コンテナイメージ `python:3.11.1`をスキャンし、libwebp に ゼロデイ脆弱性があるかどうかをテストしたものです:
$ snyk container test python:3.11.1
Testing python:3.11.1...
…
✗ Critical severity vulnerability found in libwebp/libwebpdemux2
Description: Improper Input Validation
Info: https://security.snyk.io/vuln/SNYK-DEBIAN11-LIBWEBP-5918870
Introduced through: libwebp/libwebp-dev@0.6.1-2.1, imagemagick@8:6.9.11.60+dfsg-1.3, meta-common-packages@meta
From: libwebp/libwebp-dev@0.6.1-2.1 > libwebp/libwebpdemux2@0.6.1-2.1
From: imagemagick@8:6.9.11.60+dfsg-1.3 > imagemagick/imagemagick-6.q16@8:6.9.11.60+dfsg-1.3 > imagemagick/libmagickcore-6.q16-6@8:6.9.11.60+dfsg-1.3 > libwebp/libwebpdemux2@0.6.1-2.1
From: libwebp/libwebp-dev@0.6.1-2.1 > libwebp/libwebpmux3@0.6.1-2.1
and 3 more...
Fixed in: 0.6.1-2.1+deb11u2
…
Tested 1 dependency for known issues, found 1 issue.
C++プロジェクトのCLIによるテスト
Snyk Open Sourceは、C/C++ アプリケーションの依存関係に脆弱な`libwebp` バージョンが存在することを警告します。Snyk では、Web インターフェイスを使用してアプリケーションを監視したり、CLI コマンドを使用してオープンソースの依存関係を手動でスキャンすることができます:
$ snyk test --unmanaged
Testing /Users/developer/myapp...
Issues:
✗ [Critical] Heap-based Buffer Overflow
Introduced through: https://github.com|webmproject/libwebp@1.3.1
URL: https://security.snyk.io/vuln/SNYK-UNMANAGED-WEBMPROJECTLIBWEBP-5918283
Tested 1 dependency for known issues, found 1 issue.
C/C++ スキャン機能の詳細については、Snyk ユーザー ドキュメント を参照してください。
SCM統合によるプロジェクトのテスト
サポートされている SCM 統合 (GitHub、Bitbucket、GitLab、Azure Repos) を使用してプロジェクトを Snyk にインポートすると、自動的にテストが開始され、Snyk UI を使用してプロジェクト内の libwebp 脆弱性を特定し、優先順位を付けて修正できるようになります。
Snyk のレポートを利用して、プロジェクト全体で libwebp の脆弱性を検知
Snyk のレポート (Enterprise プランでの提供機能) にアクセスできる Snyk のお客様は、すでにインポートして Snyk で監視しているプロジェクトの libwebp をすばやく特定できます。イシュー詳細レポートでは、CVEでフィルタリングするだけです:CVE-2023-5129 と CVE-2023-4863
URLをコピーして、この画面をチームの他のメンバーと共有したり、PDFにエクスポートして、ビジネス全体で広く可視化することができます。
もし問題が見つかれば、それがどこで使われているかを正確に知ることができます。プロジェクトそのものをクリックすると、問題の詳細と修正方法が表示されます。
修正の優先順位付け
たいていの場合、あなたのプロジェクトでは、複数の libwebp の問題を発見する可能性があります。Snyk は、優先順位付けのプロセスを支援するさまざまな方法を提供しています。
Snykのプライオリティ・スコアの利用
Snyk の プライオリティ・スコア は、多くのリスク要因を計算し、最初に対処すべき問題を迅速に特定するのに役立ちます。このスコアは、EPSS、攻撃方法の成熟度、CVSS、社会的傾向など、多くのシグナルを計算し、脆弱性のリストを素早くふるいにかけ、それに応じて修正に優先順位をつけるために利用できます。libwebpの場合、ほとんどの場合スコアが高くなるのは当然です。
スコアはプロジェクトページに各 libwebp 課題ごとに表示され、Snyk のレポート内でも利用できます。
Snyk の Insights を利用する
Insights を使用している Snyk のお客様は、アプリケーションのコンテキストをさらに活用して、どの問題がより大きなリスクにつながるかを理解することができます。
Insights は、Snyk プラットフォーム全体からデータを集約および相関させ、アプリケーションの 360度ビューを構築します。この表示画面には、アプリケーションの生成に関与するすべてのコンポーネントと、アプリケーションの本番環境での展開方法のコンテキストが含まれます。この表示画面では、問題がお客様の環境に適用可能かどうか、問題を引き起こしているコードがデプロイされているかどうかなどの質問に答えることで、指定された libwebp の問題がもたらすリスクをインサイトがより適切に評価できるようにします。
Insights タブを開き、ページ上部の CVE フィルタとファネルを使用して、プロジェクト内で最もリスクの高い libwebp の問題にすばやく焦点を絞ります。
以下の例では、2つの libwebp の問題が、使用中のオペレーティングシステムに適用可能であるとしてフラグが立てられ、インターネットへのパスが設定されている本番環境にデプロイされたコンテナに関連付けられているため、リスクが高くなっています。
リスクがどのように導入され、それがアプリケーションとどのように関連しているかを正確に理解するには、「エビデンス」グラフを開いて、より詳細な背景を確認してください:
Insightsの詳細、設定方法、使用方法については、オンラインドキュメントを参照してください。
libwebpの脆弱性を修正する方法
コンテナ ベース イメージの libwebp を修正
ベースイメージを、脆弱性が修正された新しいタグに更新してください。必要な修正を伴う修正プルリクエストは、サポートされているエコシステムに対して Snyk 内から直接トリガーできます。
例えば、SnykはUIやCLI経由で代替のコンテナベースイメージを推奨し、GitHubなどのSCM経由でソースコードリポジトリをインポートすると、DockerfileのFROM
エントリを更新するプルリクエストを上げることでコンテナイメージの修正を自動化できます:
Snyk Containerでは、ほとんどのDocker Hub公式ベースイメージについて、修正が公開され次第、修正を推奨します:
Testing python:3.11.1-bullseye...
…
Base image: python:3.11.1-bullseye
Tested 427 dependencies for known issues, found 395 issues.
Base Image Vulnerabilities Severity
python:3.11.1-bullseye 395 7 critical, 22 high, 71 medium, 295 low
Recommendations for base image upgrade:
Minor upgrades
Base Image Vulnerabilities Severity
python:3.12.0rc3-bullseye 300 1 critical, 2 high, 2 medium, 295 lowpython:3.11.5-bullseye 300 1 critical, 2 high, 2 medium, 295 low
Alternative image types
Base Image Vulnerabilities Severity
python:3.12.0rc2-slim-bullseye 63 0 critical, 0 high, 0 medium, 63 low
python:3.12.0rc2-slim 41 0 critical, 0 high, 1 medium, 40 low
python:3.12.0rc1-slim-bookworm 41 0 critical, 0 high, 1 medium, 40 low
python:3.11.4-bookworm 175 1 critical, 1 high, 3 medium, 170 low
CおよびC++プロジェクトにおけるlibwebpの修正
プロジェクト内の `webmproject/libwebp` 依存関係をバージョン 1.3.2 以降に更新し、アプリケーションを再構築してください。
‘libwebp’ 脆弱性への対応における次のステップ
この記事で説明した方法を使用して、Snyk でプロジェクトをテストしてください。まず、無料の Snyk アカウントにサインアップし、インポート・ウィザードを使用して、影響を受ける可能性のあるすべてのプロジェクトをインポートしてスキャンします。
優先度スコアリングまたは Insights (Snyk Enterprise プランをご利用のお客様向け) を使用して、libwebp 脆弱性に対する最優先の修正プログラムを特定します。
オープンソース・プロジェクトの依存関係またはコンテナ・イメージで、‘libwebp’ ライブラリをバージョン1.3.2以降に更新して、修正を適用してください。
引き続きこの状況を注視し、X(@snyksec)で私たちをフォローしていることを確認し、何か進展があればSnyk のブログをチェックしてください。Snyk のセキュリティチームは、定期的にリソースを更新し、最新情報をアップデートします。