Раньше такие ошибки считали проблемой для узкого круга администраторов. Теперь выяснилось, что в Gogs достаточно обычной учётной записи, чтобы через одну настройку добраться до запуска кода на сервере.

Критическая уязвимость затрагивает популярный self-hosted Git-сервис и получила оценку 9,4 балла по CVSS. Ошибка пока не получила CVE-идентификатор, а патча на момент публикации всё ещё нет.

Что произошло

Исследователи Rapid7 сообщили о критической уязвимости в Gogs — открытом Git-сервисе, который компании и команды часто разворачивают у себя. Дыра позволяет аутентифицированному пользователю запустить произвольный код на сервере.

Главная проблема в том, что атаке не нужен админский доступ. В ряде сценариев злоумышленнику хватает обычной регистрации, собственной репозитории и включённого режима «Rebase before merging».

Как работает атака

Схема завязана на Git rebase — механизме, который переписывает историю коммитов, перенося их поверх другой ветки. В Gogs этот процесс можно заставить принять вредоносное имя ветки, которое подсовывает флаг --exec в команду git rebase.

Этот флаг умеет запускать shell-команду после каждого переписанного коммита. В результате злоумышленник получает удалённое выполнение кода (RCE) на сервере без участия других пользователей.

По словам исследователя Джона Берджесса, уязвимость не требует взаимодействия с жертвой. Если на инстансе разрешена регистрация, атакующий может создать учётную запись, завести репозиторий и сам включить rebase merge в настройках.

Если создание репозиториев закрыто, условия всё равно остаются опасными. Тогда достаточно прав на запись в уже существующий проект, где rebase-слияние включено.

Чем это грозит компаниям

Последствия выходят далеко за пределы одного репозитория. Успешная эксплуатация может открыть доступ ко всему серверу, позволить украсть учётные данные, добраться до других узлов сети и изменить код в любых хранящихся проектах.

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

По оценке специалистов, в сети сейчас есть около 1 141 доступного из интернета экземпляра Gogs. Реальное число, вероятно, выше: часть инсталляций спрятана за внутренними сетями и средствами удалённого доступа. Для корпоративных команд это не повод паниковать, но серьёзный аргумент пересмотреть настройки, особенно если вы уже сталкивались с опасными RCE-дырами в серверных продуктах.

Что делать прямо сейчас

Авторы отчёта советуют не ждать обновления и сразу закрыть лишние возможности. Речь идёт о запрете регистрации, ограничении создания репозиториев и проверке настроек rebase merge.

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

В повседневной работе стоит убрать всё лишнее, что расширяет поверхность атаки. Это касается и удобных функций, которые включали «на всякий случай»: они часто и становятся точкой входа.

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

  • Проверить, включена ли регистрация новых пользователей в Gogs
  • Ограничить создание репозиториев, если в этом нет бизнес-необходимости
  • Выключить rebase merge там, где он не нужен
  • Пересмотреть права записи в существующих проектах
  • Проверить логи на странные HTTP 500 и подозрительные операции с pull request
  • Сверить версию Gogs и план обновления, как только выйдет исправление
  • Ограничить доступ к Git-сервису из внешней сети, если это допустимо по политике компании
  • Проверить, не хранятся ли в репозиториях секреты, токены и пароли
Поделиться: