Легкие ошибки за наличные деньги

Вы когда-нибудь слышали о системе отслеживания проблем Google? Скорее всего, нет, если вы не являетесь сотрудником Google или разработчиком, который недавно сообщал об ошибках в инструментах Google. И я тоже, пока я не заметил, что мои отчеты об уязвимостях теперь обрабатываются путем открытия новой ветки в дополнение к обычным уведомлениям по электронной почте.

Поэтому я сразу же начал пытаться его сломать.

Так что же это за сайт? Согласно документации, Issue Tracker (внутреннее название Buganizer System) - это инструмент, который используется внутри компании Google для отслеживания ошибок и запросов функций во время разработки продукта. Он доступен за пределами Google для использования внешним сообществом и пользователями-партнерами, которым необходимо сотрудничать с командами Google над конкретными проектами.

Другими словами, когда у кого-то возникает проблема с продуктом Google, она попадает в счетчик проблем. Имеет смысл, правда? Мы, как внешние пользователи, видим только верхушку айсберга: небольшой набор предварительно утвержденных категорий и проблемы, при которых кто-то в Google явно добавил внешнюю учетную запись, например отчеты об уязвимостях. Но сколько информации скрывается под поверхностью?

Наблюдая за числовыми идентификаторами, присвоенными последним общедоступным потокам, мы можем легко оценить, насколько широко используется этот инструмент внутри компании. В рабочее время в Маунтин-Вью открывается около 2000–3000 выпусков в час, и только 0,1% из них являются общедоступными. Похоже, утечка данных в этой системе будет иметь довольно большое влияние. Давай сломаем!

Попытка №1: Получение учетной записи сотрудника Google

Одна из первых вещей, которые я заметил при обнаружении системы отслеживания проблем, - это возможность участвовать в обсуждениях, отправляя электронные письма на специальный адрес, который выглядит следующим образом:

buganizer-system + componentID + issueID @ google.com

(где componentID - это число, представляющее категорию, а issueID - уникальный идентификатор потока, на который вы отвечаете)

Это напомнило мне недавнюю находку под названием Ticket Trick, которая позволила хакерам проникнуть в системы чата организации, используя такую ​​систему электронной почты. Учитывая, что это адрес электронной почты @ google.com, я попытался зарегистрироваться в команде Slack Google, используя его, и страница подтверждения, на которую я попал, выглядела очень многообещающей:

Увы, письма от Slack так и не пришло.

Следующее, что я мог придумать, - это получить учетную запись Google с основным адресом электронной почты @ google.com, что, надеюсь, дало бы мне дополнительные привилегии в Buganizer. Регистрация такой учетной записи извне Google не должна была быть разрешена:

Однако я нашел способ обойти этот фильтр: если я зарегистрировался с любым другим поддельным адресом электронной почты, но не смог подтвердить учетную запись, щелкнув ссылку, полученную по электронной почте, мне разрешили изменить свой адрес электронной почты без каких-либо ограничений. Используя этот метод, я изменил адрес электронной почты новой учетной записи Google на [email protected].

Вскоре после этого я получил письмо с подтверждением в виде сообщения на странице соответствующей проблемы:

Отлично! Я щелкнул ссылку подтверждения, вошел в систему отслеживания проблем и…

Меня перенаправили на корпоративную страницу входа. И нет, учетные данные моей учетной записи Google там не работали. Облом.

Тем не менее, эта учетная запись дала мне много дополнительных преимуществ в других местах в Интернете, в том числе возможность подвезти машину (может быть, бесплатно?), Так что это все еще была проблема безопасности, которая открывала множество дверей для злонамеренных пользователей.

Принято: 11 часов | Награда: 3 133,7 доллара | Приоритет: P1

Попытка №2: получение уведомлений о внутренних билетах

Еще одна функция отслеживания проблем, которая привлекла мое внимание при знакомстве с пользовательским интерфейсом, - это возможность пометить элементы. Пометка проблемы означает, что вы заинтересованы в обсуждаемой проблеме и хотите получать уведомления по электронной почте, когда кто-то добавляет комментарий.

Интересная вещь, которую я заметил в этой функции, - это явное отсутствие ошибок при попытке использовать ее по вопросам, к которым у меня не было доступа. Казалось, что правила контроля доступа никогда не применялись к этой конечной точке, поэтому я вошел в свою вторую учетную запись и попытался запустить отчет об уязвимости из моей основной учетной записи, заменив идентификатор проблемы в запросе. Затем я увидел это сообщение, которое означает, что действие выполнено успешно:

1 человек отметил эту проблему.

Могло ли быть так просто шпионить за открытыми уязвимостями Google? Я быстро опубликовал комментарий к проблеме, чтобы узнать, получит ли я уведомление об этом в моей учетной записи вымышленного злоумышленника.

Но опять же, никакого электронного письма не было.

По какой-то причине, которую я действительно не помню, я решил провести дальнейшее тестирование этого. Итак, я получил идентификатор недавней проблемы и экстраполировал диапазон из нескольких тысяч идентификаторов, которые должны совпадать с последними проблемами в базе данных. Затем я снял их все.

Через несколько минут мой почтовый ящик выглядел так:

Первой моей мыслью при открытии почтового ящика было «Джекпот!».

Однако при ближайшем рассмотрении в этих тредах не происходило ничего особенно интересного. Видимо, я мог только подслушивать разговоры, связанные с переводом, когда люди обсуждали, как лучше всего передать значение фразы на разных языках.

Я даже подумал о том, чтобы не сообщать об этом в течение нескольких часов, надеясь найти способ усугубить серьезность. В конце концов я понял, что команда безопасности Google, вероятно, будет заинтересована в поиске возможных методов и вариантов поворота, поэтому я разослал подробности.

Принято: 5 часов | Награда: 5000 долларов | Приоритет: P0

Попытка №3: ​​Игра окончена

Когда вы посещаете Средство отслеживания проблем в качестве внешнего пользователя, большая часть его функций теряется, оставляя вам крайне ограниченные права. Если вы хотите увидеть все интересные вещи, которые могут делать сотрудники Google, вы можете поискать конечные точки API в файлах JavaScript. Некоторые из этих функций отключены полностью, другие просто скрыты в интерфейсе.

При разработке этой ограниченной версии системы кто-то был достаточно любезен, чтобы оставить для нас метод удаления себя из списка CC на случай, если мы потеряем интерес к проблеме или больше не хотим получать по электронной почте о ней. Этого можно добиться, отправив запрос POST следующим образом:

POST /action/issues/bulk_edit HTTP/1.1
{
   "issueIds":[
      67111111,
      67111112
   ],
   "actions":[
      {
         "fieldName":"ccs",
         "value":"[email protected]",
         "actionType":"REMOVE"
      }
   ]
}

Однако я заметил здесь некоторые упущения, которые привели к огромной проблеме:

  1. Неправильный контроль доступа. Не было явной проверки того, что текущий пользователь действительно имел доступ к проблемам, указанным в issueIds, перед попыткой выполнить данное действие.
  2. Тихая ошибка: если вы указали адрес электронной почты, которого в настоящее время нет в списке CC, конечная точка вернет сообщение о том, что электронное письмо было успешно удалено.
  3. Полная информация о проблеме в ответ: если во время действия ошибок не произошло, другая часть системы предполагает, что у пользователя есть соответствующие разрешения. Таким образом, каждая деталь о данном идентификаторе проблемы будет возвращена в теле ответа HTTP.

Теперь я мог видеть подробную информацию о каждой проблеме в базе данных, заменив issueIds в запросе выше. Бинго!

Я попытался просмотреть только несколько последовательных идентификаторов, а затем атаковал себя из чужой учетной записи, чтобы подтвердить серьезность этой проблемы.

Да, я мог видеть подробную информацию об отчетах об уязвимостях, а также обо всем остальном, размещенном на Buganizer.

Хуже того, я мог извлекать данные о нескольких билетах в одном запросе, поэтому мониторинг всей внутренней активности в реальном времени, вероятно, не сработал бы какие-либо ограничители скорости.

Я незамедлительно отправил сведения об эксплойте в Google, и их команда безопасности отключила уязвимую конечную точку через час. Впечатляющее время отклика!

Принято: 1 час | Награда: 7500 долларов | Приоритет: P0

Когда я впервые начал искать эту утечку информации, я предполагал, что это будет Святой Грааль ошибок Google, потому что он раскрывает информацию обо всех других ошибках (например, HackerOne платит минимум 10 000 долларов за что-то похожее).

Но, обнаружив его, я быстро понял, что воздействие будет минимизировано, потому что все опасные уязвимости в любом случае нейтрализуются в течение часа.

Я очень доволен дополнительными деньгами и с нетерпением жду ошибок в других продуктах Google.