MS_OAuthThreatModelImplicitFlow - NetDevInfraWGinOSSConsortium/NetDevInfraWiki GitHub Wiki
- 戻る(OAuth 2.0 Threat Model (Flow))
- OAuth 2.0 Threat Model (Implicit Flow)
- OAuth 2.0 Threat Model and Security Considerations
- OAuth 2.0 Security Best Current Practice
OAuth 2.0 Threat Model and Security Considerationsの
Flow に着目した脅威モデルのうち、主に、access_token 漏洩にフォーカスした内容。
補足(Implicit Flow は廃止された): 本ページが列挙している脅威は、
最終的に Implicit Flow そのものの廃止という結論に至った。
OAuth 2.0 Security Best Current Practice と
OAuth 2.1 では、
パブリック クライアントも含めて
Authorization Code + PKCE を使うことになっている。
本ページは「なぜ廃止に至ったか」の記録として読むとよい。
access_token は、
- Fragment identifier で Client に直接返される。
- これにより、HTTP referer(サーバ側)を介しての漏洩はしない。
access_token の漏洩により、
Resource Owner の、その scope のリソースにアクセス可能になる。
移行メモ(空の見出し): 元ページの「access_token 漏洩」節には
「攻撃」「対策」という見出しだけの項目が並んでいたが、
実際の攻撃と対策は以降の各節に個別に書かれているため、
見出しのみの 2 項目は落として「共通項」だけを残した。
盗聴
SSL/TLS の利用
ブラウザ履歴の参照
-
キャッシュを無効化する。
-
access_token
- 短い有効期限
-
scopeを小さくする
補足(Fragment だから安全、ではない): 冒頭にあるとおり
Fragment(#以降)はサーバに送られないため HTTP referer では漏れないが、
ブラウザの履歴・アドレス バー・拡張機能からは見える。
「サーバ側に漏れない」ことと「クライアント側で守られている」ことは別、
というのが Implicit Flow の弱さの核心である。
OAuth 2.0 Threat Model (Authorization code Flow)と同じ。
- DNS または ARP スプーフィング
- 攻撃者のスクリプトをダウンロードする。
- access_token の盗難・漏洩
- スクリプトを取得する CDN などのサーバを認証する。
- スクリプトの改ざんの確認処理を実装する。
- 1 回限りの使用ごとの秘密値の導入などは、
攻撃者のスクリプトの有効性を低下させる。
補足(現在の手段): 「スクリプトの改ざんの確認処理」は、現在は
**SRI(Subresource Integrity)**として
<script integrity="sha384-...">で宣言的に書ける。
併せて Content-Security-Policy で
読み込み元を制限するのが定石である。
Authorization code(OAuth 2.0 Threat Model (Authorization code Flow))と同じ。
Authorization code(OAuth 2.0 Threat Model (Authorization code Flow))と同じ。
-
単なる OAuth 2.0 を認証に使うと、車が通れるほどの
どでかいセキュリティー・ホールができる | @_Nat Zone
https://www.sakimura.org/2012/02/1487/- 攻撃者の構築した Client(A) は、Access Token を収集する。
- 攻撃者は、Access Token 置き換え攻撃により、Client(B) 経由でリソース・アクセスできる。
-
r-weblife
- OAuth 2.0 Implicit Flowをユーザー認証に利用する際のリスクと対策方法について #idcon
http://d.hatena.ne.jp/ritou/20120206/1328484575 - GoogleのOAuth 2.0実装におけるToken置換攻撃の防ぎ方
http://d.hatena.ne.jp/ritou/20120702/1341235859
- OAuth 2.0 Implicit Flowをユーザー認証に利用する際のリスクと対策方法について #idcon
補足(置換攻撃が成立する理由): access_token には
「どのクライアント向けに発行されたか」が書かれていない(Bearer Token)。
このため、攻撃者が自分のサイトで集めたトークンを別のサイトに持ち込んでも、
受け取った側はそれを見抜けない。
OpenID Connect の ID トークンが
aud(宛先)とnonceを含む署名付きトークンとして
別立てで発行されるのは、この穴を塞ぐためである
(「OAuth 2.0 セキュリティ関連トピック」も参照)。
- 本 Wiki 内
Tags: IT国際標準, 認証基盤, クレームベース認証, OAuth