hacktricks/src/pentesting-web/reset-password.md

174 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# パスワードリセット/忘れたパスワードのバイパス
{{#include ../banners/hacktricks-training.md}}
## **リファラーによるパスワードリセットトークンの漏洩**
- HTTPリファラーヘッダーは、URLに含まれている場合、パスワードリセットトークンを漏洩させる可能性があります。これは、ユーザーがパスワードリセットをリクエストした後に、サードパーティのウェブサイトリンクをクリックしたときに発生する可能性があります。
- **影響**: クロスサイトリクエストフォージェリCSRF攻撃によるアカウントの乗っ取りの可能性。
- **悪用**: リファラーヘッダーにパスワードリセットトークンが漏洩しているか確認するには、**パスワードリセットを**自分のメールアドレスにリクエストし、**提供されたリセットリンクをクリック**します。**すぐにパスワードを変更しないでください**。代わりに、**Burp Suiteを使用してリクエストを傍受しながら、サードパーティのウェブサイト**FacebookやTwitterなどに**移動します**。リクエストを検査して、**リファラーヘッダーにパスワードリセットトークンが含まれているか**確認します。これにより、第三者に機密情報が露出する可能性があります。
- **参考文献**:
- [HackerOne Report 342693](https://hackerone.com/reports/342693)
- [HackerOne Report 272379](https://hackerone.com/reports/272379)
- [パスワードリセットトークン漏洩に関する記事](https://medium.com/@rubiojhayz1234/toyotas-password-reset-token-and-email-address-leak-via-referer-header-b0ede6507c6a)
## **パスワードリセットポイズニング**
- 攻撃者は、パスワードリセットリクエスト中にHostヘッダーを操作して、リセットリンクを悪意のあるサイトに指向させる可能性があります。
- **影響**: リセットトークンが攻撃者に漏洩することによるアカウントの乗っ取りの可能性。
- **緩和策**:
- 許可されたドメインのホワイトリストに対してHostヘッダーを検証します。
- 絶対URLを生成するために、安全なサーバーサイドの方法を使用します。
- **パッチ**: `$_SERVER['HTTP_HOST']`の代わりに`$_SERVER['SERVER_NAME']`を使用してパスワードリセットURLを構築します。
- **参考文献**:
- [パスワードリセットポイズニングに関するAcunetixの記事](https://www.acunetix.com/blog/articles/password-reset-poisoning/)
## **メールパラメータを操作してのパスワードリセット**
攻撃者は、リセットリンクを誘導するために追加のメールパラメータを追加することで、パスワードリセットリクエストを操作できます。
- 攻撃者のメールを第二のパラメータとして&を使用して追加します。
```php
POST /resetPassword
[...]
email=victim@email.com&email=attacker@email.com
```
- 攻撃者のメールアドレスを2番目のパラメータとして%20を使用して追加します。
```php
POST /resetPassword
[...]
email=victim@email.com%20email=attacker@email.com
```
- 攻撃者のメールアドレスを2番目のパラメータとして|を使用して追加します。
```php
POST /resetPassword
[...]
email=victim@email.com|email=attacker@email.com
```
- 攻撃者のメールアドレスを2番目のパラメータとしてccを使用して追加します。
```php
POST /resetPassword
[...]
email="victim@mail.tld%0a%0dcc:attacker@mail.tld"
```
- 攻撃者のメールアドレスを2番目のパラメータとしてbccを使用して追加します。
```php
POST /resetPassword
[...]
email="victim@mail.tld%0a%0dbcc:attacker@mail.tld"
```
- 攻撃者のメールアドレスを2番目のパラメータとして追加します。
```php
POST /resetPassword
[...]
email="victim@mail.tld",email="attacker@mail.tld"
```
- JSON配列の2番目のパラメータとして攻撃者のメールアドレスを追加します。
```php
POST /resetPassword
[...]
{"email":["victim@mail.tld","atracker@mail.tld"]}
```
- **緩和手順**:
- サーバー側でメールパラメータを適切に解析および検証します。
- インジェクション攻撃を防ぐために、プリペアードステートメントまたはパラメータ化クエリを使用します。
- **参考文献**:
- [https://medium.com/@0xankush/readme-com-account-takeover-bugbounty-fulldisclosure-a36ddbe915be](https://medium.com/@0xankush/readme-com-account-takeover-bugbounty-fulldisclosure-a36ddbe915be)
- [https://ninadmathpati.com/2019/08/17/how-i-was-able-to-earn-1000-with-just-10-minutes-of-bug-bounty/](https://ninadmathpati.com/2019/08/17/how-i-was-able-to-earn-1000-with-just-10-minutes-of-bug-bounty/)
- [https://twitter.com/HusseiN98D/status/1254888748216655872](https://twitter.com/HusseiN98D/status/1254888748216655872)
## **APIパラメータを通じて任意のユーザーのメールとパスワードを変更する**
- 攻撃者はAPIリクエスト内のメールおよびパスワードパラメータを変更してアカウントの資格情報を変更できます。
```php
POST /api/changepass
[...]
("form": {"email":"victim@email.tld","password":"12345678"})
```
- **緩和手段**:
- 厳格なパラメータ検証と認証チェックを確保する。
- 不審な活動を検出し対応するために、堅牢なログ記録と監視を実装する。
- **参考文献**:
- [Full Account Takeover via API Parameter Manipulation](https://medium.com/@adeshkolte/full-account-takeover-changing-email-and-password-of-any-user-through-api-parameters-3d527ab27240)
## **レート制限なし: メールボンピング**
- パスワードリセットリクエストにレート制限がないと、ユーザーがリセットメールで圧倒されるメールボンピングが発生する可能性がある。
- **緩和手段**:
- IPアドレスまたはユーザーアカウントに基づいてレート制限を実装する。
- 自動化された悪用を防ぐためにCAPTCHAチャレンジを使用する。
- **参考文献**:
- [HackerOne Report 280534](https://hackerone.com/reports/280534)
## **パスワードリセットトークンの生成方法を調べる**
- トークン生成のパターンや方法を理解することで、トークンを予測したりブルートフォース攻撃を行ったりできる。いくつかのオプション:
- タイムスタンプに基づく
- ユーザーIDに基づく
- ユーザーのメールに基づく
- 名字と姓に基づく
- 生年月日に基づく
- 暗号に基づく
- **緩和手段**:
- トークン生成に強力な暗号化手法を使用する。
- 予測可能性を防ぐために十分なランダム性と長さを確保する。
- **ツール**: Burp Sequencerを使用してトークンのランダム性を分析する。
## **推測可能なUUID**
- UUIDバージョン1が推測可能または予測可能な場合、攻撃者はそれをブルートフォースして有効なリセットトークンを生成する可能性がある。確認する:
{{#ref}}
uuid-insecurities.md
{{#endref}}
- **緩和手段**:
- ランダム性のためにGUIDバージョン4を使用するか、他のバージョンに対して追加のセキュリティ対策を実装する。
- **ツール**: [guidtool](https://github.com/intruder-io/guidtool)を使用してGUIDを分析および生成する。
## **レスポンス操作: 悪いレスポンスを良いものに置き換える**
- エラーメッセージや制限を回避するためにHTTPレスポンスを操作する。
- **緩和手段**:
- レスポンスの整合性を確保するためにサーバー側のチェックを実装する。
- 中間者攻撃を防ぐためにHTTPSのような安全な通信チャネルを使用する。
- **参考文献**:
- [Critical Bug in Live Bug Bounty Event](https://medium.com/@innocenthacker/how-i-found-the-most-critical-bug-in-live-bug-bounty-event-7a88b3aa97b3)
## **期限切れトークンの使用**
- 期限切れのトークンがパスワードリセットにまだ使用できるかどうかをテストする。
- **緩和手段**:
- 厳格なトークンの有効期限ポリシーを実装し、サーバー側でトークンの有効期限を検証する。
## **パスワードリセットトークンのブルートフォース**
- BurpsuiteやIP-Rotatorのようなツールを使用してリセットトークンをブルートフォースし、IPベースのレート制限を回避しようとする。
- **緩和手段**:
- 堅牢なレート制限とアカウントロックアウトメカニズムを実装する。
- ブルートフォース攻撃を示す不審な活動を監視する。
## **トークンを使用してみる**
- 攻撃者のリセットトークンが被害者のメールと一緒に使用できるかどうかをテストする。
- **緩和手段**:
- トークンがユーザーセッションまたは他のユーザー固有の属性にバインドされていることを確認する。
## **ログアウト/パスワードリセット時のセッション無効化**
- ユーザーがログアウトまたはパスワードをリセットしたときにセッションが無効化されることを確認する。
- **緩和手段**:
- 適切なセッション管理を実装し、ログアウトまたはパスワードリセット時にすべてのセッションが無効化されることを確保する。
## **ログアウト/パスワードリセット時のセッション無効化**
- リセットトークンには、有効期限が設定され、その後無効になるべきである。
- **緩和手段**:
- リセットトークンの合理的な有効期限を設定し、サーバー側で厳格に施行する。
## 参考文献
- [https://anugrahsr.github.io/posts/10-Password-reset-flaws/#10-try-using-your-token](https://anugrahsr.github.io/posts/10-Password-reset-flaws/#10-try-using-your-token)
{{#include ../banners/hacktricks-training.md}}