
CVE-2026-49757の概念実証エクスプロイト。AshAuthenticationにおけるメールベースのユーザーマッチングを通じたOAuth2/OIDCアカウント乗っ取りを実証し、脆弱なハンドラと修正されたハンドラのシミュレーションを含む。
CVE-2026-49757 の概念実証 — AshAuthentication における重大な脆弱性で、OAuth2/OIDC コールバックが (strategy, sub) の識別子ペアではなく メールアドレス でローカルユーザーアカウントを解決するため、認証されていないアカウント乗っ取りが可能になります。
| フィールド | 値 |
|---|---|
| CVE | CVE-2026-49757 |
| CVSS 4.0 | 9.2 (Critical) |
| CWE | CWE-290 (Authentication Bypass by Spoofing) |
| GHSA | GHSA-777c-2fxx-qr28 |
| 影響を受けるバージョン | ash_authentication >= 0.1.0, < 4.14.0 および >= 5.0.0-rc.0, < 5.0.0-rc.10 |
| パッチ適用済みバージョン | 4.14.0, 5.0.0-rc.10 |
被害者の認証情報は不要です。攻撃者に必要なのは、被害者のメールアドレスと、ターゲットが受け入れる任意の OAuth プロバイダー上のアカウントのみです。
# 対話モード(推奨)
python3 exploit.py
# 非対話モード(パイプ入力)
echo | python3 exploit.py
upsert_identity: :unique_email を使用した AshAuthentication の IdentityChange.change/3 をシミュレートします:
[email protected](ロール: admin)で登録google-victim-real-12345)[email protected](email_verified: false)で登録:reject ポリシー(デフォルト)(strategy, sub) での検索を使用するパッチ適用済み UserResolver をシミュレートします:
keycloak-attacker-fake-789)が user_identities に見つからないon_untrusted_email_match: :reject がログインをブロック:confirm ポリシーtrust_email_verified? = trueemail_verified: true で Google 経由でサインイン → 自動リンク成功email_verified: false で Keycloak 経由でサインイン → ブロック| ファイル | 説明 |
|---|---|
exploit.py | メイン PoC スクリプト — 全 4 フェーズを実行 |
vulnerable_handler.py | シミュレートされた OAuth コールバックハンドラー(脆弱版 + 修正版) |
UserResolver モジュール — メールアドレスではなく (strategy, sub) の ID でユーザーを解決on_untrusted_email_match オプション — 未知の sub に対して :reject(デフォルト)、:confirm、または :warntrust_email_verified? オプション — プロバイダーごとのフラグ。GitHub/Google/Auth0/Slack/Apple ではデフォルト true(strategy, uid, user_id) から (strategy, uid) に変更user_id は決して更新されないidentity_resource がないストラテジーに対してこの PoC は教育および防御テスト目的のみです。自分が所有するシステム、または明示的なテスト許可を得たシステムに対してのみテストしてください。