Исследователь с псевдонимом BruteCat выявил, что перебором можно было получить номер телефона, привязанный к аккаунту Google, если знать имя пользователя и часть номера. Дыра находилась в устаревшей версии формы восстановления имени пользователя, которая работала без JavaScript и не имела современной защиты.
Как это работало: форма отправляла запросы с именем пользователя и номером телефона, и в ответ возвращала информацию о существовании аккаунта. Система защиты была, но её обходили: ограничение по количеству запросов обходилось с помощью IPv6-ротации, создавая триллионы уникальных IP-адресов на /64-подсети. CAPTCHA срабатывала не всегда — её можно было обойти, подставляя валидный BotGuard-токен из JS-версии формы.
Что сделал BruteCat: он написал утилиту gpb, которая перебирала номера по национальным форматам с помощью библиотеки libphonenumber, автоматически получала BotGuard-токены через headless Chrome и отправляла до 40 000 запросов в секунду. Например, подбор американских номеров занимал около 20 минут, британских — 4 минуты, а нидерландских — всего 15 секунд.
Для сужения поиска BruteCat использовал частичные данные, доступные из формы восстановления Google (показывающей две цифры номера) и внешних сервисов, таких как PayPal, где можно было увидеть больше цифр. Кроме того, он с помощью Looker Studio получал email пользователя, который Google перестал показывать напрямую, создавая документ и передавая управление им жертве, после чего имя появлялось в панели.
Почему это опасно: если злоумышленник получит номер телефона, он может использовать вишинг, осуществить СИМ-свопинг для контроля над номером, а также сбросить пароли и получить доступ к другим сервисам.
Реакция Google: BruteCat сообщил об уязвимости 14 апреля 2025 через программу вознаграждений. Изначально баг недооценивали. 22 мая Google повысила оценку риска до средней, выпустила частичные исправления и выплатили исследователю $5 000. 6 июня уязвимая форма без JS была окончательно закрыта. Информации о злоумышленниках, воспользовавшихся этой уязвимостью, нет.
Как это работало: форма отправляла запросы с именем пользователя и номером телефона, и в ответ возвращала информацию о существовании аккаунта. Система защиты была, но её обходили: ограничение по количеству запросов обходилось с помощью IPv6-ротации, создавая триллионы уникальных IP-адресов на /64-подсети. CAPTCHA срабатывала не всегда — её можно было обойти, подставляя валидный BotGuard-токен из JS-версии формы.
Что сделал BruteCat: он написал утилиту gpb, которая перебирала номера по национальным форматам с помощью библиотеки libphonenumber, автоматически получала BotGuard-токены через headless Chrome и отправляла до 40 000 запросов в секунду. Например, подбор американских номеров занимал около 20 минут, британских — 4 минуты, а нидерландских — всего 15 секунд.
Для сужения поиска BruteCat использовал частичные данные, доступные из формы восстановления Google (показывающей две цифры номера) и внешних сервисов, таких как PayPal, где можно было увидеть больше цифр. Кроме того, он с помощью Looker Studio получал email пользователя, который Google перестал показывать напрямую, создавая документ и передавая управление им жертве, после чего имя появлялось в панели.
Почему это опасно: если злоумышленник получит номер телефона, он может использовать вишинг, осуществить СИМ-свопинг для контроля над номером, а также сбросить пароли и получить доступ к другим сервисам.
Реакция Google: BruteCat сообщил об уязвимости 14 апреля 2025 через программу вознаграждений. Изначально баг недооценивали. 22 мая Google повысила оценку риска до средней, выпустила частичные исправления и выплатили исследователю $5 000. 6 июня уязвимая форма без JS была окончательно закрыта. Информации о злоумышленниках, воспользовавшихся этой уязвимостью, нет.