Один запрос к HTTP-порту Gitea с заголовком X-WEBAUTH-USER: admin может открыть административную сессию. Пароль, API-токен и действие пользователя не нужны — если контейнер запущен с уязвимой связкой настроек.
Проверка занимает несколько минут. Нужно выяснить четыре вещи: версию Docker-образа, состояние reverse-proxy-аутентификации, список доверенных прокси и доступность HTTP-порта из недоверенной сети. Если совпали все четыре условия, закрывай порт и обновляй Gitea сегодня.
Уязвима конкретная связка версии, настроек и сети
CVE-2026-20896 затрагивает официальные Docker-образы Gitea 1.26.2 и старше. Бинарные установки и самостоятельно собранные конфигурации на основе app.example.ini не получили ошибочный параметр из Docker-шаблона.

Сам по себе старый образ ещё не доказывает уязвимость. Для атаки должны одновременно выполняться четыре условия:
- используется официальный Docker-образ Gitea ≤ 1.26.2;
ENABLE_REVERSE_PROXY_AUTHENTICATION = true;REVERSE_PROXY_TRUSTED_PROXIES = *;- HTTP-порт контейнера доступен недоверенному источнику.
Reverse-proxy-аутентификация в Gitea по умолчанию выключена. Штатное значение доверенных прокси — 127.0.0.0/8,::1/128. Ошибка Docker-шаблона подменяла его на *, то есть разрешала приложению доверять заголовкам от любого IP-адреса.
Проверь секцию [service] в действующем app.ini:
[service]
ENABLE_REVERSE_PROXY_AUTHENTICATION = true
REVERSE_PROXY_TRUSTED_PROXIES = *
Если видишь такую пару, переходи к сетевой проверке. Контейнер за закрытым внутренним ingress не равен контейнеру с опубликованным портом: атакующему нужно обратиться к HTTP-порту Gitea напрямую.
Один заголовок превращается в административную сессию
В режиме reverse-proxy-аутентификации Gitea принимает X-WEBAUTH-USER как имя уже проверенного пользователя. Обычно этот заголовок добавляет прокси после собственной аутентификации.

Параметр REVERSE_PROXY_TRUSTED_PROXIES = * ломает границу доверия. Запрос может прийти не от прокси, а от любого узла, который достигает порта контейнера. Gitea всё равно считает заголовок авторитетным.
Дальше запрос выглядит концептуально так:
X-WEBAUTH-USER: admin
На уязвимой конфигурации приложение открывает сессию пользователя admin без его пароля или токена.
После входа атакующий получает чтение и запись приватных репозиториев. Он также может добраться до SSH-ключей, изменить вебхуки и извлечь учётные данные из репозиториев и конфигурации CI/CD (excello.digital, lemma.frame00.com). Если секреты хранятся рядом с кодом, пригодится отдельный разбор о том, как защитить секреты CI.
Ставь 1.26.4, а не 1.26.3
Gitea исправила CVE-2026-20896 в версии 1.26.3 от 20 июня 2026 года. На следующий день вышла 1.26.4: она устранила регрессию кодовой страницы, появившуюся в 1.26.3. Поэтому обновляться лучше сразу до 1.26.4 или новее (excello.digital, lemma.frame00.com).
После обновления проверь конфигурацию вручную. Патч закрывает дефект образа, но wildcard в старом volume с app.ini может пережить замену контейнера.
Если reverse-proxy-аутентификация не нужна, выключи её:
[service]
ENABLE_REVERSE_PROXY_AUTHENTICATION = false
Если нужна, ограничь доверие loopback-сетями:
[service]
ENABLE_REVERSE_PROXY_AUTHENTICATION = true
REVERSE_PROXY_TRUSTED_PROXIES = 127.0.0.0/8,::1/128
Именно такое значение Gitea указывает как штатное; его также рекомендуют для устранения риска CVE-2026-20896 (rescana.com, penligent.ai). Если прокси работает на другом хосте, укажи его реальную подсеть вместо * и закрой порт Gitea от остальных источников.
Внешний порт меняет патч в расследование
Первые попытки поиска уязвимых серверов заметили через 13 дней после публикации исправления. Наблюдатели насчитали около 6200 доступных из интернета инстансов, которые могли попасть под сканирование (rescana.com, lemma.frame00.com).

Источники расходятся в оценке активности. Secarma сообщает об эксплуатации, а данные Sysdig подтверждают сканирование, но не дальнейшие действия на найденных серверах (secarma.com, lemma.frame00.com). Поэтому нельзя считать каждый открытый инстанс взломанным. Нельзя и считать его чистым только потому, что контейнер уже обновлён.
Если уязвимый порт был доступен извне, проверь журналы прокси и Gitea за период до обновления. Ищи запросы в обход штатного прокси, неожиданные входы, изменения SSH-ключей, вебхуков, пользователей и репозиториев.
При следах доступа отзывай API-токены и SSH-ключи. Меняй пароли, ключи деплоя и учётные данные, найденные в приватных репозиториях или CI/CD: у административной сессии был доступ к коду, вебхукам и секретам (secarma.com, lemma.frame00.com).
Закончи проверку сегодня
Инстанс требует немедленного обновления, если ты подтвердил все четыре условия: официальный Docker-образ ≤ 1.26.2, включённую reverse-proxy-аутентификацию, REVERSE_PROXY_TRUSTED_PROXIES = * и доступ к HTTP-порту из недоверенной сети.
Пройди один чек-лист:
- Определи версию запущенного образа, а не только тег в Compose-файле.
- Найди в действующем
app.iniоба параметра reverse-proxy-аутентификации. - Проверь публикацию HTTP-порта, ingress и правила firewall.
- Обнови Gitea до 1.26.4 или новее и убери wildcard из доверенных прокси.
- Если порт был открыт извне, проверь журналы и смени доступные Gitea секреты.
Результат должен быть однозначным: либо четыре условия атаки не сходятся и ты фиксируешь почему, либо считаешь инстанс затронутым, закрываешь вход и переходишь к аудиту.