2010-12-28 19 views
19

が知られているスタイル属性XSS攻撃属性:XSS攻撃やスタイルが似

<DIV STYLE="width: expression(alert('XSS'));"> 

それとも

<DIV STYLE="background-image: url(javascript:alert('XSS'))"> 

すべての例は、式またはURLの機能のいずれかを使用I've seen - 基本的には何かの機能をその必要のように」 ( "と") "と表示されます。

私はフィルタリングスタイルタグの方法を以下と思って、私は(約)は、次の文法を使用して、それらをチェックします:

identifier: [a-zA-Z_][a-zA-Z0-9\-]* 
number: [0-9]+ 
string: '[a-zA-Z_0-9 ]*' 
value : identifier | number | string | number + "(em|px)" | number +"%" 
entry: identifier ":" value (\s value)* 
style: (entry ;)* 

だから基本的に私は(数値または非常に限られた文字列値を持つASCIIのプロパティを許可する基本的にフォント名のために)呼び出しのように見えるものを使用することを許可しません。

これは十分ですか?そのようなことをする可能性のある攻撃はありますか:

<DIV STYLE="this-is-js-property: alert 'XSS';"> 

成功しましたか?

誰もこのようなテストのXSS脆弱性を考えることができますか?それを明確に

確認するに

私はスタイルがTinyMCEをなどの多くのツールは、それらを使用する属性やフィルタリング無害 スタイルがオフの属性を大幅に機能を傷つける必要があります。

私は@import、url、expressionなどを使用する可能性があるすべてのものを削除することをお勧めします。また、基本的なCSS構文がokであることを確認してください。

回答

はありません、クリックジャッキングに起因する脆弱性を安全ではありません。

+1

良い仕事をして、この –

答えて

9

これはクリックジャッキングの脆弱性のために動作しません。

例:コードが完全に検証されるだろうが、それは重大な損傷を引き起こす可能性がありhttp://www.bioinformatics.org/phplabware/forum/viewtopic.php?id=164

<a href="http://example.com/attack.html" style="display: block; z-index: 100000; opacity: 0.5; position: fixed; top: 0px; left: 0; width: 1000000px; height: 100000px; background-color: red;"> </a> 

で発見。

大雑把に言えば、非常に厳しいホワイトリストを使用するか、スタイル属性を許可しません。

+0

良い点!私はX-Frame-Optionsを防御用クリックジャッキングの脆弱性に使用できると思っています。 – liweijian

3

OWASPという名前のオープン基盤があります。

質問に答えるにはAre there any attacks....;はい!

そこにはたくさんのドキュメントがあり、すべてのXSSコードを正しくエスケープするために使用できるライブラリがあります。

XSS prevention sheetをお読みください。

+3

の多くは、あなたがより具体的してくださいすることができます知りませんでしたか? ** **特定の**攻撃?私はこれらのサイトを検索しましたが、css識別子と数字だけを使ってこのような攻撃を行うことはできませんでした。それが私が求めている理由です。 – Artyom

+0

htmlをエンコードする方法はたくさんあります。 HTMLエンティティを使用できます。 OWASPのドキュメントにはすべての例があり、そこにあるライブラリは正しく 'すべて'の可能性をエスケープします –

+0

HTMLエンティティと他の "有線"のエンコーディングは文法で見ることができないので、非常に厳密な文字列のサブセットのみが拒否できます " " – Artyom

1

セキュリティルール#1:疑問が少ない場合は、穴があるとします。

達成しようとしていることは何ですか?どの機能が信頼できないソースからCSSを引き起こすのでしょうか?

+0

おそらく、信頼できないユーザーがn台のwysiwygエディタを使用していますか? –

+0

私の場合は、ディスカッションシステムです.CommandMark + HTMLにコメントを投稿し、 'style = ... '属性を含めることができます。 (私は元のポスターではない、私はちょうど同様の "問題"を持っています。) – KajMagnus

0

はい、Style属性でXSS攻撃を使用できます。

これらのスタイルは、我々は彼らが我々のタグで宣言されていなかったとして、特定のJSPページに注入されたが、私たちのセキュリティグループの監査を受けたときに通じました:

<img src="<path here>" style=x:ex/**/pression 
(alert(54163)) ".gif" 

私はHTTPフィルタを使用したと思っていますここでそれを停止するが、私はまだそれを見ている。

我々はまた、私たちの隠された入力フィールドは、どちらかproteccted、これも同様を通じて得ていませんでした:

<input type="hidden" name="<variable name here>" value="<value here>" style=x:ex/**/pression(alert 
(54163)) ""> 

Burpsuiteのようなツールを使えば、このようなタグにXSSを注入するためにその場でリクエストを変更することができます。ただし、OWASPのESAPI APIを使用すると、保護機能を追加できます。私たちはJSTLタグを古いレガシーコードとして使用していなかったので、これが最短の短期間の解決策でした。

私は使用された隠れた入力のために;あなたはまた、XSS with the js onload event in an img tag使用することができます

<input type="hidden" name="id" value="<%=ESAPI.encoder().encodeForHTMLAttribute(id)%>" 

+0

あなたのケースでは、style属性とsrc属性は適切にエスケープされていません。つまり、引用符や適切にエンコードされたコンテンツは使用できません。 – Artyom

+0

私が示すXSSは、実際に私たちのjsコードを通過したものです。 –

関連する問題