安全でない HostnameVerifier

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

概要

HostnameVerifier の実装は、サーバーの証明書のホスト名がクライアントが接続しようとしているサーバーのホスト名と一致することを確認する役割を担います。

Android アプリでの安全でない HostnameVerifier 実装とは、アプリが通信しているサーバーのホスト名を適切に検証しない実装です。これにより、攻撃者は正規のサーバーになりすまし、アプリに誤認させてセンシティブ データを攻撃者に送信させることができます。

この脆弱性は、HostnameVerifier クラスにある関数呼び出しで、X.509 証明書のホスト名の検証がスキップされ、代わりに証明書のハッシュのみが検証されることに起因します。SSLSession#isValid 関数はセキュリティ関連のオペレーションを行うとよく誤解されますが、実際の目的は、セッションが有効で再開や参加が可能かどうかを確認することであり、セッションのセキュリティは検証しません。HostnameVerifier クラスは NetworkSecurityConfig に置き換えられています。

影響

安全でない HostnameVerifier の実装により脆弱性が悪用され、被害を受けたアプリからネットワーク トラフィックへの中間者(MiTM)攻撃が行われるおそれがあります。この安全でないコードの悪用の影響として、コードがトリガーされた場合、ユーザーのアプリ ネットワーク データがネットワーク攻撃者(リモートまたはローカル)によって侵害される可能性があります。その影響は、意図せず公開されてしまうネットワーク トラフィックの内容(個人情報、非公開情報、機密性の高いセッション値、サービス認証情報など)によって異なります。

リスクの軽減

NetworkSecurityConfig.xml 機能を使用して、カスタムの TLS / SSL 証明書の検証コードを使用または実装せずに、すべての本番、テスト、デバッグ、開発の各ステージの接続が適切に処理されるようにします。

参考資料