星野君、牧野さんにクロスサイトスクリプティングを仕掛ける
しかし、星野君は納得したわけではなかった。根本的な対策になっていないような気がして釈然としないのだ。調べてもよく分からなかったので、仕方なくまこと先輩にアドバイスを求めることにした。
まこと先輩からはすぐに返事が届いた。
まことです。
お、そんな仕事頼まれてるんだ。楽しそうだ。
しかも結構自分で勉強した感じだね。ちょっと感心。
Refererチェックがちゃんとしている場合、なかなか攻撃を成立させるのは難しいかもしれない。ただ、不完全なチェックの場合が結構あって「部分一致」でチェックしてるかも。その場合は、URLに対象のサイトが含まれるようにすると回避ができてしまう。
例えばこんな感じ。
http://(攻撃者のサイト)/attack.html?http://www.example.com/toiawase.cgi
ちゃんとチェックされてる場合は確かに攻撃に対しては大丈夫。けど、Refererってブラウザによって扱いが違うから、Refererで画面遷移を管理すること自体がお勧めできないな……。
なるほど、「部分一致だと回避できてしまう」というのは全然思い付かなかった。早速試してみたところ、Refererのドメインが違ってもチェックを回避することができた。
今度こそ牧野さんを説得しなければならない。星野君はクロスサイトスクリプティングのためのわなページを別のPCに用意して、実際に攻撃が成立することを牧野さんに体験させようと思った。
星野君 「牧野さん、ちょっとここにアクセスしてみてください」
星野君は牧野さんにわなが設置してあるページを指定した。
牧野さん 「またまた。ちゃんとチェックしてあるから大丈夫だって……。うお、スクリプト動いた。なんで?」
星野君はRefererで画面遷移を管理する際の問題を説明した。
牧野さん 「うーん。じゃあWebアプリ側でも入力チェックをやればいいってこと?」
星野君 「はい。あと、HTMLを出力する部分でサニタイジングをすればいいですかね」
牧野さん 「へぇ〜。なるほどねぇ〜。じゃあよろしくね」
星野君 「えっ??」
牧野さん 「ん?問題見つけて直してくれるって聞いてるけど?」
星野君 「(直すのも僕なのか……)」
結局、クロスサイトスクリプティング以外は見つからなかったので、Webアプリケーション側での入力チェックとHTML出力時のサニタイジング処理を追加する修正を行った。
これまでWebアプリケーション検査といっても簡単なパターンを試してみることくらいしか知らなかった。今回の件で、星野君はそれだけでは不十分だということを感じた。検査を行う際には、Webアプリケーションの中の作りまで考えてやらなければ、安全性を確保することはできないのである。
次回予告:
会社のWebアプリケーションの穴はふさいだ。しかし、星野君は忘れていた。ほかにも彼が管理すべきWebアプリケーションが存在することを……。
Profile
杉山 俊春(すぎやま としはる)
三井物産セキュアディレクション株式会社
テクニカルサービス事業部検査グループ
コンサルタント
セキュリティコンサルタントとして、主にWebアプリケーションのセキュリティ検査などに従事している。大手就職活動支援サイト、ショッピングサイトなどの検査実績を持つ。
Copyright © ITmedia, Inc. All Rights Reserved.