better-auth: OAuth Proxy を使用すると、攻撃者が別のユーザーになりすます可能性がある
## 影響はありますか?
`better-auth` の 1.5.0-beta.12 から 1.7.7 までのバージョンを使用しており、OAuth Proxy プラグインを導入している場合、影響を受ける可能性があります。ただし、以下のすべての条件に該当する場合にのみ影響を受けます。
- 該当する環境において、OAuth Proxy プラグインが専用の `secret` を持っていない、またはその `secret` が、その環境のグローバルな Better Auth の `secret` と一致している。
- ログイン状態が Cookie に保存されている (`account.storeStateStrategy: "cookie"`)。データベースや別のストレージを使用している場合は、明示的にそのように設定した場合に限ります。
- 暗黙的なアカウント連携が有効になっている(デフォルト)。
すべての該当する環境で、プロキシの `secret` がグローバルな Better Auth の `secret` と異なっている場合、ログイン状態がデータベースに保存されている場合、または 1.5.0-beta.12 以前のバージョンを使用している場合は、この問題の影響を受けません。
## 概要
OAuth Proxy プラグインは、復号できるすべてのユーザープロファイルを信頼します。影響を受ける設定では、Better Auth が、呼び出し元が選択したデータを含むログイン状態を、同じ `secret` で暗号化し、ソーシャルログインを開始するすべてのユーザーに提供します。攻撃者は、この仕組みを利用して、プロキシが有効なものとして受け入れる、別のユーザーのメールアドレスに関連付けられた偽のプロファイルを取得できます。
## 影響
アカウントを持っていない攻撃者が、あるユーザーの検証済みのメールアドレスを知っている場合、そのユーザーになりすまし、そのユーザーの権限で操作を行うことができます。これにより、プライベートデータの閲覧、アカウントの変更、および任意のプロバイダーアカウントとの連携が可能になります。被害者は、プロバイダーへのログインや、その他の操作を行う必要はありません。可用性への影響は確認されていません。また、報告されたオープンリダイレクトの事例も確認されていません。
## 修正
この問題に対する修正は、予定されている `better-auth` 1.7.7 リリースのバージョンに統合されています。ただし、このパッケージはまだ提供されていません。
同じCookieベースのOAuthまたはSAMLの状態フローを処理するすべてのノード、およびOAuth Proxyのすべての参加者(本番環境のコーディネーター、プレビュー環境、開発環境を含む)をまとめてアップグレードしてください。インストールされているBetter Authパッケージは、`better-auth`と同じリリースバージョンで維持してください。未完了のサインインおよびアカウント連携フローを再開します。アップグレード前の状態のCookieおよびプロキシペイロードは拒否されます。公開オプションおよびAPIの署名は変更されていません。
## ワークアラウンド
修正されたリリースにアップグレードするまでは、以下のいずれかの方法を適用してください。
- すべての環境で、OAuth Proxyの`secret`を1つ設定し、各環境のグローバルなBetter Authのシークレットとは異なるものにしてください。
- `account.storeStateStrategy: "database"`を設定します。これは、データベースまたはセカンダリストレージが構成されている場合にデフォルトの設定です。Magic Linkも有効になっている場合、この設定を変更すると、影響を受けるリリースで、別の検証レコードのパスが公開される可能性があります。2つのフローが異なる保存識別子に解決されるようにしてください。組み込みのオプションを使用する場合は、Magic Linkで`storeToken: "hashed"`を使用し、グローバルな`verification.storeIdentifier`を未設定または`"plain"`に設定するか、Magic Linkまたは組み込みのソーシャルおよび汎用OAuthサインインを無効にしてください。
- OAuth Proxyプラグインが不要な場合は、削除してください。
`account.accountLinking.disableImplicitLinking: true`を設定すると、このパスが既存のアカウントを乗っ取るのを防ぐことができます。ただし、これは根本的な問題を修正するものではありません。コールバックは、依然として攻撃者が作成したデータをプロバイダーのIDとして受け入れる可能性があります。上記のいずれかの手順も適用してください。
影響を受けるパッケージ:
- npm (JavaScript) better-auth: 影響を受けるバージョンは、>= 1.5.0-beta.12、< 1.7.7。1.7.7で修正されました。