Chromiumで発生したバッファオーバーフローが複数のパッケージに影響
2020年11月23日
0 分で読めますSnyk Monthly Vulnerability Profileへようこそ。このシリーズでは、Snykが Security Research Teamによって発見された、または報告を受けた脆弱性を振り返ります。毎月、注目すべき脆弱性を1つ取り上げ、その発見、調査、開示に至るまでの経緯を紹介します。オープンソースコミュニティ全体で、脆弱性の特定と修正に取り組む研究者、開発者、ユーザーにも焦点を当てます。
今月は、Chromiumで使用されているFreeTypeパッケージで発見されたバッファオーバーフローの脆弱性と、脆弱なChromiumコンポーネントを含むことで影響を受けるオープンソースパッケージをSnykが特定した取り組みについて紹介します。
脆弱性:FreeTypeのバッファオーバーフロー
割り当てられたCVE:CVE-2020-15999
Snykアナリスト:複数
発見者:Google Project ZeroのSergei Glazunov
2020年11月2日、Chromiumブラウザーで使用されているFreeTypeフォントレンダリングパッケージで発見されたバッファオーバーフローの脆弱性について、CVE-2020-15999がNational Vulnerability Databaseに公開されました。Chromium Projectのウェブサイトに掲載されたブログ記事によると、この脆弱性の最初の報告は2020年10月19日でした。脆弱性の当初の説明は次のとおりです。
フォントに埋め込まれたPNG画像を処理する関数`Load_SBit_Png`に脆弱性が存在します。この関数は次の処理を行います。
1) ヘッダーから画像の幅と高さを32ビット整数として取得する。
2) 取得した値を16ビットに切り詰め、`TT_SBit_Metrics`構造体に格納する。
3) 切り詰めた値を使ってビットマップのサイズを計算する。
4) そのサイズでバッキングストアを割り当てる。
5) `png_struct`とバッキングストアをlibpng関数に渡す。
問題は、libpngが`png_struct`に保存されている元の32ビット値を使用することです。そのため、元の幅や高さが65535を超える場合、割り当てられたバッファーにビットマップが収まりません。
バッファオーバーフローの脆弱性を悪用すると、攻撃者がヒープメモリを破損または操作できる可能性があります。その結果、脆弱なシステム上で任意のコードを実行させる悪意あるペイロードを攻撃者が作成できるおそれがあります。
オープンソースへの影響を把握する
Snyk Security Research Teamは脆弱性レポートを定期的に監視し、オープンソースコミュニティへの影響が考えられる場合は、その影響を調査しています。Chromiumブラウザーの場合、Chromiumプロジェクトが公開しているコンポーネントは、ウェブ機能を提供するためにオープンソースパッケージで広く利用されています。そのため、バッファオーバーフローの脆弱性が開示されると、Snyk Research Teamは脆弱なバージョンのChromiumコンポーネントを含むオープンソースパッケージの調査を開始しました。
調査の結果、SnykチームはFreeTypeパッケージの脆弱性の影響を受けるパッケージを、複数のエコシステムにわたって6つ特定しました。以下の表に一覧を示します。
パッケージ | エコシステム(パッケージマネージャー) | Snyk脆弱性ID |
cefsharp.wpf.hwndhost | .Net(NuGet) | SNYK-DOTNET-CEFSHARPWPFHWNDHOST-1023310 |
cefsharp.wpf | .Net(NuGet) | SNYK-DOTNET-CEFSHARPWPF-1023309 |
cefsharp.winforms | .Net(NuGet) | SNYK-DOTNET-CEFSHARPWINFORMS-1023307 |
cefsharp.common | .Net(NuGet) | SNYK-DOTNET-CEFSHARPCOMMON-1023308 |
electron | JavaScript(npm) | SNYK-JS-ELECTRON-1021884 |
org.webjars.npm:electron | Java(Maven) | SNYK-JAVA-ORGWEBJARSNPM-1021885 |
特定された4つの.Netコンポーネントは、Chromiumプロジェクトから直接提供されているコントロールです。脆弱性を修正した更新版がリリースされましたが、これらのコンポーネントをアプリケーションやサービスで使用している開発者は、脆弱性を修正するために新しいバージョンへ更新する必要があります。
さらにSnykは、ElectronフレームワークのJavaScript版とJava版の両方が、Chromiumの脆弱なコンポーネントを利用していることを発見しました。Electronは、Discordをはじめとする多くの著名なアプリケーションで使用されている人気のフレームワークです。Electronフレームワークには更新が行われ、10月下旬に新しいバージョンがリリースされました。フレームワークを利用する開発者は、ソフトウェアから脆弱性を取り除くために、新しいバージョンへ更新する必要があります。
振り返り
このバッファオーバーフロー脆弱性の発見に至った経緯は、Snyk Security Research Teamがオープンソースコミュニティ全体のセキュリティ態勢向上に取り組む方法を、また一つ示しています。Chromiumのような広く利用されている脆弱なパッケージが、他のプロジェクトの依存関係としてどこで使われているかを調査することで、欠陥を明らかにし、オープンソースのメンテナーがソフトウェア内で対処できるよう支援します。
また、Snykの脆弱性データベースを可能な限り充実させることにもつながります。これにより、開発者はオープンソースセキュリティを活用し、ソフトウェアの依存関係に脆弱性が含まれている場合に把握できます。
CTFを始めよう
オンデマンドのバーチャル入門ワークショップで、CTFチャレンジの解き方を学びましょう。



