Уязвимость Gitea в версиях до 1.26.2 позволяла любому внешнему пользователю скачивать приватные container images без логина, пароля и вообще какой-либо аутентификации. Для команд, которые держат в таких образах внутренние сервисы, сборочные артефакты или заготовки под прод, история неприятная: приватность в реестре фактически оказалась декоративной.
О проблеме, как пишет The Hacker News, сообщили исследователи британской компании Noscope. Уязвимость получила идентификатор CVE-2026-27771 и оценку CVSS 8.2. По данным исследователей, дефект затрагивает все версии Gitea до 1.26.2, а в дикой природе потенциально под ударом оказались более 30 тысяч развёртываний более чем в 30 странах. Больше всего уязвимых инсталляций, по оценке Noscope, находится в Китае, США, Германии, Франции и Великобритании.
Суть бага для DevOps-команд звучит почти издевательски просто. Если репозиторий контейнеров в Gitea был помечен как приватный, оператор ожидал, что образы увидят только авторизованные пользователи. На практике в затронутых версиях это ожидание не выполнялось: внешний атакующий мог скачать такие образы так, будто они опубликованы открыто. Без учётной записи, без токена, без обходных трюков уровня «надо сначала где-то засветиться». Для self-hosted платформы, которую часто выбирают именно ради контроля над кодом, артефактами и внутренней инфраструктурой, это плохой сюрприз.
Отдельно напрягает не только сам баг, но и его возраст. Noscope считает, что проблема могла оставаться незамеченной почти четыре года. Это уже не разовая оплошность в свежем релизе, а длинный сбой в базовом обещании продукта: если объект приватный, он не должен вести себя как публичный. В списке потенциально затронутых организаций исследователи упоминают медицинские структуры, аэрокосмических производителей, ритейл-инфраструктуру и интернет-провайдеров. То есть речь не про пару домашних серверов энтузиастов, а про вполне взрослые инсталляции, где container registry может быть частью CI/CD-цепочки и внутренней поставки ПО.
Технические детали атаки пока не раскрываются, и это, пожалуй, тот редкий случай, когда отсутствие подробностей выглядит разумно. Сооснователь Noscope Кевал Джагани заявил, что детали намеренно придержали, чтобы дать экосистеме Gitea время на обновление. С практической точки зрения это означает две вещи. Первая: эксплуатировать уязвимость, вероятно, не слишком сложно, иначе столь жёсткая пауза с публикацией выглядела бы менее обязательной. Вторая: командам не стоит ждать красивого разбора на десять страниц, чтобы решить, надо ли патчиться. Надо.
Исправление уже выпущено в версии 1.26.2. Если обновиться немедленно нельзя, временный обходной путь есть: включить параметр [service].REQUIRE_SIGNIN_VIEW=true в конфигурации Gitea. Но это компромисс, а не полноценное лечение. Такой режим заставляет логиниться для просмотра, что ломает сценарии, где часть контейнеров должна оставаться публичной. Иными словами, админ выбирает между безопасностью и удобством публикации, хотя в нормальном мире ему не нужно было бы выбирать вообще.
Есть и ещё один слой проблемы, который выходит за рамки самого Gitea. Noscope отдельно предупреждает: потенциально затронутыми стоит считать и форки платформы, пока их мейнтейнеры не подтвердят обратное. В собственных тестах исследователи уже увидели влияние бага на Forgejo. Для open source-экосистемы это знакомая, но всё равно болезненная механика: унаследованный код приносит не только свободу и скорость развития, но и унаследованные ошибки безопасности. Если компания использует не «чистый» Gitea, а совместимый форк, проверка версии в лоб может не помочь. Нужна отдельная верификация именно по ветке вашего продукта.
Для разработчиков и руководителей инфраструктуры эта история важна не только из-за конкретного CVE. Контейнерный образ сегодня нередко содержит слишком много интересного: внутренние бинарники, служебные зависимости, конфигурацию, иногда даже следы секретов, которые «точно потом уберём». Когда такой образ можно скачать без аутентификации, это уже не просто утечка артефакта. Это разведка для атакующего, карта внутренней архитектуры и иногда короткий путь к supply chain-рискам. Даже если в образе нет ключей и паролей, одни только версии компонентов, структура сервиса и набор зависимостей могут сильно облегчить следующую атаку.
На уровне рынка это ещё один сигнал о том, что self-hosted DevOps-инструменты нельзя автоматически считать более безопасными только потому, что они стоят «у нас в контуре». Контур без регулярного аудита, обновлений и проверки того, как именно реализованы права доступа, быстро превращается в уютное место для самообмана. Уязвимость Gitea бьёт именно по этой иллюзии: приватный реестр оказался не вполне приватным, и заметили это спустя годы. После таких историй у команд обычно меняется не только версия продукта, но и отношение к слову private в интерфейсе.