PKCE†
- Proof Key for Code Exchange by OAuth Public Clients
- ピクシー
- RFC7636
- 認可コード横取り攻撃対策
- パブリッククライアント(主にスマホアプリ)でOAuth を利用する場合の脆弱性を防ぐ仕組み
攻撃手法†
- 攻撃者が用意した不正なスマホアプリを誤ってインストールさせる
- 正規のスマホアプリからの認可リクエストに対する認可サーバからの認可レスポンスを不正アプリが受信して、認可コードを不正に入手する
- 認可レスポンスがブラウザ経由でアプリに連携される際に、ブラウザは送り先のアプリをカスタムスキームとクライアントIDで判別する
- 不正アプリは正規のアプリと同じカスタムスキームとクライアントIDを利用することで横取りが成立してしまうことがある
PKCE の仕組み(攻撃の対策方法)†
使うもの†
- チャレンジコード
- 検証コードを元に生成する
- plain(検証コードそのまま)
- S256(Base64-URL(SHA-256(検証コード)))
フロー†
- スマホアプリが認可サーバに送る認可リクエストにチャレンジコードを追加する
- 認可サーバはチャレンジコードを保存する
- スマホアプリが認可サーバに送るトークンリクエストに検証コードを追加する
- 認可サーバは検証コードを検証する
- 検証コードからチャレンジコードを生成する
- 生成したチャレンジコードと保存していたチャレンジコードが一致しているか確認する
関連用語†