web-dev-qa-db-ja.com

CSSベースの攻撃

私は現在、コンテンツエディターがインラインスタイルのタグを記述できるようにするCMSのプラグインに取り組んでいます。

インラインスタイルがどのように悪用される可能性があるかについてのアドバイス/リンクを探しています。

プラグインの理由の一部は、厳格なコンテンツセキュリティポリシーを許可することです(インラインJavaScriptはありませんが、インラインスタイルは許可されます)。これにより、ページに追加される可能性がある厄介なものの影響を軽減できますが、古いブラウザには影響しません。

Microsoftの動作はインラインスタイルで機能しますか?

この作業を行うための最善の解決策は、CSSをホワイトリストに対して検証/サニタイズすることですが、これにはCSSパーサーの実装とプロパティのホワイトリストの作成/維持が必要です。プロパティ/パターンのブラックリストは実現可能でしょうか? (私はホワイトリスト/ブラックリストの相対的なメリットを知っています-しかし、有限の数の攻撃ベクトルしか存在しないはずなので、ここでは多少歪んでいます)。

更新

明確にするために、コンテンツの編集者はある程度信頼されている必要があるため、攻撃を軽減することは、防止することよりも実用的なソリューションになる可能性があります。

また、特定の例を CVE-2011-0232 で見つけただけですが、実装には本質的な脆弱性ではなく、設計上の欠陥がある場合の方が興味があります。

34
symcbean

JavaScriptについて:

Internet Explorerおよび一部の非常に古いブラウザでは、JavaScriptをスタイルシートに挿入することが可能です。これを行ういくつかの方法は、 XSSフィルター回避チートシート で説明されています。 3つの主要な問題は次のとおりです。

  1. 背景画像と同様:background-image: url('javascript:alert(/XSS/);')
  2. JavaScript式:width: expression(alert(/XSS/))-動作確認済みIE 7
  3. .htcファイルの読み込み:behavior: url(/evil.htc)-IE 7〜9

CSSに関するその他の問題:

基本的に、ダウンロード可能なすべてのリソース(画像、フォントなど)は、訪問者のネットワーク容量を利用でき、CSRF攻撃の実行、訪問者のスパイ、または小規模なWebサイトでのDDOS攻撃の実行に使用できます。

CSSを使用してブラウザをクラッシュさせたり、大量のメモリを使用したり、しばらくの間CPUを99%でスピンさせたりする方法はいくつかあります。 CSS 3は、3Dのものやトランジションなど、禁止したい多くの奇妙なものをサポートします。

ウェブサイトのレイアウトは自由に変更できます。これには、検索とパスワード入力の位置を交換するなどの楽しいことが含まれます。インラインスタイルを使用してmightすることはできません。注意してください。

ブラックリストについて:

パターンブラックリストは非常に悪い考えです。 CSSをエンコードする方法は多数ありますが、ブラウザーはすべて異なる方法でエンコードします。 CSSパーサーは、「ガベージイン-CSSアウト」の原則に従うことがよくあります。さらに、CSSパーサーは通常エラーで停止しないが、テキストの解析を続行しようとすることに注意してください。

短いテストで、有効なbackground-color定義:\62ackground-color:\062ackground-color:\000062ackground-color:\62 ackground-color:bac\k\g\r\o\u\nd-c\o\l\or:

実用的なソリューション:

  1. 独自のパーサーを作成します。本格的または標準に準拠させないでください。シンプルにして、プロパティのホワイトリストを用意してください。あなたがしたくない、あなたがしたくないより多くのプロパティがあります。ごみは捨ててください。

  2. CSSでJavaScriptを実行するブラウザーは除外してください。ここでいくつかの調査を行う必要がありますが、IE 8以降では、JS式をサポートしなくなりました。他の問題は残っています。

27
copy