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

サンプルアプリの脆弱性

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

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

プロジェクト FileaccessSd
ソースファイル MainActivity.java
public void onClickSave(View v) {
	// 入力内容の取得
	String data = csvData.toString();
	FileOutputStream fileOutputStream = null;

	// 既存のファイルを一度削除した後、新たにファイルを作成
	File file = new File(SD_FILE_PATH);
	file.delete();

	file.getParentFile().mkdir();

	try {
           
	// ▼▼▼脆弱性のあるソースコード▼▼▼
    // 書き込み処理を行う
    fileOutputStream = new FileOutputStream(file, true);
    fileOutputStream.write(data.getBytes());
	// ▲▲▲脆弱性のあるソースコード▲▲▲
脆弱性の原因となっている処理は以下の点です。
  • SDカードに重要なデータを保存している
    今回、「電話帳のバックアップ」開発者は、バックアップしたデータをSDカードに保存するように設計しました。しかし、SDカードに保存されるデータは他のアプリからアクセス可能であるため、非常に危険な設計といえます。
    重要なデータを格納するファイルは、内部ストレージに保存しさらに適切なアクセス権の設定が必要です。
    原因は、重要な情報を保存するファイルのアクセス制限が不適切だったことです。開発者はSDカードに保存されるデータのアクセス権の理解を深め、扱う情報に適したファイルの取り扱いを意識するようにしましょう。

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