概要
Chrome Secure Web and Networkチーム によるローカルネットワークアクセス保護の提案 パブリックサイト からのローカルデバイス攻撃リスクへの対応策 ユーザー許可 によるローカルネットワークリクエスト制御 既存デバイスの変更不要 でサイト側のみの対応が主 安全性向上 とユーザーコントロール強化を目指す設計
Chrome Local Network Access 提案概要
- Chrome Secure Web and Networkチーム による初期設計案
- パブリックウェブサイト がユーザーのローカルネットワークにアクセスし、 CSRF攻撃やデバイス悪用 が可能な現状への対応
- 例: evil.com がHTTP経由でプリンター等を攻撃
- ローカルネットワークアクセス (Local Network Access)導入による、ユーザー明示許可制の新設
- Private Network Access(PNA) の過去提案を基礎としつつ、 事前許可 方式に変更
目的と非目的
- 脆弱なローカルデバイス やサーバをウェブ経由で攻撃されるリスクの低減
- ユーザーが期待・許可 した場合のみ、パブリックサイトからローカルデバイスと通信可能に
- OSレベルのローカルネットワークアクセス許可 との整合性も重視
- 既存のワークフローやサービスの破壊 は最小限に抑制
- ローカルネットワーク上のHTTPS問題の解決 は本仕様の対象外
ユースケース
- ユースケース1:一般ユーザー
- ローカルネットワーク上に外部からアクセスされることを想定していない場合
- ブラウザはデフォルトでJavaScriptやサブリソースリクエストを許可しない
- ユースケース2:ローカルデバイスのセットアップ・制御
- IoTデバイスやルーターの初期設定など
- メーカーサイト経由でユーザーのローカルデバイスと通信
- デバイス側の複雑なウェブサーバー実装不要
提案するソリューション
- 新しい「ローカルネットワークアクセス」権限 でリクエストを制御
- 許可されていないオリジン からのローカルネットワークリクエストはブロック
- アドレス空間 を3層で定義
- loopback (localhost等)、 local (プライベートIP、.localドメイン)、 public
- ローカルネットワークリクエスト の定義
- 公開サイト→ローカル、公開サイト→loopback、ローカル→loopback等の境界越え
許可プロンプトの挙動
- サイトがローカルネットワークリクエストを発行時、 権限未取得ならユーザーに許可を要求
- ユーザーが拒否した場合は リクエスト失敗
- ユーザーが許可した場合のみ リクエスト継続
- 混在コンテンツ(Mixed Content) の一部例外適用
ユースケースへの適用例
- 予期しないアクセス
- 例:example.comがfetch("http://192.168.0.1/routerstatus")を実行
- ブラウザが許可プロンプトを表示し、ユーザーが拒否すればアクセス不可
- ローカルデバイス制御
- メーカーサイトがfetch()でローカルデバイスにアクセス
- 必要に応じて targetAddressSpace="local" 等をfetch()に指定
- 初回のみユーザーに許可を要求、許可すれば従来通り利用可能
詳細設計とFetch API連携
- Fetch API の仕様にDNS解決詳細は非統合
- Happy Eyeballs 等によりIP空間のまたがり時に非決定的挙動も
- 接続取得後 にローカルネットワークアクセスチェックを実施
- セキュアコンテキスト 外からのリクエストはブロック
- fetch()のoptionsにtargetAddressSpaceパラメータ 追加提案
- 例:fetch("http://router.com/ping", { targetAddressSpace: "local" })
- 指定したアドレス空間と実際のIP空間が不一致ならリクエスト失敗
混在コンテンツ(Mixed Content)対応
- ローカルネットワークHTTPS未普及 による混在コンテンツ問題
- fetch()で private IPや.localドメイン、targetAddressSpace指定 時のみ混在コンテンツチェックをスキップ
- 接続後、ローカルネットワークアクセス権限がなければブロック
- targetAddressSpace で明示的にローカル・loopback指定可能
- 指定先が実際にローカルでない場合はリクエスト失敗で安全性確保
今後の課題と展望
- デバイス側の変更不要 で展開しやすい設計
- ユーザー体験の向上 と セキュリティレベルの強化 を両立
- HTTPSローカル通信問題 や より細かい権限管理 の今後の検討課題
- GitHubリポジトリ にてフィードバック受付中(https://github.com/explainers-by-googlers/local-network-access/issues)