クロスアプリ スクリプティング

OWASP カテゴリ: MASVS-CODE: コード品質

概要

WebView は、Android アプリに埋め込まれたブラウザ コンポーネントで、 アプリ内でのウェブ コンテンツの表示を容易にします。HTML、CSS、 アプリのユーザー インターフェース内の JavaScript。

クロスアプリ スクリプティングは、悪意のあるコードの実行と広く関連している アプリケーションの問題です。このドキュメントでは、 その対象は、特に悪意あるファイル インジェクションの JavaScript コードを脆弱な WebView に組み込む。

アプリが十分な検証やサニタイズを行わずに、悪意のある JavaScript を WebView に受け入れると、アプリはクロスアプリ スクリプティングに対して脆弱になります。

影響

クロスアプリ スクリプティングの脆弱性は、攻撃者が制御する場合に悪用される JavaScript コンテンツが、脆弱性のあるアプリの WebView に渡される際、 検証またはサニタイズされます。その結果、攻撃者が提供した JavaScript コードが、被害を受けたアプリの WebView のコンテキストで実行されます。悪意のある JavaScript コードは、被害を受けたアプリと同じ権限を使用できるため、機密性の高いユーザーデータの盗難やアカウントの不正使用につながる可能性があります。

リスクの軽減

JavaScript を無効にする

アプリで JavaScript が不要な場合は、無効にすることで脅威にならないようにします。

Kotlin

// Get the WebView Object
val webView = findViewById<WebView>(R.id.webView)
val webSettings = webView.settings

// Disable JavaScript
webSettings.javaScriptEnabled = false

Java

// Get the WebView Object
WebView webView = (WebView) findViewById(R.id.webView);
WebSettings webSettings = webView.getSettings();

// Disable JavaScript for the WebView
webSettings.setJavaScriptEnabled(false);

アプリケーションで JavaScript が必要な場合は、 WebView に渡される JavaScript。WebView が任意の JavaScript を実行しないようにします。次のセクションのガイダンスをご覧ください。

想定されるコンテンツのみが WebView に読み込まれるようにする

shouldOverrideUrlLoading()loadUrl()evaluateJavascript() などのメソッドを使用する場合は、渡された URL がチェックされていることを確認してください。,前述のように、WebView に渡される JavaScript は、想定されるドメインからのみ取得される必要があります。そのため、何が読み込まれているかを検証することが重要です。

OWASP の入力検証に関するドキュメントとこちらの Android をご確認ください セキュリティチェックリストをご覧ください。

WebView の安全なファイル アクセスを設定する

ファイルにアクセスできないようにすれば、任意の JavaScript によるアクセスを 次の WebSettings を ファイル・アクセスを保護する場合に考慮すべきことです。

  • ファイル アクセスを無効にします。デフォルトでは、setAllowFileAccessTrue に設定されています。 API レベル 29 以前: ローカル ファイルへのアクセスを許可します。API レベル 30 以降では、デフォルトは False です。ファイルへのアクセスが許可されないようにするには、 setAllowFileAccess を明示的に False に設定する
  • コンテンツ アクセスを無効にします。setAllowContentAccess のデフォルト設定は True です。コンテンツ URL アクセスにより、WebView はシステムにインストールされているコンテンツ プロバイダからコンテンツを読み込むことができます。アプリでコンテンツへのアクセスが不要な場合は、setAllowContentAccessFalse に設定して、クロスアプリ スクリプト攻撃が発生した場合の不正使用を防ぎます。

  • kotlin kotlin webView.settings.javaScriptEnabled = false webView.settings.domStorageEnabled = true webView.settings.allowFileAccess = false webView.settings.allowContentAccess = false

  • Java java webView.getSettings().setJavaScriptEnabled(false); webView.getSettings().setDomStorageEnabled(true); webView.getSettings().setAllowFileAccess(false); webView.getSettings().setAllowContentAccess(false);

セーフ ブラウジングを有効にする

AndroidManifest.xml でセーフ ブラウジングを有効にすると、 フィッシングまたは悪意のあるドメイン用の WebView:

<meta-data android:name="android.webkit.WebView.EnableSafeBrowsing"
   android:value="true" />

リソース