Gitea выпустила обновления безопасности, закрывающие 27 уязвимостей в версиях 28.0.0 и 28.1.0. Среди них — критический обход SSH-аутентификации и несколько SSRF, затрагивающих доступ к аккаунтам, права на репозитории, автоматизированные рабочие процессы и соединения с внутренними системами. Администраторам стоит отнестись к обновлению как к срочному для своей инфраструктуры разработки — по той же логике, по которой нельзя откладывать критические патчи GitLab для self-hosted.
Релиз 28.0.0 вышел 30 сентября и содержит 20 CVE в описании безопасности; суммарные 27 охватывают его и последовавший 28.1.0, а не только 28.0.0. В Gitea также отказались от исторического префикса «1.» в нумерации версий, поэтому релиз называется 28.0.0, а не 1.28.0.
Обход SSH-аутентификации: CVE-2026-103059
Главная уязвимость — CVE-2026-103059 с оценкой CVSS 9.1, она затрагивает развёртывания со встроенным SSH-сервером Gitea. Поиск открытого ключа использовал сравнение SQL LIKE, которое на некоторых базах данных игнорирует регистр букв, включая стандартную базу SQLite. Из-за этого специально сформированный RSA-ключ мог совпасть с зарегистрированным ключом другого пользователя.
Атакующий, который построит подходящий регистровый вариант публичного ключа жертвы и выведет соответствующий приватный ключ, сможет аутентифицироваться как эта жертва. Это не универсальный обход с любым изменённым ключом: атакующий должен выполнить указанные требования к ключу. Теперь Gitea идентифицирует предъявляемые ключи по отпечаткам, убрав небезопасное текстовое сравнение.
SSRF в миграциях и зеркалах репозиториев
Несколько закрытых уязвимостей позволяли миграциям и зеркалам репозиториев обходить правила исходящих соединений. CVE-2026-70357 связана с разрывом между проверкой имени хоста и фактическим подключением по Git. Атакующий мог изменить DNS-ответ имени хоста в этот промежуток и направить Gitea на внутренний хост уже после того, как первичная проверка безопасности прошла.
CVE-2026-101027 позволяла одобренному домену пропускать проверки IP назначения, а CVE-2026-101029 использовала несколько DNS-ответов для обхода allowlist исходящих соединений. Ещё одна уязвимость, CVE-2026-89430, давала push-зеркалам подключаться к внутренним Git-хостам после того, как их сохранённые адреса прошли более раннюю проверку, что потенциально позволяло выполнять принудительные push. Похожий класс проблем с SSRF до входа в систему недавно разбирали и в SonicWall SMA1000.
Теперь Gitea направляет сетевые операции Git через внутренний прокси, который применяет правила исходящего доступа в момент подключения. Администраторам нужно просмотреть изменения конфигурации до обновления. Для политики запрета по умолчанию в примечаниях к релизу указано задать EGRESS_MODE = strict и явно перечислить разрешённые хосты.
Дыры в одобрениях Gitea Actions и другие исправления
Обновление также закрывает пробелы в одобрениях Gitea Actions. CVE-2026-104632 позволяла отменённому fork-воркфлоу, ожидающему одобрения, при повторном запуске добраться до self-hosted раннеров. CVE-2026-94205 проверяла только актора события, позволяя запустить воркфлоу недоверенного контрибьютора по событию от мейнтейнера без требуемого одобрения. Обе проверки ужесточены.
Другие исправления касаются хранимого межсайтового скриптинга в блобах контейнеров, дублирующихся записей дерева Git, которые могли скрыть вредоносные файлы от проверяющих, и ошибки установщика, выдававшей сессию существующего администратора без проверки пароля. Исправления прав доступа также убирают остаточный доступ при передаче репозитория и не дают deploy-ключам наследовать привилегии владельца репозитория.
Администраторам следует сделать резервную копию данных, просмотреть ломающие изменения и обновиться до 28.1.0. В примечаниях к релизу Gitea объясняются новые сетевые правила, минимальная версия Git 2.25 и изменённое поведение рабочих процессов.
Что делать администратору
Порядок действий для тех, кто обновляется:
- сделайте резервную копию данных и конфигурации;
- просмотрите ломающие изменения и изменения конфигурации, особенно правила исходящих соединений;
- при необходимости запрета по умолчанию задайте
EGRESS_MODE = strictи перечислите разрешённые хосты; - обновитесь до версии 28.1.0;
- проверьте, что установленная версия Git не ниже 2.25.
Если обновиться сразу нельзя, стоит как минимум ограничить исходящие соединения на уровне сети и пересмотреть, кто имеет доступ к запуску рабочих процессов и зеркалам репозиториев. Для пользователей реестровых ОС и внутренних Git-сервисов это тот же случай, что и с уязвимостями ядра Linux с повышением до root: патч откладывать нельзя, а компенсирующие меры настраиваются до обновления.
Частые вопросы
Кого касается это обновление?
Всех, кто развёртывает Gitea, особенно с встроенным SSH-сервером и включёнными миграциями или зеркалами репозиториев. Уязвимость с обходом SSH-аутентификации затрагивает именно такие инсталляции.
Насколько опасна CVE-2026-103059?
Её оценка — CVSS 9.1. Однако это не универсальный обход: атакующему нужно построить подходящий регистровый вариант публичного ключа жертвы и вывести соответствующий приватный ключ.
Почему в релизе 28.0.0, а не 1.28.0?
Gitea отказалась от исторического префикса «1.» в нумерации версий. Поэтому релиз называется 28.0.0.
Сколько всего уязвимостей закрыто?
27, при этом 20 CVE перечислены в описании безопасности релиза 28.0.0, а суммарные 27 охватывают его и обновление 28.1.0.
Как настроить запрет исходящих соединений по умолчанию?
В примечаниях к релизу указано задать EGRESS_MODE = strict и явно перечислить разрешённые хосты.
Какая минимальная версия Git требуется?
В примечаниях к релизу указана минимальная версия Git 2.25.
Что изменилось в поведении рабочих процессов?
Ужесточены проверки одобрений Gitea Actions: закрыты обходы, при которых отменённый fork-воркфлоу добирался до self-hosted раннеров, а событие от мейнтейнера запускало воркфлоу недоверенного контрибьютора без одобрения.
До какой версии обновляться?
Рекомендуется обновиться до 28.1.0, предварительно сделав резервную копию и просмотрев ломающие изменения.
Источник: cybersecuritynews.com