Подмена Git hook в Gitea позволяет выполнить произвольный код

Gitea

В Gitea обнаружили уязвимость в обработке патчей через интерфейс diffpatch, которая позволяет удалённо выполнять команды на сервере. Проблема затрагивает все версии с 1.17 до 1.27.1 и получила идентификатор CVE-2026-60004. Исправление вышло в версии 1.27.1, однако вскоре после неё появилась версия 1.27.2, закрывающая ещё несколько связанных с безопасностью ошибок. Администраторам настоятельно рекомендуется обновить свои инсталляции до актуального релиза.

Детали уязвимостей

Суть уязвимости в том, что атакующий с правом записи в репозиторий может отправить специально сформированный патч через endpoint diffpatch. Gitea применяет патчи во временной общей копии репозитория, и при определённых условиях это приводит к созданию исполняемого файла в каталоге hooks, то есть Git hook. Git hook представляет собой скрипт, который система контроля версий автоматически запускает при наступлении определённых событий, например после изменения индекса. Злоумышленник использует особенность обработки конфликтов при повторной отправке одного и того же патча: создаётся коллизия, и Git извлекает файл из индекса даже при работе в режиме --cached. В результате скрипт, названный hooks/post-index-change, становится активным и выполняется при записи индекса. Так как возвращаемое значение hook не передаётся в ответ diffpatch, вредоносная активность проходит незаметно.

Для атаки не нужны повышенные привилегии. Достаточно обычной учётной записи с правом создавать репозитории. Если на сервере включена открытая регистрация, то любой посетитель может завести аккаунт, создать репозиторий и отправить вредоносный патч. Это превращает уязвимость в атаку без предварительной аутентификации в классическом понимании, хотя формально регистрация требуется. В описании проблемы указано, что для срабатывания необходимы Git версии 2.32 или новее, включённый маршрут diffpatch и доступная для записи и исполнения временная файловая система. Все эти условия обычно выполняются в стандартных установках Gitea. В комплекте с описанием опубликован готовый эксплойт, который создаёт приватный репозиторий, отправляет патч дважды, а затем забирает результат выполнения команды через отдельную ветку. Для получения вывода не требуется исходящее сетевое соединение, что делает атаку удобной даже в изолированных сетях.

Последствия успешного использования серьёзны: команды выполняются от имени системного пользователя Gitea, под которым работает сервис. В зависимости от настроек изоляции и прав этого пользователя злоумышленник может получить доступ к конфигурационному файлу app.ini, секретам приложения, переменным окружения, подключённым репозиториям, учётным данным базы данных и её содержимому, а также к OAuth- и интеграционным ключам. Не исключён доступ к другим внутренним сервисам, если процесс Gitea запущен с расширенными правами или в общей сетевой среде. По сути, эксплуатация этой уязвимости ведёт к полной компрометации сервера. Оценка CVSS для неё равна 9.8 из 10, что относит её к категории критических.

Версия Gitea 1.27.1 закрыла не только эту проблему, но и уязвимость CVE-2026-59774, связанную с неавторизованным чтением произвольных файлов через директиву #+INCLUDE в Org-mode. Эта вторая ошибка позволяла злоумышленнику получать содержимое файлов с сервера, что тоже является серьёзным риском для конфиденциальности. Обе уязвимости были исправлены патчами, и разработчики рекомендовали всем пользователям обновиться как можно скорее. Однако спустя примерно три недели вышла версия 1.27.2, которая исправляет ещё несколько проблем безопасности. Среди них обход двухфакторной аутентификации через WebAuthn и OpenID Connect, при котором пользователь с известным паролем мог получить полную сессию без второго фактора. Также закрыты уязвимости, позволявшие повысить привилегии до владельца репозитория и выполнить произвольный код через аргументы внешнего рендерера. Особое внимание привлекает ошибка в обработке pull_request_target: для рабочих процессов из форков использовался код из ветки атакующего, что давало доступ к секретам репозитория и организации.

Для администраторов Gitea первоочередная задача - обновить сервер до версии 1.27.2 или более поздней, если она уже выпущена. Пользователям, которые не могут обновиться немедленно, стоит временно отключить открытую регистрацию, чтобы снизить вероятность атаки без учётных данных. Однако это не устраняет риск полностью, поскольку любой существующий пользователь с правом записи в репозиторий по-прежнему может использовать уязвимость. Также следует проверить, не были ли уже скомпрометированы системы: наличие подозрительных веток, изменение git hook или необычная активность в журналах могут свидетельствовать о попытках эксплуатации. В связи с публикацией готового эксплойта вероятность атак значительно возрастает, поэтому задержка с обновлением особенно опасна.

Выпуск двух патч-релизов за короткий промежуток времени показывает, что Gitea сейчас сталкивается с потоком найденных проблем безопасности. Это характерно для популярных self-hosted платформ, которые становятся привлекательной целью для атакующих. Серверы с открытой регистрацией особенно уязвимы, так как они предоставляют низкопороговый вход даже для злоумышленников без специальных привилегий. Владельцам таких инсталляций следует внимательно следить за обновлениями и рассматривать ограничение регистрации и доступа как дополнительную меру защиты, но не как замену своевременному патчингу.

Ссылки

Комментарии: 0