それでは、実際に脆弱性のあるソースコードを見てみましょう。
以下のコードは、画面に入力された契約番号とログインパスワードを取得し、それを他のActivityに渡して起動している処理ですが、重要な情報をログに出力しているという脆弱性があります。
具体的には下記2つの情報をログに出力しています。
(1)利用者が入力した契約番号とログインパスワードの情報
(2)ログインに使用する情報
これらの情報が悪意のあるアプリに取得された場合、ログに出力された情報を利用してなりすましが可能になります。
プロジェクト |
OutputLog |
ソースファイル |
MainActivity.java |
public void onClickLogin(View v) {
// 入力された契約番号とパスワードの取得
String id = ((EditText) findViewById(R.id.edittextId)).getText().toString();
String pass = ((EditText) findViewById(R.id.edittextPass)).getText().toString();
// 未入力項目がある場合はメッセージ表示
if ("".equals(id) || "".equals(pass)) {
Toast.makeText(this, "入力内容に不備があります", Toast.LENGTH_LONG).show();
return;
}
// 入力内容をログに出力する
String log = "ID:" + id + " PASS:" + pass;
// ▼▼▼脆弱性のあるソースコード▼▼▼
// ログ出力
Log.v(getPackageName(), log);
// ▲▲▲脆弱性のあるソースコード▲▲▲
Intent intent = new Intent(this, MenuActivity.class);
// URLにトークン情報を設定
String param = String.format("%s?token=%s", URL_ONLINEBANK, getToken(id ,pass));
// ▼▼▼脆弱性のあるソースコード▼▼▼
// 情報を暗黙的Intentに設定
intent.setData(Uri.parse(param));
// ▲▲▲脆弱性のあるソースコード▲▲▲
startActivity(intent);
}
|