サンプルアプリの脆弱性説明

サンプルアプリの脆弱性

サンプルアプリ「06ギャラリー」に存在している脆弱性について詳しく説明します。
具体的にどのような実装が脆弱性につながっているのか、ソースコードを確認してみましょう。

脆弱性のあるソースコード

プロジェクト ComponentContentProvider
ソースファイル AndroidManifest.xml
<uses-sdk
    android:minSdkVersion="10"
    android:targetSdkVersion="10"/>

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >

    <!-- ▼▼▼脆弱性のあるソースコード▼▼▼ -->
    <provider android:name=".PictureProvider"
              android:authorities="jp.go.ipa.sample.component.contentprovider"/>
    </provider>
    <!-- ▲▲▲脆弱性のあるソースコード▲▲▲ -->

脆弱性の原因となっている処理は以下の点です。
  • データ全体を公開している
    Android4.1以前の環境では、ContentProviderにandroid:exported属性を設定しない場合の初期値はtrueになります。そのため、他の全てのアプリからContentProviderへアクセス可能な状態になっています。
    また、android:exported属性による公開設定は、ContentProviderが管理するデータに対する読み込み、書き込みが全て可能になります。
    このため、想定外のアプリからデータを削除されてしまいました。
    他のアプリに対してデータを公開する場合には、相手のアプリに対してどのような操作を許すのかを慎重に検討し、それに見合った適切なアクセス制限を行うべきです。

次は、脆弱性の修正方法について説明します。