Oligo Securityは8月7日(現地時間)、「0.0.0.0 Day: Exploiting Localhost APIs From the Browser|Oligo Security」において、悪意のあるWebサイトが主要なWebブラウザを介してローカルサービスに接続できる脆弱性を発見したと伝えた。この脆弱性は「0.0.0.0 Day」と名付けられており、macOSおよびLinux環境のWebブラウザに影響する。WindowsはIPアドレス「0.0.0.0」をブロックするため影響を受けない。

  • 0.0.0.0 Day: Exploiting Localhost APIs From the Browser|Oligo Security

    0.0.0.0 Day: Exploiting Localhost APIs From the Browser|Oligo Security

「0.0.0.0 Day」の概要

「0.0.0.0 Day」はIPアドレス「0.0.0.0」をさまざまなソフトウェアがホストアドレスとして認識することで発生する脆弱性とされる。本来、IPアドレス「0.0.0.0」は「RFC 1122 - Requirements for Internet Hosts - Communication Layers」においてDHCPの送信元アドレス以外に使用してはならないと定義されている。しかしながら、それ以外の具体的な仕様は定められておらず、実装に依存する状態となっている。

Oligo Securityはループバックアドレス「127.0.0.1」をリッスンするローカルWebサーバを用意し、同一コンピュータ上のWebブラウザから外部Webサーバにアクセスする実験を行っている。外部Webサーバは「0.0.0.0」に接続するJavaScriptを配信する。

その結果、Webブラウザから送信された宛先アドレス0.0.0.0への接続は自動的に127.0.0.1に変換され、ローカルWebサーバに到達したことを確認している。これは悪意のある外部のWebサーバから、127.0.0.1上で動作しているサービスにアクセスできることを意味する。

プライベートネットワークアクセス

Oligo Securityの調査によると「0.0.0.0 Day」と同様の問題は、18年前の2006年にはMozillaに報告されていたという。このときは0.0.0.0だけではなく、ローカルネットワーク全体にアクセスできるとして問題が報告されている。この問題は現在も解決していない。

  • 18年前Bugzillaに報告された脆弱性。現在も未解決

    18年前Bugzillaに報告された脆弱性。現在も未解決

このような悪意のあるJavaScriptの不正アクセスを防止するため、Chromeにはプライベートネットワークアクセス(PNA: Private Network Access、旧称: CORS-RFC1918)の仕組みが導入されている。これはローカルホスト、ローカルネットワーク(プライベートネットワーク)、それ以外のネットワーク(パブリックネットワーク)を区別し、後者から前者へのアクセスを制限する(参考:「Private Network Access」)。

  • 各ネットワークの関係 - 引用:Google

    各ネットワークの関係 引用:Google

しかしながら、プライベートネットワークアクセスの仕様には「0.0.0.0」が定められておらず、リクエストは送信可能とされる。応答はブロックされるため脅威ではないように思えるが、Oligo Securityはいくつかの悪用実験に成功している。

  • 0.0.0.0が仕様に含まれていない - 引用:W3C Community Group

    0.0.0.0が仕様に含まれていない 引用:W3C Community Group

対策

同社の報告を受けて、Apple は WebKit に重大な変更を加え、0.0.0.0 へのアクセスをブロックしたという。また、Chrome はChromium 128 から0.0.0.0 (Finch Rollout) へのアクセスをブロックしたという。Firefoxは修正作業中とされ、具体的な進捗は各Webブラウザの発表や、コミュニティ、バグ報告の内容などを確認することが望まれる。

「0.0.0.0 Day」はWebブラウザだけではなく、外部から指定されたIPアドレスに接続するすべてのネットワークアプリケーションに影響する可能性がある。Oligo Securityは影響を受けるソフトウェアの開発者に対し、プライベートネットワークアクセスの実装やすべての接続に認証を要求するなどの対策を推奨している。