Уязвимость захвата домена в Google OAuth (Truffle Security, январь 2025)
- title
- Уязвимость захвата домена в Google OAuth (Truffle Security, январь 2025)
- type
- concept
- summary
- Покупка домена закрытого стартапа за $12 позволяет пересоздать почту в Workspace и войти в его Slack/Notion через Sign in with Google. Баунти: $1337.
- tags
- oauth, google, vulnerability, identity, sso
- created
- 2026-05-19
- updated
- 2026-05-19
- lang
- ru
- translation_of
- google-oauth-domain-takeover
- source_updated
- 2026-05-19
- translated
- 2026-09-01
- translator
- lllm/antigravity/gemini-3.7-flash-medium
Опубликовано Truffle Security в январе 2025 года. Архитектурная предпосылка "Sign in with Google" состоит в том, что утверждение о домене (domain claim) вместе с адресом электронной почты однозначно идентифицируют пользователя. Это утверждение верно в конкретный момент времени - но ни Google, ни использующие его SaaS-приложения не отслеживают смену владельца домена во времени. Поэтому при смене владельца домена идентификационные данные незаметно переходят к новому владельцу.
Атака
- Стартап закрывается. Его домен (
deadstartup.com) попадает в открытую продажу. - Атакующий покупает домен примерно за $12.
- Атакующий разворачивает Google Workspace на
deadstartup.com- Workspace позволяет подтвердить права на домен через DNS-запись или HTML-файл точно так же, как это делали исходные владельцы. - Атакующий заново создаёт почтовые ящики сотрудников закрытого стартапа:
alice@deadstartup.com,bob@deadstartup.comи так далее. (Имена часто легко найти в LinkedIn, GitHub или на старых маркетинговых страницах компании.) - Атакующий открывает Slack, Notion, Zoom, ChatGPT и другие сервисы и нажимает "Sign in with Google", входя как
alice@deadstartup.com. - SaaS-сервис видит: валидное утверждение Google OAuth, совпадающий email, совпадающий домен. Сервис авторизует атакующего в аккаунте закрытой компании - со всеми историческими данными, поскольку SaaS-приложения не удаляют данные заранее, когда у компании истекает подписка на Workspace.
Архитектурная проблема в том, что ни одна из сторон не проверяет привязку идентификатора ко времени. Google выдаёт свежий OAuth claim для того адреса, который видит прямо сейчас. SaaS-приложения доверяют кортежу (email, domain) как неизменному идентификатору. Нет механизма, который сказал бы: "в 2023 году этот адрес принадлежал другому tenant'у Workspace". Поэтому, когда почту пересоздают в новом Workspace, все зависимые SaaS-сервисы считают нового владельца старым пользователем.
К чему это открывает доступ
Ко всему, куда закрытая компания входила через SSO и что не закрыла до конца. На практике это охватывает большую часть современного SaaS: workspace'ы Slack (история переписки, файлы), команды в Notion (спецификации, контракты, заметки о клиентах), Zoom (записи звонков), HR-системы, workspace'ы ChatGPT, организации в GitHub с разрешённым Google SSO, трекеры задач, CRM. Формулировка автора треда: покупки домена за $12 достаточно, чтобы получить доступ к HR-системе бывшей компании.
Масштаб уязвимости зависит от того, сколько вокруг закрытых или поглощённых стартапов с заброшенными доменами и неочищенными SaaS-аккаунтами. В треде нет количественной оценки их числа, но неявно утверждается, что их много.
Реакция Google
Именно эта часть превратила публикацию отчёта в громкую историю.
- Первичная оценка (triage): Google закрыла репорт со статусом "won't fix" и переквалифицировала проблему из бага в OAuth в категорию "fraud and abuse" (мошенничество и злоупотребления).
- Повторное открытие: Только после того, как доклад исследователей приняли на конференцию Shmoocon, а информация стала публичной.
- Итоговое вознаграждение: $1337. Мемная сумма (
leet) за то, что в треде the_smart_ape названо "дефектом масштаба всей индустрии".
В треде это расценивается как тревожный сигнал шире одного конкретного бага: если доступ к HR-системе чужой компании за $12 команда OAuth изначально сочла "не нашей проблемой", то и остальные архитектурные решения этой команды имеет смысл пересмотреть с нуля.
Почему "Sign in with Google" не может исправить это в одиночку
Даже при идеальном исправлении на стороне Google фундаментальная проблема остаётся и на стороне SaaS-приложений. Они могли бы проверять преемственность tenant'а Workspace (идентификатор клиента customer ID, который Google выдаёт организации), но большинство полагающихся сторон (relying parties) смотрят только на email и claim hd (hosted domain). Исправление только силами Google - например, отказ выдавать OAuth claims для недавно подтверждённых доменов на период карантина или передача сигнала "владелец этого домена недавно сменился" - смягчило бы проблему, но не устранило бы этот класс уязвимостей полностью.
Для полного исправления нужны шаги с обеих сторон: Google должен отдавать информацию о преемственности tenant'а, а SaaS-приложения должны её проверять. Более широкая рекомендация из треда (sso-concentration-risk) - не завязывать через SSO критически важные для бизнеса или финансов аккаунты на одного IdP - остаётся защитной мерой на стороне пользователя, пока платформенное исправление не внедрено.
См. также
- smart-ape-dont-sign-in-with-google - исходный тред.
- sso-concentration-risk - почему это раскрытие уязвимости является частью более общей закономерности.
- oauth-token-theft - смежный класс атак с другим механизмом (кража токенов и consent phishing вместо передачи идентификатора).