[高深刻度脆弱性] better-authの組織招待機能における不正参加リスク (GHSA-fmh4-wcc4-5jm3 / CVE-2026-53514)
はじめに
フロントエンド開発に携わる皆さん、重要なセキュリティ情報をお伝えします。認証ライブラリ「better-auth」の組織招待機能に、高深刻度(High)の脆弱性「GHSA-fmh4-wcc4-5jm3 / CVE-2026-53514」が発見されました。この脆弱性を放置すると、攻撃者があなたのアプリケーションの組織に不正に加入し、アカウントを乗っ取る可能性があります。速やかな対応が求められます。
何が問題なのか?
この脆弱性は、`better-auth`ライブラリの`organization`プラグイン(`import { organization } from "better-auth/plugins/organization"`)に存在します。通常、組織への招待を受け入れる際、システムはセッション中のユーザーが「招待されたメールアドレスと同じメールアドレスを持っているか」を確認します。しかし、この脆弱なバージョンでは、**そのメールアドレスが実際にユーザーによって所有され、かつ検証済みであるか(`emailVerified: true`)を確認していませんでした。**
つまり、攻撃者はターゲットとなるユーザーのメールアドレスと「同じ文字列」のメールアドレスを持つアカウントを、**メールアドレスの検証なしに**作成できてしまいます。その後、もし正規のユーザー宛の招待リンク(に含まれる`invitationId`)が何らかの経路で攻撃者に漏洩した場合、攻撃者はこの未検証アカウントでログインし、不正に招待を承認できてしまうのです。
あなたのアプリケーションは影響を受けますか?
以下の条件をすべて満たすアプリケーションは、この脆弱性の影響を受けます。特にフロントエンドエンジニアの方々は、自身の担当する認証・組織管理機能の設定を確認してください。
1. `better-auth`ライブラリを使用しており、**`organization`プラグイン (`import { organization } from "better-auth/plugins/organization"`) を利用している**場合。
2. ユーザーが任意のメールアドレスでサインアップできる設定になっており、かつその際に**メールアドレスの検証を必須としていない**場合。(例: `emailAndPassword: { enabled: true }` で `requireEmailVerification: true` が設定されていない)
3. `organization()`の設定オプションで**`requireEmailVerificationOnInvitation: true` が明示的に設定されていない**場合。
4. 招待リンクに含まれる`invitationId`が、招待された本人以外の第三者にも漏洩する可能性があるフローになっている場合。(例: 管理画面から直接リンクが見える、チャットで共有される、転送メール、リンクプレビュー機能などがURLをログに残す、など)
もたらされるリスクシナリオ
この脆弱性が悪用されると、次のような攻撃シナリオが考えられます。
1. 攻撃者は、標的となる正規ユーザー(例: `target@example.com`)よりも先に、**`target@example.com`というメールアドレスで未検証のアカウントを登録します。**
2. 組織の管理者が正規ユーザー`target@example.com`を組織に招待します。
3. 招待リンクに含まれる`invitationId`が、何らかの経路で攻撃者の手に渡ります。(例: 組織内のSlackチャネルで招待リンクが共有された、メール転送設定ミスなど)
4. 攻撃者は、自身が登録した未検証アカウントでログインし、漏洩した`invitationId`を使って招待を不正に承認します。
5. 結果として、**攻撃者は正規のユーザーであるかのように組織に加入し、アカウントを乗っ取ります。**これにより、組織内の機密データへのアクセス、招待されたロールに応じた不正な操作など、甚大な被害が発生する可能性があります。
今すぐ取るべき対策
この脆弱性からアプリケーションを保護するためには、速やかな対応が不可欠です。
最も推奨される対策:`better-auth` のバージョンアップ
`better-auth` を**バージョン `1.6.11` 以降**に速やかにアップグレードしてください。
このバージョンでは、招待関連のすべてのエンドポイント(招待の承認、拒否、取得、一覧表示)において、セッションユーザーのメールアドレスが**検証済みであること (`emailVerified: true`) が必須**となりました。また、`organization()` の `requireEmailVerificationOnInvitation` オプションのデフォルト値も `true` に変更され、アプリケーションはデフォルトで安全になります。
緊急時の代替策(アップグレードが難しい場合)
すぐにアップグレードができない場合は、以下のいずれかの対策を検討してください。ただし、これらは一時的な回避策であり、完全な解決のためには最終的にバージョンアップを行うことを強く推奨します。
1. `organization({ requireEmailVerificationOnInvitation: true })` を設定する。
これは招待の承認と拒否を保護しますが、招待情報の取得や一覧表示は保護されない点に注意が必要です。
2. サインアップ時にメールアドレスの検証を必須とする設定 (`emailAndPassword.requireEmailVerification: true`) に変更するか、メール/パスワードによるサインアップ機能自体を無効にする。
これにより、攻撃者が未検証のメールアドレスでアカウントを作成する経路をブロックできます。
3. 組織の招待関連APIルートに対し、カスタムのミドルウェアを導入し、セッションユーザーのメールアドレスが検証済み(`session.user.emailVerified === true`)であることを確認してから処理を続行するようにする。
フロントエンドからは直接的な操作は難しいかもしれませんが、バックエンド連携の際にこの要件を開発チームに伝達し、実装を依頼してください。
まとめ
`better-auth`ライブラリの組織招待機能における脆弱性は、アカウント乗っ取りという深刻なリスクをもたらします。フロントエンドエンジニアの皆さんは、ご自身のアプリケーションが影響を受ける条件に該当しないかを確認し、推奨されるバージョンアップ、または緊急時の代替策を速やかに実施してください。セキュリティは開発ライフサイクル全体で考慮すべき重要な要素です。常に最新のセキュリティ情報に注意を払い、安全なアプリケーション開発を心がけましょう。