話題の“まだ作成していないユーザーアカウント”を先回りして乗っ取る攻撃について図でまとめてみた

## 概要

アカウントを乗っ取る攻撃が私の中で話題だったので、理解しようと努めましたという記事です。
その元記事はこちら↓

https://www.itmedia.co.jp/news/articles/2207/07/news050.html
```
防げなかったサイトには、ZoomやInstagram、Dropbox、LinkedInなどが含まれた。
```

とのことなので、有名サイトでもこの脆弱性を抱えていることになります。
この記事に出てくる攻撃方法は **5つ** あり、文章だとピンと来なかったのでシーケンス図に書き出してみました。
乗っ取りはすごい怖いですね... [RDSの本番DBをtruncateしていく](https://qiita.com/KeijiYONEDA/items/ff5d3fdb49f8350314dd)よりも下手したら損害が出る可能性もあるのでは？と思ってしまいます。
さて、本記事はこんなことかな？とふんわり書いているので、間違っていたら指摘していただけると嬉しいです :bow: 


## Classic-Federated Merge Attack

>攻撃者が被害者のメールアドレスを使い、先回りしてサービスのアカウントを作成しておく。被害者が「Googleでログイン」などでそのサービスにログインした場合にアドレスが統合されるため乗っ取りが成功する。攻撃者が設定したパスワードでログインできる。

![スクリーンショット 2022-07-08 1.20.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/632997/ac508a26-5ba9-14a1-d48b-5a01db9976b6.png)



## Unexpired Session Identifier Attack

>こちらも被害者のメールアドレスで先回りしてアカウントを作成しておき、定期的に訪問しログイン状態を維持する。この状態で被害者が同じアドレスで新規登録しようとすると「このメールアドレスは既に登録されています」と表示されるため、ログイン画面からパスワードのリセットをかける。リセットしても攻撃者がログインしていたセッションは切れないため、乗っ取りに成功する。

![スクリーンショット 2022-07-08 1.20.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/632997/ebac07e8-c962-6981-66f6-30723f214a5f.png)


## Trojan Identifier Attack

>先回りして被害者のメールアドレスでアカウントを作成しておき、そのアカウントと攻撃者のIdP（Identify Provider）アカウントをひもづける。この状態で被害者が同じアドレスで新規登録しようとすると「このメールアドレスは既に登録されています。」と表示されるため、ログイン画面からパスワードのリセットをかける。 攻撃者のIdPアカウントでもログインできるため、乗っ取りに成功する。

![スクリーンショット 2022-07-08 1.20.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/632997/4f48b01d-364e-a4b4-5bdb-00d0fbc0f57c.png)


## Unexpired Email Change Attack

>先回りして被害者のメールアドレスでアカウントを作成した後に、攻撃者のメールアドレスに変更するようサービスに申請する。この状態で被害者が同じアドレスで新規登録しようとすると「このメールアドレスは既に登録されています」と表示されるため、ログイン画面からパスワードのリセットをかける。
 攻撃者には先ほどのメールアドレス変更の確認メールが届いているため、その変更を確定する。これで攻撃者のメールアドレスでログインできるようになるため乗っ取りに成功する。

![スクリーンショット 2022-07-08 1.20.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/632997/e98cbbe7-90b3-9292-8657-d50311fa2f38.png)



## Non-Verifying IdP Attack

>メールアドレスの所有者を確認しないIdP（クラウドサービスなどにアクセスするユーザーの認証情報を保存、管理するもの）で被害者のメールアドレスを使ってアカウントを作成しておく。被害者がメールアドレスでアカウントを新規登録すると、IdPのアドレスが統合されるため乗っ取りに成功する。

![スクリーンショット 2022-07-15 0.01.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/632997/c12b5287-531f-1784-8252-988fab7c3777.png)


※追記(2022-07-14) [@defenceability
](https://twitter.com/defenceability)さんにご指摘いただき Non-Verifying IdP Attack のシーケンスを一部修正いたしました。


## 攻撃の成立要因

| 要因 | 内容 |
| --- | --- |
| A | Webサイトがemailの本人確認をせずにアカウントの作成を許可 |
| B | SSOした際に既存のemail と同じアカウントがあればアカウントを統合する | 
| C | パスワードリセットをした場合に既存のセッションを無効にしない | 
| D | 異なるemailを持つ2つのアカウントの紐付けができる |
| E | email変更の本人確認URLの期限が長い/パスワードリセットされた時点で無効にしない |
| F | emailの本人確認をせずにアカウントの作成ができるIdPのSSOを許可している |


| 攻撃名 | 攻撃を成立する条件 |
| --- | --- |
| Classic-Federated Merge Attack | A かつ B |
| Unexpired Session Identifier Attack | A かつ C | 
| Trojan Identifier Attack | A かつ D |
| Unexpired Email Change Attack | A かつ E |
| Non-Verifying IdP Attack| F かつ B |

## まとめ

利便性を求めるとこうした脆弱性が出てきてしまうのは世の常ですね...
超有名サービスでもこうした脆弱性があるので、日頃からセキュアな視点を磨いていきたいものです。


## 参考


https://www.microsoft.com/en-us/research/publication/pre-hijacked-accounts-an-empirical-study-of-security-failures-in-user-account-creation-on-the-web/