サンプルコード解説

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

それでは、実際に脆弱性のあるソースコードを見てみましょう。
以下のコードは「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);
		// ▲▲▲脆弱性のあるソースコード▲▲▲
	}