Skip to main content

WebPの重大なゼロデイ脆弱性 CVE-2023-4863がソフトウェアエコシステム全体に影響

feature insights context

2023年9月28日

0 分で読めます

クイックリンク

今月、Apple Security Engineering and Architecture(SEA)とトロント大学Munk SchoolのThe Citizen Labは、悪意を持って細工されたCritical画像に関連するWebPな脆弱性を2件公開しました。この脆弱性はChromeブラウザに加え、Googleのwebmproject/libwebpライブラリの悪用にも利用される可能性があります。

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でしたが、割り当てを担当するCVE採番機関であるGoogleにより、重複として2023年9月27日に後日取り下げられました。

WebPライブラリlibwebpで確認された脆弱性は、ブラウザだけでなく、Chromeを基盤とするアプリケーション(例:1Password for macOS)にも影響します。libwebpライブラリは多くのオペレーティングシステムや、人気のElectronフレームワークなどのアプリケーションフレームワークで、.webp画像のレンダリングに使われているため、特に重大です。そのため、libwebpの脆弱性は、Pillowを含む汎用ソフトウェアや、ffmpeg、Gimpなどのアプリケーションにも及びます。これらのアプリケーションやソフトウェアコンポーネントの一部は、コンテナイメージにバンドルされている点にもご注意ください。

バージョン0.5.0から1.3.1まで(両バージョンを含む)のwebmproject/libwebpが影響を受けます。脆弱性を修正するには、オペレーティングシステムとソフトウェアプロジェクトで、少なくとも1.3.2以降のバージョンを必須にする必要があります。ただし、libwebpは、バンドルしている他のソフトウェアを通じて間接的に使われることがほとんどであり、これが脆弱性の影響をソフトウェアエコシステム全体に広げています。

Googleをはじめとするベンダー各社は、最初のCVEへの対応として、主要ブラウザ向けの修正を速やかにリリースしました。 

Snykはこの脆弱性を監視しており、新しい情報が入り次第この記事を更新します。また、最新情報が得られ次第、Snyk Vulnerability Databaseも更新します。プロジェクトの安全を保つため、定期的なスキャンを引き続き実行してください。今回のlibwebpの脆弱性は、アプリケーションやコンテナイメージの脆弱性スキャンが重要であり、ソフトウェアサプライチェーンを安全に保つために頻繁に実施すべきことを改めて示しています。

最新ニュースや進展については、この記事を再度ご確認いただくか、X(@snyksec)でフォローしてください。詳しくは、以下をお読みください。

EPSSはEPSSモデルの出力を直接スコア化したものです。このスコアは、実環境における悪用の脅威を総合的に示します。パーセンタイルは、既知のすべてのEPSSスコアと比較したEPSSの確率を表します。この場合、CVE-2023-4863が悪用される確率は、評価済みの脆弱性全体の97%を上回っています。つまり、悪意のある攻撃者に悪用される可能性が、ほとんどの脆弱性よりも高いということです。このデータは、利用可能な最新バージョンのEPSSモデルに基づき、毎日更新されます。詳しくはEPSSのドキュメントをご覧ください。

libwebpを使っているのは?

高水準のプログラミング言語でも基盤となるlibwebpライブラリが使われていることが多いため、この脆弱性は開発者のエコシステム全体に広がっている可能性があります。たとえば、2D・3Dゲームの開発に使われるGoDot Game Engineはlibwebpライブラリに依存しており、広く使われているFFmpegユーティリティもlibwebpライブラリを使用しています。 

この脆弱性は、.webp画像コーデックを利用してコンテンツをレンダリングするソフトウェアコンポーネント(ブラウザ、デザインツールなど)に影響する可能性があるため、セキュリティ専門家はアプリケーション全体での利用状況を引き続き調査しています。

libwebpの脆弱性について

libwebpライブラリは、.webp形式の画像を処理します。Googleが10年以上前に開発したもので、.webp画像をレンダリングするほとんどのアプリケーションで使用されています。悪意を持って細工された.webpのロスレスファイルを使って脆弱性が悪用され、脆弱なライブラリでバッファオーバーフローが発生する可能性があります。

この脆弱性を悪用した攻撃は、サービス拒否(DoS)からリモートコード実行(RCE)に及ぶ可能性があります。たとえば、関連性の高いゼロデイ攻撃であるBLASTPASS(AppleのCVE-2023-41064、CVE-2023-41061)では、iMessage経由で送信された悪意のある.webp画像により、端末の所有者が操作しなくても被害者のiOSデバイスが侵害される可能性が示されました。

詳しい分析や概念実証の例へのリンクは、Snyk Vulnerability Databaseのページをご覧ください。

Snykでlibwebpの脆弱性を検出する

Snykを使ってlibwebpの脆弱性を検出する方法はいくつかあります。Snyk CLIを使ってプロジェクトをローカルでテストしたり、SCMインテグレーションを使ってプロジェクトをSnykにインポートしたりできます。また、Snykにすでにインポートしたすべてのプロジェクトを対象に、Snykのレポートですばやくlibwebpを検索することもできます。 

Snyk CLIを使ってプロジェクトをテストする

Snyk Containerは、脆弱なバージョンのlibwebpに依存するOSパッケージを検出して通知します。 ウェブインターフェースでコンテナやDockerfileを監視できるほか、CLIコマンドsnyk container testを使って手動でスキャンを実行することもできます。

次の例では、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.

CLIでC++プロジェクトをテストする

Snyk Open Sourceは、C/C++アプリケーションの依存関係にある脆弱なバージョンのlibwebpを検出して通知します。ウェブインターフェースでアプリケーションを監視できるほか、CLIコマンドsnyk test --unmanagedを使ってオープンソースの依存関係を手動でスキャンすることもできます。

$ 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 User Documentationをご覧ください。

SCMインテグレーションを使ってプロジェクトをテストする

対応するSCMインテグレーション(GitHub、Bitbucket、GitLab、Azure Repos)を使ってプロジェクトをSnykにインポートすると、自動的にテストが実行されます。これによりSnykのUIで、プロジェクト内のlibwebpの脆弱性を特定し、優先順位を付け、修正できます。 

Snykのレポートを使って、プロジェクト全体からlibwebpの脆弱性を検出する

Snykのレポート機能を利用できるSnykのお客様(Enterpriseプラン)は、すでにインポートしてSnykで監視しているプロジェクトからlibwebpをすばやく特定できます。Issues Detailsレポートで、CVE-2023-5129 AND CVE-2023-4863をフィルタリングしてください。

オープン中のCVEで絞り込んだSnykの問題詳細レポート。深刻度別の55件の問題と、CVE-2023-4863を含む脆弱性テーブルを表示。

URLをコピーしてチームメンバーとこのビューを共有するか、PDFとしてエクスポートして組織内で広く共有できます。

問題が見つかった場合は、どこで使われているのかを正確に確認できます。該当するプロジェクトをクリックすると、問題の詳細や修正手順を確認できます。

修正の優先順位付け 

プロジェクト内でlibwebpに関する問題が複数見つかる可能性があり、どこから修正すべきか迷うこともあるでしょう。Snykには、優先順位付けを支援する機能がいくつかあります。

Snyk Priority Scoreを使う

Snyk Priority Scoreはさまざまなリスク要因を算出し、優先的に対処すべき問題をすばやく特定できるよう支援します。EPSS、悪用の成熟度、CVSS、ソーシャルトレンドなど、複数のシグナルを計算します。これを使えば、脆弱性の一覧をすばやく絞り込み、適切な順序で修正できます。libwebpの場合、多くのケースでスコアが高くなるのは当然といえるでしょう。 

スコアはProjectsページのlibwebpに関する各問題に表示されるほか、Snykのレポートでも確認できます。

libwebpの脆弱性に対するSnyk優先度スコア

SnykのInsightsを使う

Insightsを利用しているSnykのお客様は、アプリケーションの追加コンテキストを活用して、どの問題がより大きなリスクとなるのかを把握できます。 

InsightsはSnykプラットフォーム全体のデータを集約・相関付けし、アプリケーションの構築に関わるすべてのコンポーネントと、本番環境でのデプロイ方法のコンテキストを含む360°の全体像を作成します。このビューを利用することで、問題が自分の環境に該当するか、問題を引き起こすコードがデプロイされているかなどを確認し、特定のlibwebpの問題がもたらすリスクをより的確に評価できます。 

Insightsタブを開き、ページ上部のCVEフィルターとファネルを使うと、プロジェクト内で最もリスクの高い libwebpの問題をすばやく絞り込めます。 

以下の例では、2件のlibwebp の問題が、使用中のオペレーティングシステムに該当するものとして検出されています。インターネットへの経路が設定された、本番環境にデプロイ済みのコンテナに関連しているため、リスクが高くなっています。

Snykのlibwebp脆弱性に関するインサイトレポートパネルのスクリーンショット

リスクがどのように持ち込まれ、アプリケーションとどう関係しているのかを正確に把握するには、Evidenceグラフを開いて詳細を確認してください。

libwebpの脆弱性に関するSnykのエビデンスグラフのスクリーンショット

Insightsの詳細や設定方法、使い方については、オンラインドキュメントをご覧ください。

libwebpの脆弱性を修正する方法

コンテナのベースイメージに含まれるlibwebpを修正する

脆弱性が修正された新しいタグにベースイメージを更新してください。対応するエコシステムでは、必要な修正を含むプルリクエストをSnykから直接作成できます。

たとえば、SnykはUIまたはCLIで代替となるコンテナベースイメージを推奨します。また、GitHubなどのSCMを通じてソースコードリポジトリをインポートすると、DockerfileのFROMエントリーを更新するプルリクエストを作成し、コンテナイメージの修正を自動化できます。

Snykは代替のコンテナベースイメージを推奨し、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」の脆弱性への対応における次のステップ

  1. この記事で紹介した方法を使って、Snykでプロジェクトをテストしてください。始めるには、Snykの無料アカウントに登録し、インポートウィザードを使って影響を受ける可能性のあるすべてのプロジェクトをインポートしてスキャンします。

  2. 優先度スコアリングまたはInsights(Snyk Enterpriseプランのお客様向け)を使って、libwebpの脆弱性に対する最優先の修正を特定します。

  3. オープンソースプロジェクトの依存関係またはコンテナイメージ内のlibwebpライブラリをバージョン1.3.2以降に更新して、修正を適用します。

  4. 状況の推移を引き続き監視し、X(@snyksec)をフォローしてください。進展があり次第お知らせしますので、Snyk Blogもご確認ください。Snykのセキュリティチームは、最新情報に合わせて関連リソースを定期的に更新します。