アプリで WebView SSL エラーハンドラの通知を処理する方法

この記事は、WebViewClient.onReceivedSslError ハンドラの安全でない実装を使用するアプリのデベロッパーを対象としています。

状況

1 つ以上のアプリに onReceivedSslError ハンドラの安全でない実装が含まれているため、アプリが中間者攻撃に対して脆弱になります。攻撃者が、影響を受ける WebView のコンテンツを変更したり、送信されるデータ(ログイン認証情報など)を読み取ったり、JavaScript を使ってアプリ内のコードを実行したりするおそれがあります。詳しくは Play Console の通知をご覧ください。Play Console に表示された期限を過ぎてもセキュリティの脆弱性が修正されていないアプリは、Google Play から削除される場合があります。

必要な対応

  1. Play Console にログインし、[アラート] セクションで該当するアプリや問題の解決期限を確認します。
  2. 該当のアプリを更新し、脆弱性を修正します。
  3. 該当するアプリの更新バージョンを送信します。

再送信すると、アプリは再度審査されます。審査には数時間ほどかかることがあります。アプリが審査に合格して正常に公開された場合は、これ以上の対応は不要です。アプリの審査が不合格となった場合は、新しいバージョンのアプリは公開されず、通知メールが届きます。

その他の詳細

  1. 問題を修正するには、アプリのコードを更新して、サーバーから提示される証明書が予期されたとおりである場合に必ず SslErrorHandler.proceed() を呼び出し、それ以外の場合は SslErrorHandler.cancel() を呼び出すようにします。証明書の有効性を確認する際は、次の点にご注意ください。
    1. アプリに証明書の有効性の確認が十分に含まれていない場合はフラグが付きます。たとえば、getPrimaryError の戻り値を確認するだけでは、証明書の有効性を確立するのに十分ではありません。

    2. ほとんどの場合、SslError.getPrimaryError によって返される SSL エラーを無視するのは安全ではありません。getPrimaryError は、一連のエラーの中で最も重大なエラーを返します。そのため、getPrimaryError() != SSL_UNTRUSTED が true の場合、接続で発生する SSL_UNTRUSTED エラーが引き続き一連のエラーに含まれる可能性があります。

  2. 使用しているサードパーティ ライブラリがこの問題の原因である場合は、該当のサードパーティに連絡し、この問題の解決についてサポートを依頼してください。

SSL エラーハンドラについて詳しくは、Android Developers ヘルプセンターのドキュメントをご覧ください。その他の技術的なご質問については、https://www.stackoverflow.com/questions に「android-security」および「SslErrorHandler」というタグを使用してご投稿ください。

この問題が WebView SSL を使用するすべてのアプリに必ずしも影響するわけではありませんが、常に最新のセキュリティ パッチをすべて適用することをおすすめします。セキュリティ侵害の危険がある脆弱性を含むアプリは、デベロッパー販売 / 配布契約の第 4.4 項とコンテンツ ポリシーに違反する「危険なプロダクト」と判断される場合があります。

サポートのご案内

この脆弱性に関する技術的なご質問は、Stack Overflow に投稿してください。その際には「android-security」タグをご使用ください。この問題を解決するにあたって手順にご不明な点がある場合は、デベロッパー サポートチームにお問い合わせください。

この情報は役に立ちましたか?
改善できる点がありましたらお聞かせください。