「Apache Cordova」に存在する脆弱性を確認、Androidアプリを簡単に改変できる恐れ

トレンドマイクロは、オープンソースモバイル開発フレームワーク「Apache Cordova」に存在する脆弱性を確認しました。攻撃者は、この脆弱性を利用することにより、被害者に攻撃コードを含んだ Webページを閲覧させるだけで、アプリの動作を改変することが可能になります。この改変の範囲は、アプリのユーザを不愉快にさせるものから、アプリを完全に機能不全させるものまでに及びます。

この問題の脆弱性「CVE-2015-1835」は非常に深刻な脆弱性であり、Apache Cordova のバージョン 4.0.1.までのすべてのバージョンに影響を与えます。Apache はセキュリティ情報を公開して、この脆弱性を確認しました。Google の公式アプリストア「Google Play」の全アプリ の 5.6% を占める Cordova をベースにしたアプリの大半がこの脆弱性を利用した攻撃を受ける可能性があります。

この脆弱性は、基本の Activity で二次的な環境変数(preference)を intent bundle から設定する Cordova の機能に存在します。この機能は、2010年11月に Apache が公開したコード更新の一部(Github では commit として知られる)で、Cordova Android はバージョン 0.9.3 に更新されました。

弊社の調査によると、この基本の Activity が適切に保護されておらず、preference が初期値の設定だった場合、攻撃者はこれらの preference を変更し、アプリの外観や動作を改変することができます。

■攻撃が成功するための必要条件
この脆弱性を利用した攻撃が成功するためには、以下の 2つの条件を必要とします。

  1. CordovaActivity もしくは Config.java といった Cordovaフレームワークを設定した Cordovaの基本の Activity から拡張したアプリのコンポーネントの少なくとも 1つが適切に保護されておらず、アプリの外部からアクセスできる
  2. Cordova がサポートする preference(Loglevel および ErrorUrl を除く)の少なくとも 1つが環境設定ファイル “config.xml” で定義されていない

■脆弱性を利用した攻撃手法
この脆弱性を利用した攻撃がどのように実行されるかを理解するために、preference がどのようにアプリで設定されているかを見てみましょう。

preference としても知られる二次的な環境変数は、アプリを設定する開発者のために用意された環境変数のセットです。Cordova をベースにしたアプリに内蔵された特性で、アプリの開発者のみが制御できることになっています。ランタイムの初期化中に変数が改ざんされると、間違いなくアプリの通常の動作に問題を引き起こします。

Android上のバージョン 4.0.1 までのApache Cordovaフレームワークは、以下の preference をサポートします。

  • Fullscreen
  • DisallowOverscroll
  • BackgroundColor
  • Orientation
  • KeepRunning
  • LoadUrlTimeoutValue
  • SplashScreen
  • SplashScreenDelay
  • InAppBrowserStorageEnabled
  • LoadingDialog
  • LoadingPageDialog
  • ErrorUrl
  • ShowTitle
  • LogLevel
  • SetFullscreen
  • AndroidLaunchMode
  • DefaultVolumeStream

これらの preference は Cordovaフレームワークの “config.xml” で明示的に設定されているか、定義されずに暗黙的に初期値に紐づけられています。多くの開発者が後者を選択していることに注目することが重要です。なぜなら、すべての preference はアプリに必要ないからです。preference が “config.xml” で明示的に設定されなければ、Cordovaフレームワークは基本の Activityで intent bundle から設定します。

図1:アプリは intent bundle を読み込み、CordovaActivity で初期化中に preference にそれをコピーする
図1:アプリは intent bundle を読み込み、CordovaActivity で初期化中に preference にそれをコピーする

図2:
図2:”config.xml” に preference の値がない場合、アプリは bundle からその値を読み込む

通常、このハイブリッドのフレームワークを動作させるために、アプリに CordovaActivity を拡張するようアプリ開発者は指示されます。

図3:Webページを起動するための CordovaActivity から拡張されたサブクラス
図3:Webページを起動するための CordovaActivity から拡張されたサブクラス

残念ながら、今回の事例でアプリを攻撃から脆弱にしているものは、この共通の開発者ガイドです。Activity が拡張されるということは、アプリの外部からのアクセスを可能にすることを意味します。そのため、攻撃者は不正な intent bundle を Activity に挿入し、遠隔の Webサーバからでも、ローカルの改変されたアプリからでも、アプリに内蔵された特性を不正に変更することが可能になります。

弊社では、LogLevel と ErrorUrl を除く、すべての preference がこの脆弱性を利用した攻撃に受ける可能性があることを確認しました。Cordovaフレームワークは、この 2つの preference に関しては、特別な方法でこの脆弱性の影響を受けないように扱っています。

弊社は、この脆弱性は非常に攻撃に利用されやすいと考えています。なぜなら攻撃の成功に必要とされる条件は、開発者が一般に実行しているものだからです。ほとんどの Cordovaをベースにしたアプリが CordovaActivity を拡張しており、環境設定ですべての preference を明示的に定義しているアプリはほとんどありません。さらに、「Cordova コマンド・ライン・インターフェイス(CLI)」から作成されたすべての Cordova ベースのアプリは、上述した攻撃の成功に必要な条件と自動的に合致しており、そのため、こうしたアプリのほとんどが脆弱性を抱えていることになります。

■「Proof-of-concept(PoC、概念実証型エクスプロイト)」
弊社は、典型的なリモート intent インジェクション攻撃のデモを作成しました。これは、2014年3月に公開された脆弱性を利用したものです。この脆弱性は「Intent スキーム URL」と呼ばれ、Android端末「Huawei T950E」で確認されました。

以下は、遠隔のサーバに置かれた HTML のコードです。

図4:遠隔のサーバに置かれた HTML のコード
図4:遠隔のサーバに置かれた HTML のコード

この端末のストックブラウザのページにアクセスするだけで、ローカルで設計された Cordovaベースのアプリに、タイル表示やテキストメッセージと共に不愉快なメッセージを挿入できます。以下のデモの動画では、その動作をご確認いただけます。

また、弊社では他の preference を変更し、以下の各事例のデモ動画を作成しました。

  • SplashScreen および SplashScreenDelay を変更し、「res/drawable」配下のリソースで Cordovaベースのアプリにスプラッシュスクリーンを挿入し、表示時間を自由に設定する
  • BackgroundColor を変更して、Cordovaベースのアプリの背景色を変える
  • SetFullScreen を変更して、Cordovaベースのアプリの表示設定を変更する
  • DefaultVolumeStream を変更して、音量ボタンコントローラの基本機能を変更する(初期設定の音声通話の管理からメディアの管理に変更する)

弊社ではまた、特定のデータを intent bundle に挿入することにより、Cordovaベースのアプリを遠隔から機能不全にすることが可能であることも確認しています。

adb shell am start -n com.trendmicro.justademo/.MainActivity --es backgroundcolor ffffff

この攻撃は Cordovaフレームワークに例外を発生させ、アプリを強制的に終了させます。

図5:アプリを機能不全にする脆弱性を利用した攻撃
図5:アプリを機能不全にする脆弱性を利用した攻撃

■想定される影響
弊社はこれまでに、この脆弱性を利用した攻撃により、Cordova をベースにしたアプリとそのユーザは以下のような影響を受ける可能性があることを確認しています。

  1. アプリの外観の変更
  2. ポップアップ表示やメッセージの挿入
  3. スプラッシュスクリーンの挿入
  4. 基本機能の変更
  5. アプリの機能不全

攻撃者はこれらの改変を利用して、例えば、改変したアプリに嘘のメッセージを表示させて利用者をだますことができます。この脆弱性はアプリに影響を与えるだけではありません。Apache Cordova のサードパティから提供されている何千というプラグインも攻撃を受ける大きな危険性があります。それは特にこれらの機能が preference に大きく依存しているためです。

■トレンドマイクロの対策
弊社はこの脆弱性について Apache に非公開で報告し、Apache ではこの脆弱性に関するセキュリティ情報を公開しました。Androidアプリの開発者は、Cordovaフレームワークを最新のバージョン 4.0.2 に更新して再構築し、新たに公開して下さい。これにより、この脆弱性を利用した攻撃によりアプリが改変されるのを防ぐことができます。

参考記事:

 翻訳:品川 暁子(Core Technology Marketing, TrendLabs)