JVN#63650108 SmartyのXSSについて   no comments

Posted at 6:04 pm in internet,Security
cats_2012-10-06_5

お久しぶりです

こんにちは。もう10月ですね。前回の更新から2ヶ月弱開いてますね。その間何をしていたからと言うと、隠遁生活のためのお金を稼いでいました。高等遊民のふりをするにも何かとお金だけはかかりますからね。そして今書いてる「無線LANセキュリティの教科書2013(仮)」も来月には出るんじゃないかと思います。すごいスケジュールですね。

さて、久しぶりに何を書くのかというと、今日
JVN#63650108 Smarty におけるクロスサイトスクリプティングの脆弱性
http://jvn.jp/jp/JVN63650108/
のレポートが出たのでこれについて書こうと思います(一応報告者です)。

これまでもレポートが出たときには一言くらいと思っていたのですが、つい面倒になって書いてませんでした。ようやく意を決したので書きます。実は9月13日には修正されており、CVE番号も発行されていたのですが日本側の都合で今日まで発表できませんでした。あしからずご了承ください。あとSmartyにも詳しくないので動作の解説で怪しい点があるかもしれません。


●概要
で、今回のXSSですが、どのようなところで発生するのかというと例外処理です。バージョンアップ前のSmartyでは例外処理の表示をエスケープ処理していなかったため、もしユーザの入力をそのまま使用するスクリプトがあった場合、例外発生時のエラー表示においてユーザが指定した任意のタグやスクリプトが実行されます。

●例
http://example.com/xss.php?file=file
みたいな、fileに指定されたパラメータ(ここではfile)を
$smarty->display($_GET);
のように直接サーバ内から読み込むなphpスクリプトがあるとします。

このfileに存在しないパラメータを与えた場合
Warning: Smarty error: unable to read resource: “file” in /usr/local/lib/php/Smarty/Smarty.class.php
みたいな例外が表示されるのですが(設定によると思いますが)

これに対し
http://example.com/xss.php?id=b%22%3E%3Cscript%3Ealert%280%29%3C/script%3E
のようなスクリプトタグを含むパラメータを送信した場合も同様に例外が発生しますが、
例外の表示はエスケープされていないので
パラメータに指定したスクリプトがそのまま実行されます。

●影響
ユーザからの入力をそのまま処理に使用していない限り、基本的にこの脆弱性の影響は受けないと思います。

●対応
1.アップデートする
新バージョンである2.6.27と3.1.12がリリースされていますのでアップデートするといいでしょう。

2.例外をWebに表示しないようにする
例外表示での脆弱性なので、Smartyの設定でできるなら例外を表示しないようにすればいいと思います。

修正点については↓をご覧ください。
http://code.google.com/p/smarty-php/source/detail?r=4658

Written by bogus on 10月 10th, 2012

Tagged with