Modern Frontend CVEs

対象CVE: CVE-2026-53517

[緊急解説] Better AuthのOAuthリフレッシュトークン脆弱性 (CVE-2026-53517) - 無期限アクセスを許す危険性

Better Authライブラリにおいて、OAuthのリフレッシュトークンが同時に複数回使われた場合、不正なトークンが生成され、攻撃者による無期限のシステムアクセスを許す可能性がある脆弱性が発見されました。影響を受ける環境では速やかなアップデートが推奨されます。

はじめに:Better AuthライブラリのOAuthリフレッシュトークン脆弱性とは

皆さん、こんにちは。今回は、認証ライブラリ「Better Auth」に発見された、特にフロントエンドアプリケーションの開発者にとって看過できない重大な脆弱性(GHSA-392p-2q2v-4372 / CVE-2026-53517)について解説します。この脆弱性は、OAuthのリフレッシュトークン処理の不備により、攻撃者が正規ユーザーのシステムへのアクセス権を無期限に保持できてしまう可能性を秘めています。

セッション管理や認証フローにおいてリフレッシュトークンを利用している場合、この脆弱性の影響は甚大です。まずは、そのメカニズムと危険性について深く理解していきましょう。

脆弱性の概要:「トークンファミリーの分岐」が生み出す無期限アクセス

この脆弱性は、Better AuthライブラリのOAuthプロバイダーがリフレッシュトークンを更新する際の処理に起因します。通常、リフレッシュトークンはセキュリティの観点から、一度使用されると新しいトークンに交換され、古いトークンは無効化されるべきです。しかし、問題のバージョンでは、同じリフレッシュトークンが複数のリクエストによって「同時に」使われた場合に、想定外の事態が発生します。

具体的には、複数の新しいリフレッシュトークンが生成され、さらに古いトークンも適切に無効化されないという問題が起こります。これはまるで、一本の木から複数の枝が分かれて伸びるように、不正なリフレッシュトークンのグループが生まれることから「トークンファミリーの分岐」と呼ばれています。

この「分岐」が発生すると、攻撃者がその分岐したトークンの一つでも手に入れれば、元のユーザー権限でシステムへのアクセスを無期限に継続できてしまいます。さらに厄介なことに、正規ユーザーがリフレッシュを行っても、攻撃者が既に生成した不正なトークンがシステム上で有効と見なされるため、不正アクセスを検知することが極めて困難になります。

あなたのプロジェクトは影響を受けるのか?確認すべき3つの条件

以下のすべての条件に当てはまる場合、あなたのプロジェクトはこの脆弱性の影響を受ける可能性が高いです。

1. **利用しているライブラリのバージョン:** * `@better-auth/oauth-provider` のバージョンが `>= 1.6.0, < 1.6.11` に依存している。 * または、`better-auth` のバージョンが `>= 1.4.8-beta.7, < 1.6.0` に含まれる組み込みプラグインを使用している。

2. **`offline_access` スコープの許可:** * アプリケーションの認証サーバーが、リフレッシュトークンを発行するための `offline_access` スコープをOAuthクライアントに許可している。

3. **リフレッシュトークンの同時利用が発生しうる状況:** * 例えば、SPA(シングルページアプリケーション)が複数のブラウザタブでリフレッシュトークンを共有し、同時にリフレッシュ要求を出しているケース。 * モバイルアプリが一時的なネットワークエラー後にリクエストをリトライし、結果的に同時に複数回のリクエストが送られるケース。 * または、攻撃者が盗んだトークンを使って、意図的に同時にリクエストを送信しているケース。

もし、どのクライアントも `offline_access` スコープを要求しない設定になっていれば、リフレッシュトークンは発行されないため、この脆弱性の影響は受けません。

最優先の対策:速やかなアップデートと、一時的な回避策

この脆弱性への対応は緊急性が高いです。以下の対応策を速やかに検討してください。

**`@better-auth/oauth-provider@1.6.11` 以降のバージョンにアップグレードしてください。**

このバージョンでは、リフレッシュトークンの更新処理が「アトミックな比較・交換(Compare-And-Swap)」という安全な方法で行われるよう修正されています。これにより、複数の同時リクエストがあった場合でも、正しく新しいトークンが一つだけ発行され、不正なトークンファミリーの分岐は防がれます。また、データベーススキーマにユニーク制約が追加され、不正なトークン発行をさらに防ぐようになっています。(注: 既存のデータベースに対しては、手動でユニーク制約を追加する必要がある場合がありますので、データベースのマイグレーションも合わせて確認してください。)

すぐにアップデートが難しい場合のために、以下の回避策も検討できます。ただし、これらは脆弱性を完全に解決するものではないため、最終的にはアップグレードが必須です。

まとめ:セキュリティの最前線で安全なアプリケーションを

Better Authのこの脆弱性は、リフレッシュトークンを介して認証情報を安全に扱うことの重要性を改めて示しています。特に、SPAやモバイルアプリなど、長期的なセッション維持のためにリフレッシュトークンが多用される現代のフロントエンド開発において、このような脆弱性への対応は不可欠です。

もしあなたのプロジェクトがBetter Authを利用し、かつ前述の条件に当てはまる場合、速やかにバージョンアップを計画・実行し、可能であればデータベーススキーマの確認と更新も行ってください。セキュリティは常に進化し続ける課題です。最新の情報をキャッチアップし、安全なアプリケーション開発を心がけましょう。

← ブログ一覧に戻る