Skip to content

Instantly share code, notes, and snippets.

@mala
Created April 25, 2013 13:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mala/31109de84afdf5f0c528 to your computer and use it in GitHub Desktop.
Save mala/31109de84afdf5f0c528 to your computer and use it in GitHub Desktop.
SWFUploadのXSSとWordPressの修正方法の問題
概要
WordPressが修正したつもりになってたSWFUploadのXSSの修正方法が不完全で最新版でもまだある。
http://wordpress.org/news/wp-includes/js/swfupload/swfupload.swf#?movieName=SWFUpload_0&buttonText=%26lt%3Ba%20href%3D'javascript%3Aalert(location)'%26gt%3Bclickhere%26lt%3B%2Fa%26gt%3B
----
届出ステータス
- 2013-04-24 security at wordpress.org
- 2013-04-25 IPA, Neal Poole氏
----
SWFUploadのXSSの経緯
- 影響が大きいWordPressに報告される、修正後Neal Poole氏が自身のブログで公表
- Neal Poole氏が公表したのは movieName パラメータを使うもの
- buttonTextパラメータ + クリックジャッキングでも攻撃が成立する
swfuploadのプロジェクトが停止しているため、いくつかのforkが作られ、debianは独自で修正した。
buttonTextパラメータを使う方はこの時点で広く知られていなかったため、結果としてdebianの修正には含まれていない。
WordPressは3.3.2の修正の際に、buttonTextに指定されたHTMLタグを無効化することを意図したコードを追加している。
wordpressバージョンのswfを解析すると以下のようになる
private function SetButtonTextStyle(arg0:String):void
{
this.buttonTextStyle = '';
this.buttonTextField.htmlText = this.buttonText;
this.buttonTextField.htmlText = this.buttonTextField.text;
}
このことから、WordPressは、buttonTextパラメータを使うXSSについても把握していたと考えられる。
しかしWordPressの修正が間違っているので結果として3.3.2以降のバージョンもXSSが成立する。
- http://wordpress.org/news/2012/04/wordpress-3-3-2/
"Szymon Gruszecki for a separate bug in SWFUpload." とあるので、buttonTextについてはSzymon Gruszecki氏が報告したのかもしれない。
textノード部分をhtmlTextに再代入するので、 "<" や ">" がテキストとして出力されていればHTMLタグが有効化されてしまう。
表示したいHTMLをHTMLエスケープした上でパーセントエンコードしてbuttonTextに渡せば良い。
2012年12月末の段階で何人かがbuttonTextパラメータ経由でのXSSについて把握していたようだ。
2012-12-27
- https://github.com/Yelp/SWFUpload/commits/master
- Debian作成のものに更にパッチを当てている
2012-12-31
- http://www.breaksec.com/?p=5909
2013-03 Full disclosureに投稿あり
- http://seclists.org/fulldisclosure/2013/Mar/110
- http://seclists.org/fulldisclosure/2013/Mar/116
複数の問題がある。WordPressは修正版をリリースしたが、本家のSWFUploadは開発を停止しており、
修正バージョンがリリースされなかったので、WordPressの修正リリース後も、"Responsible disclosure" の結果、脆弱性の詳細が公開されなかった。
Neal Poole氏は詳細を公開したが、buttonTextを使ったパターンについては含まれていなかった。
その結果
- http://jvndb.jvn.jp/ja/contents/2012/JVNDB-2012-002110.html
CVEでは「詳細不明の脆弱性」として取り扱われている。オリジナルのソースにどのような変更が加えられたのかをWordPressが公開していれば、その修正方法が不完全であることに気付く人がいただろう。
詳細が開示されなかったため問題の一部しか修正せずに「修正したつもりになっている」forkが生まれ、WordPressは不適切な修正のまま1年以上が経過することとなった。
WordPressの修正が不完全であることに気づいている人は現時点では少ないと思われるので、WordPressの修正バージョンが公開されるまでは開示しないつもりであるが、
buttonTextを使ったXSSについては既に開示されている状態であるので、WordPressの反応を待って完全開示が好ましいと考えている。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment