JavaScriptはデスクトップからファイルを検索して攻撃者に送信できますか?これは可能ですか?
このシナリオが可能な場合、この攻撃をブロックする方法は?
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
の読み込みに失敗しました:クロスオリジンリクエストはプロトコルスキームでのみサポートされています:http
、data
、chrome
、chrome-extension
、https
。
同じURIでfile:
ドキュメントにiframeのDOMにアクセスさせようとしても失敗しました。
Uncaught DOMException:Origin "null"のフレームがクロスオリジンフレームにアクセスするのをブロックしました。
とはいえ、信頼できないHTMLファイルをローカルで開くことは、Webサイトから読み込むよりもさらに危険です。すべてのローカルファイルをreadできない可能性がありますが、XSSI( クロスサイトスクリプトインクルード )などの攻撃を使用して他のローカルファイルを作成する可能性がありますファイルは機密情報を漏洩する可能性があります。
いいえ、これは不可能で、正当な理由があります。
ブラウザで実行される権限のないJavaScriptには、ファイルシステムを検索するためのAPIがありません。さらに、AJAXおよびキャンバスデータアクセスのようなAPIは、ファイルシステム上のファイルに対しては機能せず、既知のパスでファイルを読み取ることができません。一部のブラウザーはさらに進んで、間接的に何もロードしません(HTML 、画像、CSSなど)。ファイル自体より上位のディレクトリから。
一部のブラウザーでは、ブラウザー拡張機能(以前はFirefox)の特権コンテンツにファイルシステムAPIを提供している場合がありますが、Webコンテンツにはアクセスできません。
このmightが可能な唯一の方法は、JavaScriptランタイムと、使用されているブラウザーのOSレベルのサンドボックス化を突破するブラウザーエクスプロイトがコードにあった場合です。このようなエクスプロイトは、最初にダウンロードしなくても同様に機能する可能性があります。