
CVE-2026-49757에 대한 개념 증명 익스플로잇으로, AshAuthentication에서 이메일 기반 사용자 매칭을 통한 OAuth2/OIDC 계정 탈취를 시연하며, 취약한 핸들러 및 수정된 핸들러 시뮬레이션을 포함합니다.
CVE-2026-49757에 대한 개념 증명 — AshAuthentication의 심각한 취약점으로, OAuth2/OIDC 콜백이 (strategy, sub) 식별자 쌍 대신 이메일 주소로 로컬 사용자 계정을 확인하여 인증되지 않은 계정 탈취를 허용합니다.
| Field | Value |
|---|---|
| CVE | CVE-2026-49757 |
| CVSS 4.0 | 9.2 (심각) |
| CWE | CWE-290 (스푸핑을 통한 인증 우회) |
| 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 제공자의 계정만 있으면 됩니다.
# Interactive mode (recommended)
python3 exploit.py
# Non-interactive mode (piped input)
echo | python3 exploit.py
AshAuthentication의 IdentityChange.change/3를 upsert_identity: :unique_email로 시뮬레이션합니다:
[email protected]으로 등록 (역할: admin)google-victim-real-12345)[email protected]으로 등록 (email_verified: false):reject 정책 (기본값)패치된 UserResolver를 (strategy, sub) 조회로 시뮬레이션합니다:
keycloak-attacker-fake-789)가 user_identities에서 발견되지 않음on_untrusted_email_match: :reject가 로그인 차단:confirm 정책trust_email_verified? = trueemail_verified: true로 로그인 → 자동 연결 성공email_verified: false로 로그인 → 차단됨| File | Description |
|---|---|
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는 교육 및 방어적 테스트 목적으로만 제공됩니다. 소유하거나 명시적 테스트 권한이 있는 시스템에서만 테스트하십시오.