2017年11月30日木曜日

IEのクッキーモンスターバグはWindows 10で解消されていた

エグゼクティブサマリ

IEのクッキーモンスターバグはWindows 10では解消されているが、Windows 7とWindows 8.1では解消されていない。このため、地域型JPドメイン名と都道府県型JPドメイン名上のサイトは、クッキーが外部から書き換えられるリスクが現実的に存在しするので、セキュリティ対策上もクッキー書き換えのリスクを考慮しておく必要がある。

クッキーが外部から変更された際のリスク

ウェブサイトの利用者が第三者によりクッキーの値を変更されると、以下のような攻撃が可能になります。
  • セッションIDの固定化攻撃(脆弱性がある場合)
  • クッキーを攻撃経路とするクロスサイトスクリプティング攻撃(脆弱性がある場合)
  • 一部のCSRF対策の回避
「一部のCSRF対策」と書いたのは、OWASPの資料ではDouble Submit Cookieと呼ばれるもので、乱数値をクッキーとリクエストパラメータの両方に持たせ、両者が一致していれば正規のリクエストとみなすという方法です。OWASP公認の方法のせいか、脆弱性診断でよく見かけます。私の知っている限り、以下のアプリケーションフレームワークのCSRF対策として採用されています。
  • FuelPHP
  • CodeIgniter
  • Django
いずれもメジャーなものですね。他にもきっとあると思います。
Double Submit Cookieは、サーバー側で状態を保持する必要が無いため、RESTとの相性が良いというのも最近好まれる理由かと思いますが、外部からクッキーを変更されないことを前提しているところが微妙なところです。
筆者の所属企業の脆弱性診断サービスでは、Double Submit CookieによるCSRF対策は指摘対象となっていて、危険度は状況によりInformationからMediumまで変わり得ます。

クッキーを外部から変更する方法

クッキーを第三者が変更する方法ってあるの? と思われた方も多いと思いますが、以下のような方法により可能です。
  • クッキーモンスターバグ(対象ドメインかつ対象ブラウザの場合)
  • HTTPSを使っているサイト(参考
  • クロスサイトスクリプティング脆弱性がある場合
  • HTTPヘッダインジェクション脆弱性がある場合
  • サブドメインに信頼できないサイトがあるか、XSS等の脆弱性がある場合
このうち、脆弱性によるものは当該の脆弱性を修正すればよいとして、「アプリケーションに脆弱性がないのにクッキーが書き換えられる」ものは、クッキーモンスターバグとHTTPSを使っている場合です。後者は以前詳しく説明したので、本稿では、クッキーモンスターバグについて取り上げます。

クッキーモンスターバグとは

東京都のサイトを例として説明します。東京都のサイトは、地域型JPドメイン名を使っていて、ホスト名は www.metro.tokyo.jp です。ここで、example.tokyo.jp という都道府県型JPドメイン名の罠サイトから、domain=tokyo.jp のクッキーが設定できたとすると、この罠サイトを閲覧したユーザーは、東京都のサイトで有効なクッキーを設定・変更されてしまうことになります。 
通常このようなSet-Cookieはできないはずなのですが、Internet Explorer(IE)は伝統的に(?)このようなクッキーを受け入れてしまいます。この種の問題はクッキーモンスターバグ(Cookie Monster Bug)と呼ばれます。

Windows 10 でクッキーモンスターバグを検証してみた

IEのクッキーモンスターバグは最近でも有効なのだろうかと思い、全ての更新プログラムを適用したWindows 8.1 と Windows 10で確認してみました。Windows 10では、Edgeも同様に検証しています。試験用のドメイン名としては、kawaguchi.tokyo.jpとtokumaru.bunkyo.tokyo.jpを用いました。その結果は下記のとおりです。


ドメイン名ドメイン属性Windows 8.1Windows 10
IE11IE11Edge
kawaguchi.tokyo.jp tokyo.jp 設定可設定不可設定不可
tokumaru.bunkyo.tokyo.jp tokyo.jp 設定可設定不可設定不可
bunkyo.tokyo.jp 設定可設定不可設定不可

結論としては、Windows 10では、IE、Edgeともクッキーモンスターバグは解消されています。厳密にどのタイミングで解消されたかは追えてないのですが、Windows 10の初期の版から解消されていることを確認していますので、Windows 10が登場したタイミングで解消されたのではないかと予想しています。

クッキーモンスターバグとどう付き合うべきか?

とは言え、Windows 7とWindows 8.1ではIEのクッキーモンスターバグは解消されておらず、上記の経緯から予想するに、これらでは解消される見込みは薄いと考えます。これらのWindowsがサポート終了となるのは、それぞれ2020年1月14日と2023年1月10日ですから、少なくともWindows 8.1がサポート終了となる2023年1月までは、クッキーモンスターバグのことは想定しておかなければならないことになります。

脆弱性対処との関係

セッションIDの固定については、ログイン時にセッションIDを振り直すという標準的な対策を取っていれば、クッキーモンスターバグの影響は受けません。
問題は、Double Submit CookieによるCSRF対策の回避です。こちらは簡単な対応策がありません。このため、IEのクッキーモンスターバグの影響がある地域型JPドメインおよび都道府県型JPドメイン名のサイトでは、Double Submit CookieによるCSRF対策は避けて、別の方法で対策するべきではないかと考えます。
なお、クッキーモンスターバグの影響がない場合でも、通信経路上に攻撃者が存在する場合は、中間者攻撃によりHTTP側でクッキーを改変できます。筆者の所属企業ではDouble Submit CookieによるCSRF対策を(危険度は様々だが)常に指摘対象としているのは、こちらの攻撃経路を考慮しているためです。

まとめ

クッキーモンスターバグの現状について報告しました。現状の見通しとしては、Windows 8.1のサポートが終了するまでの約5年間は、地域型JPドメイン名と都道府県JPドメイン名においては、クッキーが外部から変更されるリスクを多めに見積もる必要があります。その結果、少なくともこれらのドメイン名上に置かれるウェブサイトにおいては、Double Submit CookieによるCSRF対策は避けるべきだろうと考えます。


PR記事

OWASP Top 10 2017に対する弊社脆弱性診断の対応

フォロワー