web-dev-qa-db-ja.com

Cross Site Script Inclusion(XSSI)とは何ですか?

最近、XSSIが複数のページで言及されているのを見ました。 Webアプリケーションの悪用と防御

ブラウザは、あるドメインのページが他のドメインのページを読み取るのを防ぎます。ただし、ドメインのページが他のドメインのリソースを参照することを妨げるものではありません。特に、他のドメインから画像をレンダリングしたり、他のドメインからスクリプトを実行したりできます。含まれているスクリプトには、独自のセキュリティコンテキストはありません。それを含むページのセキュリティコンテキストで実行されます。たとえば、www.evil.example.comにwww.google.comでホストされているスクリプトが含まれている場合、そのスクリプトはGoogleコンテキストではなく、悪質なコンテキストで実行されます。したがって、そのスクリプト内のユーザーデータはすべて「リーク」します。

これが実際にどのようなセキュリティ問題を引き起こすのかはわかりません。 XSSとXSRFは理解していますが、XSSIは少し不思議です。

誰かがXSSIに基づいてエクスプロイトをスケッチできますか?

ありがとう

32
Pankrat

JSONPを使用してデータを転送する場合、これは通常問題です。ドメインBからデータをロードするドメインAで構成されるWebサイトについて考えてみます。ユーザーはサイトAとBに対して認証される必要があります。これは、同じ生成元ポリシーにより、古いブラウザーが現在のページとは異なるドメイン(B)と直接通信できないためです。 (A)、開発者はJSONPを使用することを決定しました。したがって、サイトAには http://B/userdata.js を指すスクリプトが含まれています。これは次のようなものです。

displayMySecretData({"secret":"this is very secret", ...})

したがって、AはdisplayMySecretDataと呼ばれる関数を定義し、サーバーBから含まれているスクリプトが実行されると、その関数を呼び出して秘密データをユーザーに表示します。

今邪悪なサーバーEがやって来る。 AがJSONPを使用してBからのデータを含んでいることがわかります。したがって、サーバーEには同じスクリプトが含まれていますが、代わりにデータを盗む独自のdisplayMySecretDataが定義されています。その後、攻撃者はユーザーをだまして自分のサイトにアクセスさせます。ユーザーがそこにアクセスしてBにログインすると、ブラウザーはBの認証CookieをBからのスクリプトを実行する要求とともに自動的に送信します。Bは認証されたユーザーを認識し、期待どおりにスクリプトを返します。 Eがデータを取得し、プレスト...

JSONPを使用して別のドメインから機密データをこの方法でロードすることは、このように本当に安全ではありませんが、人々はまだそれを使用しています。悪いアイデア。

45
Erlend

XSSIはjsonp応答に限定されません。一部のブラウザーでは、Arrayコンストラクターをオーバーライドできます。 Json応答に_[...]_が含まれていて、それをスクリプトとして含めると、組み込みコンストラクタではなく新しいコンストラクタが実行されます。修正は、])}while(1);</x>のように解析できない応答に何かを挿入し、コードを使用してそれを解析してから解析することです。スクリプトのインクルードは常にスクリプト全体であるため、攻撃者はそれを行うことはできません。

http://google-gruyere.appspot.com/part3#3__cross_site_script_inclusion での問題とこの解決策の詳細

20
Vroo

XSSIは空想的な言い方です。あなたはプログラムに誰か他の人のコードを含めています。そのコードの内容を制御したり、それがホストされているサーバーのセキュリティを制御したりすることはできません。

たとえば、HTMLページに含めるとしましょう

<script type="text/javascript" src="http://mymatedave.com/js/coolwidget.js"></script>

このスクリプトは、私のwebappで、私の独自のjavascriptコードと同じレベルの信頼で実行されます。全ページコンテンツとDOMにアクセスできるようになり、アプリのCookieをすべて読み取り、ユーザーのキー操作やマウスの動きなど、JavaScriptで可能なすべてのことを読み取ることができます。

私の仲間がデーブの場合、クールなウィジェットに悪意のあるもの(たとえば、すべてのユーザーのCookie、フォームデータ、キープレスを彼のサーバーに送信するスニファー/キーロガー)を配置することにした場合は、必ずしもわかりません。また、私のアプリのセキュリティは現在、デイブのサーバーのセキュリティに依存しています。デイブのサーバーが危険にさらされ、coolwidget.jsが攻撃者に置き換えられた場合、私は再び知る必要はなく、悪意のあるコードがアプリの一部として実行されます。

7
Cheekysoft