トレンドマイクロは8月18日、Android端末の標準コンポーネント「Mediaserver」に存在する新たな脆弱性「CVE-2015-3842」を確認したとセキュリティブログで明かした。この脆弱性を悪用する攻撃者は、Mediaserver プログラムが標準として備えるパーミッションと同等のパーミッションで任意のコードを実行できる可能がある。

脆弱性はAndroidのバージョン2.3~5.1.1が影響を受ける。Googleは「Android Open Source Project (AOSP)」を通じて、この脆弱性に関する詳細な情報と修正プログラムを公開した。2015年8月17日時点、この脆弱性を悪用した攻撃は確認されていない。

この脆弱性は、Mediaserver プログラムのコンポーネント「AudioEffect」に存在している。コンポーネントは、クライアント(通常はアプリ)から送信される未確認の変数を使用する。

攻撃を開始するために、攻撃者はアプリをユーザにインストールさせる。このアプリはパーミッションを必要としないため、ユーザーにセキュリティ上問題がないと思われている。

どのようなパーミッションも必要としないPoC(概念実証型エクスプロイト。実際に有効な攻撃ができることを実証している攻撃コード)のアプリ

脆弱性は「pReplyData」および「pCmdData」のバッファサイズの確認に誤りがあることに起因する。「pReplyData」と「pCmdData」のバッファサイズ、およびバッファ「pCmdData」自体はすべてクライアントから提供されるパラメータで、Mediaserver コンポーネントは、これらのバッファを使用するため、バッファ「pCmdData」からサイズを読み込む。

Mediaserver コンポーネントは、「pReplyData」および「pCmdData」のバッファサイズがこのサイズより大きいと仮定する。しかし、バッファ「pCmdData」から読み込まれるサイズよりも小さい、クライアントから提供される「pReplyData」のバッファサイズを作成することができる。これがヒープオーバーフローの原因となる。

同社では、脆弱性を抱えるAndroidのバージョン5.1.1のソースコードファイルで検証し、脆弱性を抱えたファイルが「EffectBundle.cpp」であることがわかった。

ヒープオーバーフローが発生する部分

脆弱性を抱えるもう 1つのファイルは「EffectReverb.cpp」。

ヒープオーバーフローが発生する部分

また、「Proof-of-concept(概念実証型エクスプロイト。実際に有効な攻撃ができることを実証している攻撃コード)」の実証を行うため、ヒープ領域のバッファ「pReplyData」をオーバフローさせ、Mediaserver コンポーネントをクラッシュさせるアプリを作成した。下の画像はJava で記述したPoCのソースコードの一部。

オブジェクトから「mNativeAudioEffect」を取得

下の画像はC++ で記述した PoC のソースコードで、Javaによって呼び出される。

不正なコードを Mediaserver に送信

PoCは、アプリが実行されていると、Mediaserver コンポーネントはランダムな関数でクラッシュする。Mediaserver コンポーネントがクラッシュしなければ、PoC のアプリは終了し、再起動する可能性がある。下の画像はクラッシュレポートのログの一部。

クラッシュレポートのログ

攻撃者は、Mediaserver プログラムが標準として備えるパーミッションと同等のパーミッションでコード実行が可能。Mediaserver コンポーネントは、写真撮影や MP4ファイルの読み込み、動画の撮影といったメディアに関する作業を多く実行するため、ユーザのプライバシーが危険にさらされる恐れがある。Android のカスタマイズバージョンであっても、Mediaserverコンポーネントが変更されていない端末は影響を受ける。

ユーザが直面する問題は、攻撃を受けた時に原因を特定するのが難しいということ。今回のPoCの実証では、アプリを実行して攻撃したが、現実的には容易に検出されるアプリは攻撃に利用されることは少ない。不正アプリは、正規のように装い、動的に読み込ませる技術を利用して、数カ月後など継続的または断続的に攻撃を実行するまで身を潜めているためだ。