web-dev-qa-db-ja.com

ローカルHTMLファイルの悪意のあるJavascriptは、Firefox / Chromeでインターネットにファイルを送信できますか?

  1. Example.html -fileをランダムなWebサイトからコンピューターのデスクトップにダウンロードします
  2. Google Chromeでデスクトップからexample.html -fileを開きます
  3. 今Chrome example.htmlからjavascriptを実行します-デスクトップまたはドキュメントからコンピューターファイルを検索するファイル-ディレクトリを作成し、攻撃者が制御するWebサイトまたはサーバーに送信します

JavaScriptはデスクトップからファイルを検索して攻撃者に送信できますか?これは可能ですか?

このシナリオが可能な場合、この攻撃をブロックする方法は?

7
nptxzs

JavaScriptはデスクトップからファイルを検索して攻撃者に送信できますか?

歴史的に、はい、ブラウザはfile:スキームを1つの固有のオリジンとして扱い、説明した攻撃は実行可能でした。

しかし、今日は、いいえ、ChromeおよびFirefoxは、ローカルファイル間のアクセスを制限する同じ元のポリシーを適用します。(ただし、 notallブラウザーはそれを行います。特に、@ dandavisが発見したように、Microsoft Edgeはまだローカルファイル間の読み取りアクセスを制限していません。)

つまり、これらのブラウザーのいずれかでfile:///downloads/malicious.htmlにあるHTMLファイルを開くと、そのドキュメントのスクリプトはファイルシステムを自由に検索できず、ホームセンシティブファイルを送信できません。 。ただし、file:スキームでのSOPの実装方法はブラウザーによって異なり、十分に文書化されていません。また、確立された標準がないようです。

Mozillaには(古くなっている可能性のある)詳細が記載されています here

Gecko 1.9 [Mozillaのブラウザエンジン]以降では、ファイルは他の特定のファイルのみを読み取ることができます。具体的には、元のファイルの親ディレクトリがターゲットファイルの祖先ディレクトリである場合にのみ、ファイルは別のファイルを読み取ることができます。ただし、この方法でディレクトリをロードすることはできません。

たとえば、別のファイルfoo.htmlにアクセスするファイルbar.htmlがあり、ファイルindex.htmlからそのファイルに移動した場合、bar.htmlが次のいずれかである場合にのみロードが成功します。 index.htmlと同じディレクトリ内、またはindex.htmlと同じディレクトリ内に含まれるディレクトリ内。

Chromeに関連するドキュメントは見つかりませんでしたが、ファイル間のアクセスは完全にロックされているようです。例:Chromeでは、file: URIに対してクロスオリジンリクエストを発行できませんでした:

file:///tmp/malicious.htmlの読み込みに失敗しました:クロスオリジンリクエストはプロトコルスキームでのみサポートされています:httpdatachromechrome-extensionhttps

同じURIでfile:ドキュメントにiframeのDOMにアクセスさせようとしても失敗しました。

Uncaught DOMException:Origin "null"のフレームがクロスオリジンフレームにアクセスするのをブロックしました。


とはいえ、信頼できないHTMLファイルをローカルで開くことは、Webサイトから読み込むよりもさらに危険です。すべてのローカルファイルをreadできない可能性がありますが、XSSI( クロスサイトスクリプトインクルード )などの攻撃を使用して他のローカルファイルを作成する可能性がありますファイルは機密情報を漏洩する可能性があります。

6
Arminius

いいえ、これは不可能で、正当な理由があります。

ブラウザで実行される権限のないJavaScriptには、ファイルシステムを検索するためのAPIがありません。さらに、AJAXおよびキャンバスデータアクセスのようなAPIは、ファイルシステム上のファイルに対しては機能せず、既知のパスでファイルを読み取ることができません。一部のブラウザーはさらに進んで、間接的に何もロードしません(HTML 、画像、CSSなど)。ファイル自体より上位のディレクトリから。

一部のブラウザーでは、ブラウザー拡張機能(以前はFirefox)の特権コンテンツにファイルシステムAPIを提供している場合がありますが、Webコンテンツにはアクセスできません。

このmightが可能な唯一の方法は、JavaScriptランタイムと、使用されているブラウザーのOSレベルのサンドボックス化を突破するブラウザーエクスプロイトがコードにあった場合です。このようなエクスプロイトは、最初にダウンロードしなくても同様に機能する可能性があります。

1