連載
» 2006年01月28日 00時00分 公開

まこと先輩と星野君とCSRFの微妙な関係星野君のWebアプリほのぼの改造計画(4)(2/3 ページ)

[杉山俊春, Illustrated by はるぷ,三井物産セキュアディレクション株式会社]

星野君の検査には見落としがあります!

 ミーティングの開始時間を5分ほど過ぎたところで、ようやく高橋さんが姿を現した。

高橋さん 「じゃあ、早速始めますか。まずは……」

 高橋さんによる大まかな仕様の確認が終わって、星野君へとバトンタッチされた。星野君は用意してきた資料に基づき、発見した脆弱性についての説明を行った。今回発見した脆弱性の話は、以前行ったWebアプリケーション検査と似た話であったので、すんなり説明できた。開発会社の2人にもちゃんと理解してもらえたようで一安心だ。

 最後に、赤坂さんの説明に移った。赤坂さんには、事前に高橋さん経由で星野君の資料が渡っていたみたいで、星野君の説明内容を踏まえたうえでの話になるようだ。

赤坂さん 「それでは、いまの星野君の検査結果を補足しますね。このWebアプリケーションにはクロスサイトリクエストフォージェリが存在しています」

 赤坂さんは星野君が発見できなかった脆弱性について話を始めた。クロスサイトリクエストフォージェリ(Cross-Site Request Forgeries:CSRF)という脆弱性によって他人のパスワードの変更が可能だというのだ。

 星野君にとってクロスサイトリクエストフォージェリは、いわゆる「はまちちゃん」騒動【注】で一時期話題になったという記憶があるだけで、詳しいことは知らなかった。開発会社の2人もこの脆弱性については知らないらしく、赤坂さんはクロスサイトリクエストフォージェリがどういう脆弱性かというところから説明を始めた。

【「はまちちゃん」騒動】
2005年4月、ソーシャルネットワークサービス「mixi」において、ユーザーが外部のWebサイトに書き込まれたURLをクリックすることで、mixi内の日記に「ぼくはまちちゃん」と勝手に書き込まれる問題が発生した。このいたずらはクロスサイトリクエストフォージェリを利用したものだった。


クロスサイトリクエストフォージェリって何だ?

 クロスサイトリクエストフォージェリは、クロスサイトスクリプティングと名前が似ているため混同されがちだが、原因も対策も根本的に異なる脆弱性だ。

 クロスサイトスクリプティングやSQLインジェクションなどの脆弱性の場合、ユーザーからの不正な入力に対して、入力値が正しくチェックされてなかったり、サニタイジングがなされていなかったりといったWebアプリケーションの処理の不足を利用して攻撃が行われる。

 しかし、クロスサイトリクエストフォージェリの特徴は、「正規ユーザー」から送られてくる「不正な文字列を含んでいない」HTTPリクエストでも攻撃が成立してしまうという点にある。代表的な被害には、ユーザーが意図しない日記・掲示板への書き込み、オンラインショップでの買い物や、今回赤坂さんの発見したパスワードの変更のような登録情報の変更・削除などが挙げられる。

赤坂さん 「では、実際に今回のWebアプリケーションがどのようになっているかを説明しますね」

 赤坂さんは実際にどのように攻撃が成り立つのか説明を始めた。

赤坂さん 「このWebアプリケーションでは、Cookieを利用してセッション管理を行っています。そのため該当ページにアクセスすると、ブラウザから送信されるCookieの情報を使用してユーザーの特定を行います」

斉藤さん 「それって、普通どこのサイトでもやってるんじゃないの?」

 ここまで脆弱性の説明を黙って聞いていた開発会社の斉藤さんが、何やら不満そうな表情をしながら赤坂さんの説明に割って入った。

赤坂さん 「はい、これ自体は別に悪いことではないのですが、パスワード変更の際に送信されるパラメータに問題があるんです」

 パスワード変更画面の入力フォームから送信されるパラメータの該当部分のHTMLソースは以下のようになっている。

<form action=”./changePassword.do” method=”POST”>
<input type=”password” name=”newpass1” value=””>
<input type=”password” name=”newpass2” value=””>
<input type=”reset” value=”リセット”>
<input type=”submit” value=”送信”>
</form>

赤坂さん 「ここでは、新パスワード『newpass1』と、新パスワードの確認用『newpass2』の2つのパラメータしか送っていません。例えば、悪意を持った人がこの2つの値を送信させるわなのページを作ったとします。正規ユーザーがこのわなを踏んでしまうと、Webブラウザから送信されるCookieを使って正規ユーザーだと特定されたうえで、意図していないパスワード変更が行われてしまいます。新しいパスワードは悪意を持った人が指定したパスワードになるので、変更したパスワードを使って正規ユーザーになりすます、なんていう2次被害も考えられますね」

星野君 「へぇ〜……」

今回のWebアプリケーションがCSRF攻撃を受けた際の動作

 星野君は、初めてクロスサイトリクエストフォージェリがどういうものか知ったので思わず感嘆の声を漏らしてしまった。その瞬間、赤坂さんにいちべつされたような気がしてちょっとあせった。

CSRFの解説を聞き、思わず感嘆の声を漏らす星野君

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。