
Эксплойт доказательства концепции для CVE-2026-49757, демонстрирующий захват учетной записи OAuth2/OIDC через сопоставление пользователей по электронной почте в AshAuthentication, с моделированием уязвимых и исправленных обработчиков.
Доказательство концепции для CVE-2026-49757 — критической уязвимости в AshAuthentication, в которой OAuth2/OIDC-обратные вызовы разрешались в локальные учетные записи по адресу электронной почты вместо пары идентификаторов (strategy, sub), что позволяло неавторизованный захват учетной записи.
| Поле | Значение |
|---|---|
| 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 |
Никаких учетных данных жертвы не требуется. Злоумышленнику нужен только email жертвы и учетная запись на любом OAuth-провайдере, который принимает цель.
# Interactive mode (recommended)
python3 exploit.py
# Non-interactive mode (piped input)
echo | python3 exploit.py
Имитирует IdentityChange.change/3 из AshAuthentication с опцией 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_identitieson_untrusted_email_match: :reject блокирует вход:confirmtrust_email_verified? = trueemail_verified: true → автоматическая привязка успешнаemail_verified: false → вход заблокирован| Файл | Описание |
|---|---|
exploit.py | Основной скрипт PoC — запускает все 4 фазы |
vulnerable_handler.py | Имитированные обработчики OAuth-обратных вызовов (уязвимый + исправленный) |
UserResolver — разрешает пользователей по идентификатору (strategy, sub) вместо emailon_untrusted_email_match — :reject (по умолчанию), :confirm или :warn для неизвестных subtrust_email_verified? — флаг на провайдера, по умолчанию true для GitHub/Google/Auth0/Slack/Apple(strategy, uid, user_id) на (strategy, uid)user_id никогда не обновляется при конфликтеidentity_resourceЭтот PoC предназначен только для образовательных целей и защитного тестирования. Тестируйте только на системах, которыми вы владеете или на тестирование которых у вас есть явное разрешение.