それでは、実際に脆弱性のあるソースコードを見てみましょう。
以下のコードは「AndroidManifest.xml」内のBroadcastReceiverの宣言です。この例では、暗黙的Intentを受信できるようにIntentFilterを設定しています。
プロジェクト |
ComponentBroadcast |
ソースファイル |
AndroidManifest.xml |
<receiver
android:name="jp.go.ipa.sample.component.broadcast.MessageReceiver">
<!-- ▼▼▼脆弱性のあるソースコード▼▼▼ -->
<intent-filter>
<action android:name="sampleapp.message.receiver"/>
</intent-filter>
<!-- ▲▲▲脆弱性のあるソースコード▲▲▲ -->
</receiver>
|
次に、Broadcastを発行する側のアプリのソースコードを見てみましょう。
以下は、BroadcastReceiverへ暗黙的Intentを発行する処理の部分です。
プロジェクト |
ComponentBroadcastSender |
ソースファイル |
MainActivity.java |
/*
* 送信ボタンタップ
*/
public void onClickSend(View v) {
// 送信先の取得
ListView listFriend = (ListView) findViewById(R.id.listFriend);
int pos = listFriend.getCheckedItemPosition();
// 送信先が指定されていない場合は以降の処理は行わない
if (pos < 0) {
Toast toast = Toast.makeText(this, "送信先を選択してください", Toast.LENGTH_SHORT);
toast.setGravity(Gravity.AXIS_CLIP, 0, 0);
toast.show();
return;
}
String pictureName = (String) listFriend.getItemAtPosition(pos);
// ▼▼▼脆弱性のあるソースコード▼▼▼
// 暗黙的Intentを使用
Intent intent = new Intent("sampleapp.message.receiver");
intent.putExtra("pictureName", pictureName);
sendBroadcast(intent);
// ▲▲▲脆弱性のあるソースコード▲▲▲
}
|