Всем привет!
Небольшая история о том, как уязвимость в GitLab API позволила получить доступ к конфиденциальной информации.
GraphQL API GitLab’a отключает защиту от CSRF для
Queries (которые передаются через GET-запросы) и включает ее для Mutations (которые передаются через POST-запросы).Это построено на допущении, что
Queries могут только «читать» данные и ничего больше. Но так ли это на самом деле?Оказалось, что нет. Нашлась
Query, которая может делать запросы к внешним сервисам.Соединив все это вместе Автор реализовал сценарий:
🍭 Атакующий настраивает webhook для получения данных
🍭 Создается HTML-файл, который перенаправляет пользователя на специальный URL (используя ту самую «небезопасную»
Query)🍭 Файл направляется аутентифицированному GitLab-пользователю, он нажимает на ссылку…
🍭 Отправляется
GET запрос к gitlab.com/api/graph/…🍭 Готово! Данные отправлены атакующему
Если нужно больше деталей о реализации сценария, то найти их можно в статье – там все очень подробно расписано.
Помимо этого, в статье есть видеозапись, которая демонстрирует реализацию рассмотренной атаки.
Важно (!): информация об уязвимости была сообщена команде GitLab и устранена в версии 18.4 (подробности доступны тут).