« PRGパターンって不必要...防空システムをハッキングか »

4 comments

Comment from: とおりすがり [Visitor] Email
 うーん、これがどうしてXSSに関係しているのか理解できないのですが。
 XSSで重要なのはHTMLにユーザが入力したデータを表示するときにエスケープしていないとスクリプトを記述できてしまうということだと思いますが、この例だとユーザの入力がScriptタグの間に表示されないといけないわけで、その状態ではXSSも何もないと思うのですが。
 それとも、これをどうにかすればエスケープをちゃんとしてても、Scriptが実行できてしまうのでしょうか?
2007/10/15 @ 21:13
Comment from: Yasuo Ohgaki [Member] Email · http://www.ohgaki.net/
コメントありがとうございます。

まず前提条件ですが、すべて正しくエスケープしていればスクリプトが実行されないのは当然予想される結果です。SQLインジェクションと一緒で, 「' or 1=1 --」で攻撃可能になりますと解説して「エスケープすればできない」と言われれば「はい、その通りです」となるのと同じです。

割と普通にエスケープすれば動作しないとは思いますが、ブラックリストに頼っているような実装(もともとブラックリストに頼る事自体問題ですが)だと実装によってはスクリプトが実行できてしまう場合もあるかも、と思っています。

一番安直な例としては

var v = "$SOME_VAR_FORM_USER";
// do sanitize here
docuemnt.write(v);

と言ったコードでしょうね。document.writeを使っている時点で、ちょっとそれは.... と言うことでになります。はっきり言って私もinnerHtmlとかで使えるような場面があるのは分かりません。無いだろうとは思っていますが脆弱性は組み合わせて使うと思ってもいない効果を生む場合があります。E4Xで面白い形式の文字列でJavaScriptが動作する事を知っておくのは必要だと思います。

試されていないようですが上記のJavaScriptを含む文字列はscriptタグで囲まなくても実行できます。少なくともイベントハンドラやjavascript:では動作します。多分、expressionでも動作するでしょう。つまり、もしE4Xを除けば完璧なブラックリストであったとしてもE4Xサポートを悪用した攻撃なら通過する可能性がある、と考えられます。

また攻撃手法の一つにIPS/WAF「フィルタのすり抜け」があります。上記の文字列は様々なパターンのフィルタのすり抜けの可能性を示しています。IPS/WAFはブラックリスト型のセキュリティ対策なので当たり前といえばその通りですが、セキュリティ上の問題として考察に値すると考えています。

正直、安全性の確認が面倒過ぎするのでユーザ入力を含むJavaScriptの生成はお勧めしない、というのが現在のスタンスです。

実際のところFirefoxのE4X実装だけでもどうすればスクリプトの実行が可能なのかさえ全部できっていないと思っています。# どうなんでしょうね。

今のJavaScript実装でさえ検証するのは十分面倒なのに、複数ブラウザのE4X実装の検証などは想像しただけでも面倒です... 少なくとも私は積極的に検証しません。検証している方の情報収集するのがほとんどだと思います。検証もせず、情報収集もせず、厳しい入力の検証も行わず、ダイナミックにJavaScriptを生成すると痛い目に遭う確率が高くなると思います。

とりあえずこのエントリは「JavaScirptのXMLサポートには注意が必要である」事を伝えるのが目的です。

# 大抵のおかしな文字列でJavaScriptが実行できるケースには
# 驚かなくなりましたが、この例には正直驚いたのて驚きを共有
# できればと考えたので書きました。

2007/10/15 @ 22:01
このエントリーの内容について私もブログを書きましたのでご笑覧ください。
コメント欄ついていえば、IPS/WAFのすりぬけだけであればE4Xまで持ち出す必要はないかと思います。
JavaScriptの動的生成は危険という結論には同意です。
2007/10/17 @ 12:01
Comment from: Yasuo Ohgaki [Member] Email · http://www.ohgaki.net/
> IPS/WAFのすりぬけだけであればE4Xまで持ち出す必要はないかと思います。

確かに全てのパターンを定義できるわけが無く、あまりにも変な文字列でスクリプトが実行できてしまうケースが多いのでXMLを使うまでもないですよね :)

2007/10/17 @ 12:54

Leave a comment


Your email address will not be revealed on this site.

Your URL will be displayed.
PoorExcellent
(Line breaks become <br />)
(Name, email & website)
(Allow users to contact you through a message form (your email will not be revealed.)