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

サンプルアプリの脆弱性

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

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

プロジェクト FileaccessData
ソースファイル RegisterActivity.java
try {
	// ▼▼▼脆弱性のあるソースコード▼▼▼
	// ファイルを開く処理
	outputStream = openFileOutput(STRAGE_FILE_NAME, MODE_WORLD_READABLE | MODE_APPEND);
	// ▲▲▲脆弱性のあるソースコード▲▲▲
脆弱性の原因となっている処理は以下の点です。
  • ファイル作成時のアクセス権設定にMODE_WORLD_READABLEを使用している
    51行目のコードで、サンプルアプリがパスワードを保存するためのファイルを開こうとしています。
    ファイルが存在しない場合は、ファイルを作成しますが、他のアプリからも読み取り可能な「MODE_WORLD_READABLE」モードでファイルを作成しているため、攻撃アプリが情報を盗むことができてしまいました。
    重要な情報を保存するファイルを作成する場合は、他のアプリからはアクセスできないモードで作成することが必要です。
    アクセス制限不備に関する問題は、IPAにも複数報告されています。開発者は重要な情報を保存するファイルの取り扱いに注意しましょう。

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