フィードバックのお願い: プライベート ネットワーク用の CORS(RFC1918)

クライアントの内部ネットワーク上のデバイスとサーバーが意図せずウェブ全体に公開されるリスクを軽減します。

悪意のあるウェブサイトがプライベート ネットワークでホストされているデバイスやサーバーにリクエストを送信することは、長らく脅威となってきました。たとえば、攻撃者はワイヤレス ルーターの構成を変更して、 Man-in-the-Middle 攻撃を可能にする可能性があります。CORS-RFC1918 は、ブラウザでこのようなリクエストをデフォルトでブロックし、内部デバイスがパブリック インターネットからのリクエストをオプトインすることを義務付ける提案です。

この変更がウェブ エコシステムに与える影響を把握するため、Chrome チームはプライベート ネットワーク用のサーバーを構築するデベロッパーからのフィードバックを求めています。

現状の問題点

多くのウェブサーバーはプライベート ネットワーク内で実行されています。ワイヤレス ルーター、プリンタ、イントラネット ウェブサイト、エンタープライズ サービス、モノのインターネット(IoT)デバイスはその一部にすぎません。 これらのサーバーは、一般公開されているサーバーよりも安全な環境にあるように見えるかもしれませんが、ウェブページをプロキシとして使用する攻撃者によって悪用される可能性があります。たとえば、悪意のあるウェブサイトに URL を埋め込むと、被害者が(JavaScript が有効なブラウザで)その URL を表示するだけで、被害者の家庭用ブロードバンド ルーターの DNS サーバー設定を変更しようとします。このタイプの攻撃は 「ドライブバイ ファーミング」と呼ばれ、 2014 年に発生しました。 30 万台以上の脆弱なワイヤレス ルーターが、DNS 設定を変更され、攻撃者がユーザーを悪意のあるサーバーにリダイレクトできるように悪用されました。

CORS-RFC1918

同様の攻撃の脅威を軽減するため、ウェブ コミュニティは CORS-RFC1918RFC1918で定義されたプライベート ネットワークに特化したクロスオリジン リソース シェアリング(CORS))を導入しています。

CORS を実装するブラウザは、別のオリジンから読み込んでも問題ないかどうかをターゲット リソースに確認します。これは、アクセスを説明する追加のヘッダーをインラインで使用するか、プリフライト リクエストと呼ばれるメカニズムを使用することで実現されます。詳しくは、クロスオリジン リソース シェアリング をご覧ください。

CORS-RFC1918 では、サーバーが CORS と HTTPS を使用して明示的に許可しているリソースを除き、ブラウザはデフォルトでプライベート ネットワーク経由のリソースの読み込みをブロックします。これらのリソースにリクエストを送信するウェブサイトは CORS ヘッダーを送信する必要があり、サーバーは対応する CORS ヘッダーで応答することで、クロスオリジン リクエストを受け入れることを明示的に示す必要があります。(正確な CORS ヘッダー は現在開発中です)。

このようなデバイスやサーバーのデベロッパーは、次の 2 つを行う必要があります。

  • プライベート ネットワークにリクエストを送信するウェブサイトが HTTPS で提供されていることを確認します。
  • CORS-RFC1918 のサーバー サポートを設定し、想定される HTTP ヘッダーで応答します。

どのようなリクエストが影響を受けますか?

影響を受けるリクエストは次のとおりです。

  • パブリック ネットワークからプライベート ネットワークへのリクエスト
  • プライベート ネットワークからローカル ネットワークへのリクエスト
  • パブリック ネットワークからローカル ネットワークへのリクエスト

プライベート ネットワーク IPv4 の RFC1918 のセクション 3 で定義されているプライベート アドレス空間に解決される宛先、マッピングされた IPv4 アドレス自体がプライベートである IPv4 マップ IPv6 アドレス、または ::1/1282000::/3ff00::/8 サブネット外の IPv6 アドレス。

ローカル ネットワーク IPv4 のRFC1122 のセクション 3.2.1.3 で定義されている「ループバック」空間(127.0.0.0/8)に解決される宛先、IPv4 のRFC3927 で定義されている「リンクローカル」空間(169.254.0.0/16)、IPv6 のRFC4193 のセクション 3 で定義されている「ユニーク ローカル アドレス」プレフィックス(fc00::/7)、または IPv6 のRFC4291 のセクション 2.5.6 で定義されている「リンクローカル」プレフィックス(fe80::/10)。

パブリック ネットワーク : その他すべて。

CORS-RFC1918 におけるパブリック ネットワーク、プライベート ネットワーク、ローカル ネットワークの関係
CORS-RFC1918 におけるパブリック ネットワーク、プライベート ネットワーク、ローカル ネットワークの関係。

CORS-RFC1918 を有効にする Chrome の計画

Chrome は、CORS-RFC1918 を 2 つのステップで導入します。

ステップ 1: プライベート ネットワーク リソースへのリクエストは HTTPS ウェブページからのみ許可される

Chrome 87 では、プライベート ネットワーク リソースにリクエストを送信するパブリック ウェブサイトが HTTPS 上にあることを義務付けるフラグが追加されます。about://flags#block-insecure-private-network-requests に移動して有効にできます。このフラグをオンにすると、HTTP ウェブサイトからプライベート ネットワーク リソースへのリクエストはすべてブロックされます。

Chrome 88 以降、CORS-RFC1918 エラーはコンソールに CORS ポリシー エラーとして報告されます。

CORS-RFC1918 エラーは、コンソールで CORS ポリシー エラーとして報告されます。
CORS-RFC1918 エラーは、[コンソール] に CORS ポリシー エラーとして報告されます。

Chrome DevTools の [ネットワーク] パネルで [ブロックされたリクエスト] チェックボックスをオンにすると、ブロックされたリクエストに絞り込むことができます。

CORS-RFC1918 エラーも、ネットワーク パネルで CORS エラーとして報告されます。
CORS-RFC1918 エラーは、[ネットワーク] パネルに CORS エラーとしても報告されます。

Chrome 87 では、CORS-RFC1918 エラーは DevTools コンソールに ERR_INSECURE_PRIVATE_NETWORK_REQUEST としてのみ報告されます。

こちらのテスト ウェブサイトで試すことができます。

ステップ 2: 特別なヘッダーを含むプリフライト リクエストを送信する

今後、パブリック ウェブサイトがプライベート ネットワークまたはローカル ネットワークからリソースを取得しようとすると、Chrome は実際のリクエストの前にプリフライト リクエストを送信します。

リクエストには、他の CORS リクエスト ヘッダーに加えて Access-Control-Request-Private-Network: true ヘッダーが含まれます。これらのヘッダーは、リクエストを行うオリジンを識別し、きめ細かいアクセス制御を可能にします。サーバーは Access-Control-Allow-Private-Network: true ヘッダーで応答して、リソースへのアクセスを許可することを明示的に示すことができます。

フィードバックのお願い

パブリック ネットワークからのリクエストを想定しているウェブサイトをプライベート ネットワーク内でホストしている場合は、Chrome チームはフィードバックとユースケースに関心があります。ご協力いただけることは 2 つあります。

  • about://flags#block-insecure-private-network-requests に移動してフラグをオンにし、ウェブサイトがプライベート ネットワーク リソースに想定どおりにリクエストを送信するかどうかを確認します。
  • 問題が発生した場合やフィードバックがある場合は、 crbug.com で問題を報告し、コンポーネントをBlink>SecurityFeature>CORS>RFC1918に設定してください。

フィードバックの例

ワイヤレス ルーターは、同じプライベート ネットワークの管理ウェブサイトを HTTP 経由で提供しています。管理ウェブサイトを埋め込むウェブサイトに HTTPS が必要な場合、混合コンテンツになります。クローズド ネットワークの管理ウェブサイトで HTTPS を有効にする必要がありますか?

これは、Chrome が求めているフィードバックの種類です。具体的なユースケースを crbug.com で報告してください 。Chrome は皆様からのご意見をお待ちしています。