
Как самописный git-сервер слил приватный код одним HTTP-заголовком
Клиент был уверен, что его код в безопасности — сервер стоит у него, а не в облаке. На практике «приватное» репо открылось без единого пароля.
Ко мне обратился владелец небольшой продуктовой компании — 15 разработчиков, весь код в самостоятельно поднятом Gitea. Логика простая: своё железо, своя сеть, значит безопасно. Формально так и есть, если не забывать обновлять софт.
На аудите я поднял точную копию их версии Gitea на тестовом стенде и прогнал типовые проверки. И наткнулся на свежую уязвимость, о которой уже писали security-исследователи: определённый HTTP-заголовок в запросе заставляет сервер думать, что пользователь уже авторизован. Без пароля, без токена, без единого лишнего клика.
Через эту дыру открывались приватные репозитории — то есть весь исходный код продукта, включая куски с ключами доступа к базе и внешним сервисам, которые разработчики по привычке коммитят прямо в код, а не в отдельное хранилище секретов. Плюс открывалась административная панель самого Gitea — управление пользователями, правами, настройками сервера.
Посчитал ущерб, если бы этим воспользовался конкурент или обиженный подрядчик. Утечка кода продукта — минимум полгода разработки конкурентного функционала, который можно скопировать за неделю. Утечка ключей от базы данных клиентов — репутационные потери и возможный штраф по 152-ФЗ. По самой скромной оценке речь шла о нескольких миллионах рублей, если считать упущенную выгоду и стоимость экстренного реагирования.
Дыра эта не уникальна для Gitea. Похожая логика ломается в любом самописном или редко обновляемом сервисе, где авторизация завязана на доверие к заголовкам запроса, а не на серверную проверку сессии. За последний год такие баги нашли в нескольких open-source системах — паттерн один и тот же: разработчики добавляют «удобный» способ прокинуть авторизацию через прокси или балансировщик, а потом забывают закрыть этот путь для прямых запросов.
Закрыли проблему в три шага, без покупки нового софта. Обновили Gitea до версии с патчем — бесплатно, час работы. Настроили реверс-прокси так, чтобы он отбрасывал подозрительные заголовки авторизации, если запрос пришёл не изнутри доверенной сети. И включили логирование неудачных и подозрительных попыток входа с алертом в мессенджер — раньше логи просто копились и никто их не смотрел.
Итоговый чек за весь аудит и исправление — на порядок меньше суммы потенциального ущерба. Дороже всего обошлась не сама работа, а время, которое ушло на объяснение команде, почему секреты нельзя хранить в коде и почему self-hosted не равно безопасный по умолчанию.
Главный вывод для бизнеса простой: свой сервер снимает риски облачного провайдера, но добавляет ответственность за собственные обновления. Если никто в компании не следит за патчами конкретно этого сервиса, разница между облаком и своим железом становится чисто психологической.
Полный разбор с деталями кейса →
Бесплатный аудит безопасности Сколько стоит взлом Канал в Telegram Канал в MAX













