Критическая уязвимость CVE-2026-59774 позволяет без авторизации читать файлы на серверах с самостоятельно размещённой Gitea. Проблема получила оценку 9,8 по шкале CVSS и затрагивает версии с 1.22.1 по 1.27.0. Исправление вошло в Gitea 1.27.1, официальный бюллетень выпущен 2 августа 2026 года. Администраторам нужно установить обновление немедленно. Экземпляры Gitea Cloud должны обновляться автоматически во время регламентного окна выпуска. Версия 1.27.1 заодно закрывает CVE-2026-60004, отдельную уязвимость удалённого выполнения кода, о которой ранее сообщал The Hacker News (THN).

Атака проходит через обработчик разметки POST /{owner}/{repo}/markup. Этот маршрут допускает запрос без аутентификации, находит указанный репозиторий и проверяет право чтения. Для анонимного пользователя проверка завершается успешно, если репозиторий публичный и в нём включён модуль кода. Учётная запись Gitea, право записи в репозиторий, специальный статус или привилегии злоумышленнику не нужны. Если на сервере нет ни одного публичного репозитория, анонимного пути через данный обработчик нет, но уязвимую установку всё равно следует обновить.
Ошибка находилась в обработчике Org-mode. В Gitea 1.27.0 библиотека go-org инициализировалась вызовом (), причём разработчики не заменили стандартную функцию обратного вызова ReadFile. В go-org 1.9.1 по умолчанию использовалась ioutil.ReadFile, напрямую читающая файл. Поддерживаемая Org-mode директива +INCLUDE принимает абсолютные пути и передаёт их этой функции. В итоге средство форматирования текста невольно получило доступ к файловой системе хоста.
Для эксплуатации достаточно отправить подготовленную Org-mode-разметку, выбрать режим Mode: file и передать в +INCLUDE абсолютный путь. Gitea обращается к нему через ioutil.ReadFile и возвращает содержимое в ответе. Граница доступа определяется правами системной учётной записи, от имени которой запущена служба Gitea: атакующий может прочитать любой доступный ей серверный файл. Это могут быть конфигурация приложения, параметры базы данных, токены и ключевой материал.
Сама CVE-2026-59774 не даёт прямого выполнения команд одним запросом. В бюллетене Gitea, впрочем, описана более длинная цепочка: прочитать конфигурационный файл app.ini, извлечь INTERNAL_TOKEN, с его помощью внедрить Git-хук через внутренний журнал и запустить этот хук при анонимном клонировании репозитория. Результатом станет выполнение команд. The Hacker News не обнаружил независимо опубликованного эксплойта, воспроизводящего всю цепочку, поэтому сценарий с внутренним токеном и Git-хуком пока подтверждён только бюллетенем Gitea.
Первоначальное исправление внесено в PR 38642, его перенос в поддерживаемую ветку оформлен как PR 38645. Gitea теперь явно переопределяет обработчик ReadFile: путь из директивы включения выводится как обычное отрисованное содержимое, но не разрешается в файловой системе и не читается с диска сервера. К патчу добавили регрессионный тест, проверяющий обработку пути в +INCLUDE.
Одной установки Gitea 1.27.1 недостаточно, если уязвимый сервер был доступен извне до обновления. При наличии в журналах обращений к обработчику разметки следует считать потенциально раскрытыми все секреты, которые могла прочитать служебная учётная запись Gitea. Замене подлежат внутренний токен Gitea, данные OAuth, материал подписи JWT, учётные данные базы данных и прочие пароли, токены либо ключи, хранившиеся в доступных службе файлах.
Формальных правил обнаружения атаки Gitea не опубликовала. В журналах стоит искать анонимные запросы POST /{owner}/{repo}/markup к публичным репозиториям, особенно с выбором Org-mode, режимом Mode: file, директивой +INCLUDE и абсолютными путями. При подозрении на попытку перейти к выполнению команд нужно проверить каталоги хуков репозиториев, новые или изменённые Git-хуки, неожиданные исполняемые файлы и анонимные клонирования, совпавшие по времени с появлением таких объектов.
По данным бюллетеня Gitea, случаев эксплуатации в реальных атаках известно не было. На 5 августа 2026 года CVE-2026-59774 отсутствовала в каталоге активно эксплуатируемых уязвимостей Агентства по кибербезопасности и защите инфраструктуры США, известном как CISA KEV. При этом возможность чтения файлов публично показывали ещё до выхода официального бюллетеня, о чём говорилось в более раннем материале THN. Полная цепочка от кражи INTERNAL_TOKEN до запуска Git-хука независимо и публично продемонстрирована не была. Уязвимость обнаружила XBOW Security, описываемая как автономная система наступательной безопасности; первичный разбор провёл Guido Leo. Независимый отчёт о той же ошибке отправил Shai Rod, известный в сети как NightRang3r.
CVE-2026-59774 стала очередной серьёзной проблемой Gitea в 2026 году. Помимо исправленной в 1.27.1 уязвимости выполнения кода CVE-2026-60004, в июне Gitea закрыла CVE-2026-20896 — критический обход аутентификации обратного прокси в Docker-образах; сканирование уязвимых систем злоумышленники начали через 13 дней после раскрытия. В мае была зарегистрирована CVE-2026-27771, ошибка разграничения доступа к реестру контейнеров, предположительно затронувшая свыше 30 000 установок более чем в 30 странах. Для серверов версий 1.22.1–1.27.0 практический порядок действий остаётся жёстким: обновление до 1.27.1, анализ обращений к обработчику разметки, проверка Git-хуков и замена всех секретов, доступных учётной записи службы.

Изображение носит иллюстративный характер
Атака проходит через обработчик разметки POST /{owner}/{repo}/markup. Этот маршрут допускает запрос без аутентификации, находит указанный репозиторий и проверяет право чтения. Для анонимного пользователя проверка завершается успешно, если репозиторий публичный и в нём включён модуль кода. Учётная запись Gitea, право записи в репозиторий, специальный статус или привилегии злоумышленнику не нужны. Если на сервере нет ни одного публичного репозитория, анонимного пути через данный обработчик нет, но уязвимую установку всё равно следует обновить.
Ошибка находилась в обработчике Org-mode. В Gitea 1.27.0 библиотека go-org инициализировалась вызовом (), причём разработчики не заменили стандартную функцию обратного вызова ReadFile. В go-org 1.9.1 по умолчанию использовалась ioutil.ReadFile, напрямую читающая файл. Поддерживаемая Org-mode директива +INCLUDE принимает абсолютные пути и передаёт их этой функции. В итоге средство форматирования текста невольно получило доступ к файловой системе хоста.
Для эксплуатации достаточно отправить подготовленную Org-mode-разметку, выбрать режим Mode: file и передать в +INCLUDE абсолютный путь. Gitea обращается к нему через ioutil.ReadFile и возвращает содержимое в ответе. Граница доступа определяется правами системной учётной записи, от имени которой запущена служба Gitea: атакующий может прочитать любой доступный ей серверный файл. Это могут быть конфигурация приложения, параметры базы данных, токены и ключевой материал.
Сама CVE-2026-59774 не даёт прямого выполнения команд одним запросом. В бюллетене Gitea, впрочем, описана более длинная цепочка: прочитать конфигурационный файл app.ini, извлечь INTERNAL_TOKEN, с его помощью внедрить Git-хук через внутренний журнал и запустить этот хук при анонимном клонировании репозитория. Результатом станет выполнение команд. The Hacker News не обнаружил независимо опубликованного эксплойта, воспроизводящего всю цепочку, поэтому сценарий с внутренним токеном и Git-хуком пока подтверждён только бюллетенем Gitea.
Первоначальное исправление внесено в PR 38642, его перенос в поддерживаемую ветку оформлен как PR 38645. Gitea теперь явно переопределяет обработчик ReadFile: путь из директивы включения выводится как обычное отрисованное содержимое, но не разрешается в файловой системе и не читается с диска сервера. К патчу добавили регрессионный тест, проверяющий обработку пути в +INCLUDE.
Одной установки Gitea 1.27.1 недостаточно, если уязвимый сервер был доступен извне до обновления. При наличии в журналах обращений к обработчику разметки следует считать потенциально раскрытыми все секреты, которые могла прочитать служебная учётная запись Gitea. Замене подлежат внутренний токен Gitea, данные OAuth, материал подписи JWT, учётные данные базы данных и прочие пароли, токены либо ключи, хранившиеся в доступных службе файлах.
Формальных правил обнаружения атаки Gitea не опубликовала. В журналах стоит искать анонимные запросы POST /{owner}/{repo}/markup к публичным репозиториям, особенно с выбором Org-mode, режимом Mode: file, директивой +INCLUDE и абсолютными путями. При подозрении на попытку перейти к выполнению команд нужно проверить каталоги хуков репозиториев, новые или изменённые Git-хуки, неожиданные исполняемые файлы и анонимные клонирования, совпавшие по времени с появлением таких объектов.
По данным бюллетеня Gitea, случаев эксплуатации в реальных атаках известно не было. На 5 августа 2026 года CVE-2026-59774 отсутствовала в каталоге активно эксплуатируемых уязвимостей Агентства по кибербезопасности и защите инфраструктуры США, известном как CISA KEV. При этом возможность чтения файлов публично показывали ещё до выхода официального бюллетеня, о чём говорилось в более раннем материале THN. Полная цепочка от кражи INTERNAL_TOKEN до запуска Git-хука независимо и публично продемонстрирована не была. Уязвимость обнаружила XBOW Security, описываемая как автономная система наступательной безопасности; первичный разбор провёл Guido Leo. Независимый отчёт о той же ошибке отправил Shai Rod, известный в сети как NightRang3r.
CVE-2026-59774 стала очередной серьёзной проблемой Gitea в 2026 году. Помимо исправленной в 1.27.1 уязвимости выполнения кода CVE-2026-60004, в июне Gitea закрыла CVE-2026-20896 — критический обход аутентификации обратного прокси в Docker-образах; сканирование уязвимых систем злоумышленники начали через 13 дней после раскрытия. В мае была зарегистрирована CVE-2026-27771, ошибка разграничения доступа к реестру контейнеров, предположительно затронувшая свыше 30 000 установок более чем в 30 странах. Для серверов версий 1.22.1–1.27.0 практический порядок действий остаётся жёстким: обновление до 1.27.1, анализ обращений к обработчику разметки, проверка Git-хуков и замена всех секретов, доступных учётной записи службы.