■投稿した理由
以下記載の通りブラウザでのSamesite属性の制御についての猶予が近づいているため、本件について投稿してみました。
(Apr 27, 2022) LegacySameSiteCookieBehaviorEnabledForDomainList will be available until at least Jun 27, 2023. We will be monitoring feedback and will provide updates on its lifetime as appropriate.
(2022 年 4 月 27 日) LegacySameSiteCookieBehaviorEnabledForDomainList は、少なくとも 2023 年 6 月 27 日まで利用できます。フィードバックを監視し、必要に応じて有効期間の更新を提供します。
■Samesite属性の問題とは
CSRF対策としてSamesite属性が明示されていない場合におけるブラウザでのデフォルトの振る舞いがNoneからLaxに変更された事に伴い、
クロスサイトでのCookie連携が実施出来ない場合がある問題。
HTTPリクエストヘッダーにてSamesite属性が明示されていない場合、ブラウザとしてSamesite属性をLaxとして振る舞う事により
TopLevelNavigationかつSafeメソッド(GET,HEAD,OPTIONS,TRACE)の場合のみCookieが送信されるので、以下の様な場合においてCookie連携が出来ない。
⇒ Iframeを利用している。(TopLevelNavigationではない)
⇒ POST通信を利用している。(Safeメソッドではない)
最も簡単な問題回避方法としてはブラウザ側の設定変更により、
Samesite属性の取り扱いを以前のバージョンと同じように、Samesite属性が明示されていない場合にSamesite属性:Noneとして振る舞うように変更する事である。
<SameSite 属性について>
Cookie の SameSite 属性は、Cookie をファースト パーティまたは同じサイトのコンテキストに制限するかどうかを指定します。SameSite のいくつかの値が許可されています。
「SameSite=Strict」の Cookie は、同一サイト リクエストでのみ送信されます。
「SameSite=Lax」の Cookie は、同一サイト リクエスト、または「安全な」HTTP メソッドを使用したクロスサイト トップレベル ナビゲーションで送信されます。
「SameSite=None」の Cookie は、同一サイト要求とクロスサイト要求の両方で送信されます。
■ブラウザ側での制御の歴史
Samesite属性が明示されていない場合にSamesite属性:Noneとして取り扱う、以前までのブラウザの振る舞いをする為のポリシーは以下2種類存在するが
1つは既に廃止済み、もう1つも近い将来廃止予定となっております。
・LegacySameSiteCookieBehaviorEnable
(Samesite属性の振る舞いを従来通りに戻すポリシー)
⇨ Chrome、Edge94以降で廃止済み
・LegacySameSiteCookieBehaviorEnabledForDomainList
(ドメイン単位に振る舞いを戻すポリシー)
⇨ 少なくとも2023年6月27日までは利用可能。(2022/10/18時点の情報)
■対処方法
2023年6月28日以降のバージョンのChrome、Edgeにおいては上記設定が使えない為、以下の様な対処が考えられる。
1.Laxの影響を受けないシステムデザインへ変更する
(例:POST通信からGET通信への変更など)
2.Cookie連携しないシステムデザインへ変更する
(例:APIの開発)
3.Cookie発行するサーバにてSamesite属性=Noneを指定する
※通信のHTTPS化が同時に必要となる。
(少なくともブラウザ側でHTTPS化していれば良いので、通信経路上でHTTPへの復号化処理が出来ればバックエンドの業務サーバの改修は不要な場合もある。)
4.ブラウザのバージョンを塩漬けする
※バージョンアップ以外でセキュリティが担保できる仕組みがあれば可能であるが、いずれ限界は来ると思われる。。。
■参考にしたサイト
<CSRF(クロスサイトリクエストフォージェリ)>
https://www.ipa.go.jp/security/vuln/websecurity-HTML-1_6.html
<Samesite属性について>
https://numb86-tech.hatenablog.com/entry/2020/01/26/112607
<LegacySameSiteCookieBehaviorEnabled>
https://support.google.com/chrome/a/answer/10314655#93
https://learn.microsoft.com/ja-jp/deployedge/microsoft-edge-policies#legacysamesitecookiebehaviorenabled
<LegacySameSiteCookieBehaviorEnabledForDomainList>
https://www.chromium.org/administrators/policy-list-3/cookie-legacy-samesite-policies/