jQuery CVE-2011-4969 検証

ネタ元

CVE-2011-4969

github

調査

ながれ

  • jqueryの使い方
  • 脆弱性の検証について
    • 事象
    • どこがどう修正されている?
    • どんな意味か?
    • 検証
    • なぜ起きる?

jqueryの使い方

脆弱性の検証について

事象

「$(location.hash)」の取り扱いによるXSS

bugs.jquery.com

どこがどう修正されている?

修正前

quickExpr = /^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,

修正後

quickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,
修正前:quickExpr = /^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,
修正後:quickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,  
どんな意味か?

修正前
検証
①#<test>
②#test

方法
match後をコンソールログに表示させる。
検証ソース


①#<test>

「#<test>」がデータとして取得されている。

②#test

「#test」がデータとして取得されている。

修正後
検証
①#<test>
②#test

方法
match後をコンソールログに表示させる。
検証ソース


①#<test>

「#<test>」がデータとして取得されていない。

②#test

「#test」がデータとして取得されている。

検証

ペイロード

#<img src=/ onerror=alert(1)>

検証ソース
上記正規表現の時に使用したソースと同じ。

手順
ペイロードを仕込んだリンクをクリックする。

IE11で実施。

出た。

検証ソースを修正後のものに変更。

出ない。

なぜ起こるか?

正規表現によるチェックにおいて、location.hash経由でタグを指定されると正しくタグを排除できずに処理が進んでしまうため。
なぜタグを排除できずに処理が進むとXSSになるかはわからんかった。。。

「jQuery.buildFragment」の「args」にタグが格納されていることはわかったが、どう処理したらXSSになるのかがわからない。

課題

なぜ正しくチェックできないとXSSになるのか?

js、jqueryによるhtmlの生成がよくわかってない。
jsの文法がよくわかってない。

なぜ「&&」とかで文字列が戻るのか・・・

なぜfirefoxとchromeは起きなかったのか?

ちなみにEdgeは発生した。

広告
広告
この記事を書いた人
脆弱性を見つける仕事をしています。 Twitter https://twitter.com/Nick_nick310
SNSでフォローする

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です