デンマークSecuniaなどは9月18日,Internet Explorer(IE)やMozilla,Firefox,KonquerorといったWebブラウザに,Cookieの取り扱いに関するセキュリティ・ホールがあることを公表した。悪用されると,正規ユーザーになりすました攻撃者にWebアプリケーションなどにログインされる可能性がある。ただし,危険性はそれほど高くはない。Secuniaでは,深刻度を「Less Critical」としている。ユーザーの対策は,信頼できないリンクをクリックしないこと。Konquerorについてのみ,修正パッチが公開されている

Cookieの取り扱いに問題

 WebブラウザとWebサーバーのやり取りに使われるHTTPは,ステート・レスなプロトコルである。Webサーバーには,あるHTTPアクセスが,同じユーザーからの連続したアクセスなのか,別のユーザーからのアクセスなのか区別できない。そこで,誰からのアクセスであるのかを識別するために,セッションを管理する必要がある。

 現在,セッション管理にはCookieがよく利用される。Webサーバーは,セッションIDを含めたCookieをWebブラウザに送信しておく。WebブラウザがそのWebサーバーにアクセスするたびにCookieは自動的に送信されるので,サーバーはどのユーザーからのアクセスなのかを識別できる。

 Webブラウザは,Cookieが送られてきたサーバー(ドメイン)へアクセスするときだけ,そのCookieを送信する。つまり,例えば「red.example.com」から送られたCookieは,red.example.comへアクセスするときだけ送信する。別のドメインから送られたCookieをred.example.comへ送信することはない。red.example.comから送られたCookieを別のドメインへ送信することもない。

 ところが,IEやMozillaなどは,あるドメインから送られたCookieを別のドメインへ送信する場合がある。つまり,悪意があるドメインから,正規のドメイン(Webでサービスを提供するドメイン)へ送られるCookieを送り込まれる危険性がある。それが,今回明らかにされたセキュリティ・ホールである。Secuniaでは「Cross-Domain Cookie Injection Vulnerability」と呼んでいる。

 もう少し具体的に説明しよう。Cookieには,「domain」属性と呼ばれるオプションがある。例えば,「domain=.example.com」としたCookieがred.example.comから送られてきた場合には,red.example.comだけではなく,ドメイン名が「.example.com」で終わるドメインにアクセスするときにはいつもそのCookieが送られることになる。

 ただし,domain属性にトップ・レベル・ドメイン(TLD)を指定した場合,例えば「domain=.com」などとした場合には,ブラウザはこのCookieを受け付けないようになっている。もしこれを許すと,悪意があるcomドメインから送り込まれたCookieを,他のcomドメインにアクセスするたびに送信することになるからだ。HTTPのセッション管理などを規定したRFC2965には,「The value for the Domain attribute contains no embedded dots」と記述されている。

 だが,実際にはこの規定だけでは不十分である。TLDではなく,「.co.uk」や「.ne.jp」のように,国別ドメインを持つドメインがあるからだ。例えば,red.example.co.ukから「domain=.co.uk」としたCookieが送られると,そのCookieは,.co.ukで終わるドメインすべてに送られることになる。実際,MozillaやFirefoxは,この仕様になっている。

 今回のセキュリティ・ホールを報告したWestpointによると(Secuniaの発表情報はWestpointの情報に基づいている),IEやKonquerorでは,RFC2965の規定に加えて,国別ドメインにも対応している。具体的には,domain属性に指定されたドメインが「セカンド・レベル・ドメインが2文字以下の場合(xx.yyやx.yyで終わるドメイン)」と「comやnet,milなどと国別ドメインの組み合わせの場合((com|net|mil|org|gov|edu|int).yy)には,そのCookieを受けつけないようにしている。

 しかしWestpointでは,これでも不十分だとしている。.ukドメインを例に取れば,「ltd.uk」「.plc.uk」「.sch.uk」「.nhs.uk」といったdomain属性は許してしまうからだ。IEや(パッチ未適用の)Konquerorでも,対象は限定されるものの,別のドメインへ送信するようなCookieを送り込まれる可能性があるのだ。

攻撃者がセッションIDを“指定”

 それでは,なぜ「悪意があるドメインから,正規のドメインへ送られるCookieを送り込まれる危険性がある」と,なりすましを許す恐れがあるのか。Cookieを盗まれれば,セッションIDを盗まれることになるので,なりすまされる危険性があるが,今回のセキュリティ・ホールは逆である。これを理解するには,他人のセッションIDを知る方法の一つである「Session Fixation(セッション固定)」攻撃を知る必要がある。

 通常,セッションIDを含むCookieは,正規のWebサーバーからユーザーのWebブラウザへ送信される。そして,そのセッションIDでWebサーバーはユーザーを識別する。このセッションIDを盗んで(あるいは推測して),そのユーザーになりすますのが「セッション・ハイジャック」などと呼ばれる攻撃である。

 セッション固定攻撃では,任意のセッションIDを埋め込んだCookieを,攻撃者のサイト(ドメイン)からユーザーのブラウザに送り込んでおく。具体的には,Webページやメールのリンクなどで,攻撃者のサイトへ誘導してCookieを送り込む。例えば,攻撃者のサイトが「mal-attacker.co.uk」の場合には,「domain=.co.uk」とし,セッションID(SID)に任意の文字列を含めたCookieを送り込んでおく。

 そうすれば,そのユーザーがMozillaあるいはFirefoxを使っている場合には,mal-attacker.co.ukに再びアクセスする場合だけではなく,.co.ukで終わるサイトにアクセスする際には,このCookieを送信することになる。そのユーザーが,例えばred.example.co.ukにアクセスした場合には,そのセッションIDでred.example.co.ukにログインを試みることになる。そのユーザーがログインに成功すれば,そのセッションIDは認証されたとみなされる。その後,攻撃者はそのセッションIDを使って,正規ユーザーになりすます。

 現実的なシナリオとしては,以下が想定できる。まず,攻撃者はmal-attacker.co.ukサイトを,red.example.co.ukに見せかけておく。そして,偽のメールなどでred.example.co.ukのユーザーを偽サイト(mal-attacker.co.uk)へ誘導し,任意のセッションIDを含むCookieを送り込む。その後,すぐにred.example.co.ukのログイン・ページにリダイレクトする。ユーザーがログインに成功したら,攻撃者は送り込んだCookieに記述したセッションIDで,そのユーザーになりすます――。

 セッション固定攻撃の詳細は,セキュリティ・ベンダーAcrosが2002年に公開した「Session Fixation Vulnerability in Web-based Applications」に詳しい(PDFファイル)。今回のセキュリティ・ホールがなくても,セッション固定攻撃は可能である。今回のセキュリティ・ホールは,セッション固定攻撃をしやすくするものである。とはいえ,セキュリティ・ホールを“利用”しても,セッション固定攻撃を“成功”させることは,それほど容易ではないと考えられる。しかし,このような攻撃方法が存在することを,ユーザーはもちろん,Webアプリケーションの開発者は知っておくべきだ。Acrosの情報には,開発者が施すべき対策が記述されているので,目を通すことをお勧めする。

◎参考資料
Multiple Browser Cookie Injection Vulnerabilities(Westpoint)
Internet Explorer Cross-Domain Cookie Injection Vulnerability(Secunia)
Mozilla/Mozilla Firefox Cross-Domain Cookie Injection Vulnerability(Secunia)
Konqueror Cross-Domain Cookie Injection Vulnerability(Secunia)
fix cookie domain checks to not allow .co.uk(Bugzilla)
Session Fixation Vulnerability in Web-based Applications(Acros Security,PDFファイル)
KDE Security Advisory: Konqueror Cross-Domain Cookie Injection

(勝村 幸博=IT Pro)