web-dev-qa-db-ja.com

HTMLを画像に挿入してXSSを誘発することは可能ですか?

possible から inject は攻撃者が制御するHTMLを画像に含めるため、XSSを誘発するという回答もあります。

このHTMLはブラウザに穴が開いている場合にのみブラウザで処理されると思います。したがって、これはブラウザの問題であると思います。これらの画像を変換し、EXIFメタデータを取り除き、Webアプリケーション側でランダム化する必要はありません。

攻撃者は、XSSを誘発する画像にHTMLを挿入できますか?はいの場合、どのように?

13
Andrei Botalov

きっと bstpierre は、ユーザーが画像をアップロードしてギャラリーに表示し、さらにEXIFタグから取得したその画像に関するメタデータを表示する状況について話していたと確信しています。 EXIFタグが悪意のあるhtmlタグで具体的に構築されていて、入力サニテーション(たとえば、<>&などのエスケープ文字)がなかったため、次のようなページにレンダリングされます。 &lt;&gt;&amp)これらをXSS攻撃に使用することができます。繰り返しになりますが、Webアプリが画像ファイルから抽出されたタグを含むすべてのユーザー入力をサニタイズしても問題ありません。

bobince は、まったく異なるいくつかのことを話していました。最も近いのは誰かがファイルをアップロードすることです。たとえば、fake_image.jpgと言いますが、コンテンツではなくコンテンツは実際にはhtmlファイルです。コンテンツスニッフィングとは、一部のブラウザでクリックしてページを開くと、 http://example.com/fake_image.jpg は、fake_image.jpgが画像ではなく、 htmlファイル。ファイル内のhtmlページを表示します。したがって、アップロードされたhtmlファイル(画像ファイル名付き)はXSS攻撃で使用される可能性があります。この攻撃を有効にするには、この種のコンテンツスニッフィングを許可するブラウザを用意し、画像のURLにアクセスする必要があります(ページに<img src='fake_image.jpg'>が埋め込まれているだけではありません)。

10
dr jimbob
5
D.W.

HTMLのインラインSVGには、イベントハンドラーとSVGスクリプトノードを含めることができます。したがって、ページをロードするSVG画像を指定して、ページにインライン化できる場合は、その画像を介してスクリプトを挿入できます。

HTML5仕様

SVG名前空間のsvg要素は、この仕様のコンテンツモデルの目的で、埋め込みコンテンツ、フレージングコンテンツ、フローコンテンツのカテゴリに分類されます。

...

SVG要素のセマンティクスは、SVG仕様およびその他の適用可能な仕様によって定義されています。 [SVG]

Mario Heiderich Operaの混乱を利用して、ロードされたクロスドメインがさまざまなレイヤーを攻撃して電話をかけることになる画像を作成するために、どのドメインSVGコンテンツを実行する必要があるかについて。

要約

  • SVGは単なる画像ではなく、ミニアプリケーションです
  • タグがJava、PDFおよびFlashをデプロイし、Skypeで電話できるようになりました
  • インラインSVGは小さなXMLアイランドを作成し、HTML WebサイトへのXML攻撃を可能にします
  • SVGおよびXSLTも機能し、DoSおよびその他の攻撃を可能にします
  • WebセキュリティとXMLセキュリティ、彼らは再び会います!
  • そしてXXEが復活しました– 2002年の勧告を覚えていますか?
  • SVGはセキュリティコミュニティで十分な注目を集めていません
  • SVGはより多くのセキュリティ研究のための多くの余地を提供します

以前のスライドで、MarioはXSSについて具体的に説明し、ローカルで実行するためのSVGファイルのダウンロードと問題について説明します

  • アップロードにSVGを許可する==アップロードにHTMLを許可する

HTMLページとJPEG画像GIFとJavaScriptプログラム の両方であるファイルのように、複数の言語で有効なポリグロットを書き込むことができます。その2番目のページで説明します。

上の画像は、完全に有効なJavaScriptプログラムと同じように、完全に有効なGIFファイルです(実際には、有効なCajaプログラムですら!)。スクリプトタグがsrc属性がjavascriptファイルを指すことを期待するのと同様に、イメージタグは、src属性が画像として正しく解析されるコンテンツを指すことを期待します。タグは、特定のタイプのコンテンツが期待されるコンテキストを指定します。ブラウザーがコンテンツをレンダリングするために使用した唯一の情報が、周囲のタグによって作成されたコンテキストである場合、状況は単純になります。しかし、ブラウザの世界では物事は決して単純ではありません。サーバーはファイルを送信するときに、Content-TypeヘッダーでそのファイルのMIMEタイプも送信します。サーバーがアサートするContent-Typeが、そのコンテンツが使用される予想されるコンテキストと一致している場合、問題はありません。サーバーがContent-Typeを送信しないとどうなりますか?別のタイプが予想されるときに、1つのContent-Typeを持つファイルが送信されるとどうなりますか?

...

ブラウザは、使い勝手を考慮して、見かけ上コンテンツのスニッフィングを実行するため、不適切に構成されたサーバーでも「機能」し続けることができます。ここでの問題は、ブラウザが異なるタイプのコンテンツに異なるアクセス量を与えることです。ブラウザをだまして、あるタイプのコンテンツが実際には別のタイプであると考えさせることができる場合は、実際のコンテンツへのアクセスに課せられた制限を回避できます。たとえば、HTMLページは外部の画像、スタイルシート、スクリプトを読み込むことができます。この場合、これらのリソースが実行されるセキュリティコンテキストは、これらのリソースが埋め込まれているページのURLから取得されます。一方、ロードされるコンテンツのタイプがFlashまたはJavaアプレットは、セキュリティコンテキストはアプレットオブジェクト自体のURLから派生していると言います。ブラウザがヒューリスティックを使用し、Flashオブジェクトとイメージの間で混乱した場合、実際のセキュリティに影響があります!これは、この種の混乱の原因でした。 GIFAR攻撃。

4
Mike Samuel