Утекшие адреса GitLab позволяют отправлять код прямо в main

Исследователи Aikido обнаружили в открытой документации действующие служебные адреса GitLab, которые разработчики публиковали для приёма сообщений об ошибках. Такой адрес содержит долгоживущий токен GitLab, связанный с учётной записью. Его владелец может использовать почту для создания merge request, загрузки патчей и запуска CI/CD-задач. В ходе проверки специалисты смогли отправить коммит в ветку main приватного проекта, защищённого ограничениями по IP-адресам.
Функция GitLab «Email work item to this project» показывает пользователю приватный адрес вида incoming+project-id-glimt-…-issue@incoming.gitlab.com. Письмо на него превращается в задачу проекта и отображается от имени владельца аккаунта. В интерфейсе адрес описывался как средство для создания рабочих элементов в конкретном проекте, хотя токен внутри него привязан ко всей учётной записи и не имеет срока действия. Ранее GitLab закрыла критическую уязвимость сервера.
Aikido за один день нашла около дюжины таких адресов в README-файлах, руководствах для контрибьюторов и страницах поддержки. Их размещали, чтобы пользователи могли отправлять сообщения о проблемах. Исследователи уведомили владельцев затронутых аккаунтов, однако GitLab не предоставляет инструмента для массового отзыва токенов или оповещения владельцев адресов.
Как токен GitLab превращает адрес для задач в доступ к коду
Для создания merge request достаточно заменить в адресе окончание -issue на -merge-request. К письму можно приложить файл .patch, и GitLab применит изменения к исходной ветке. Если патч меняет файл .gitlab-ci.yml, а права владельца токена это позволяют, платформа выполнит добавленную CI/CD-задачу.

GitLab не сверяет адрес отправителя с почтой владельца токена. Поэтому письмо может прийти с любого почтового ящика, а сервис обработает его с правами пользователя, которому принадлежит адрес. Ущерб ограничен ролью жертвы: утечка адреса пользователя с ролью Guest почти ничего не даёт, а токен Maintainer может открыть доступ к защищённым веткам и переменным CI/CD.
Атакующему также нужно знать путь и идентификатор целевого проекта. Для публичных репозиториев оба значения доступны открыто. В случае приватных проектов идентификатор можно подобрать, но для доставки письма потребуется узнать путь к проекту.
Исследователи подтвердили, что почтовый путь обходит IP-ограничения GitLab. В их тесте браузер и команды git clone не получили доступ к приватному проекту, доступ к которому разрешён только с одного чужого IP-адреса. GitLab принял письмо с merge request и добавил коммит в main.
Aikido сообщила о проблеме через HackerOne в мае 2026 года, но обращение закрыли как предусмотренное поведение. После конфиденциального отчёта в июне GitLab изменила текст интерфейса: убрала утверждение, что токен нельзя применять для доступа к другим данным, добавила упоминание merge request и указала, что входящая почта не подпадает под IP-ограничения. Сам механизм работы токена не изменился.



