
🫖 Инструмент для обнаружения, связанного с контрактами, и авторизованной проверки уязвимости CVE-2026-60004 в Gitea
Автономный инструмент для обнаружения, оценки и проверки, коррелируемой с договором, уязвимости удалённого выполнения кода в Git-хуке
diffpatchGitea.
scanner.py предоставляет пентестерам, защитникам и исследователям безопасности один инструмент без внешних зависимостей для:
Этот проект предоставляется только для авторизованного тестирования безопасности, защитной валидации, исследований и образования. Запускайте активные режимы исключительно против систем, которыми вы владеете или на проверку которых имеете явное письменное разрешение. Вы несёте ответственность за соблюдение всех применимых законов, контрактов, правил взаимодействия и требований к раскрытию информации.
Авторы и участники не несут ответственности за неправомерное использование, ущерб, прерывание обслуживания, потерю данных или юридические последствия. Активный PoC выполняет команду от имени пользователя операционной системы Gitea и изменяет состояние сервера, создавая приватный репозиторий. Относитесь к нему как к любому другому инструменту проверки RCE.
CVE-2026-60004 затрагивает рабочий процесс diffpatch репозитория Gitea. Пользователь с правом записи в репозиторий может отправить специально подготовленное содержимое патча, которое устанавливает Git-хук в общий временный bare-клон. Двукратное применение специально созданного патча вызывает коллизию add/add и приводит к выполнению хука от имени сервисной учётной записи Gitea.
Forgejo и другие форки автоматически не классифицируются как уязвимые. Их реализация должна проверяться независимо.
Активные режимы не принимают списки целей или подстановочные знаки.
PATHdiscoverСканер использует только стандартную библиотеку Python. Установка pip install не требуется.
git clone https://github.com/InfoSec-DB/CVE-2026-60004-Gitea-Validator.git
cd CVE-2026-60004-Gitea-Validator
python3 scanner.py --help
python3 scanner.py verify \
https://gitea.example \
--contract-number ENG-2026-001 \
--output evidence/version.json
python3 scanner.py recon \
https://gitea.example \
--contract-number ENG-2026-001 \
--output evidence/recon.json
Обнаружение версии — это сигнал для оценки, а не доказательство эксплуатируемости. Бэкпортированные патчи, пользовательские сборки, обратные прокси и форки могут требовать ручной проверки.
Держите пароль вне истории оболочки, поместив его в переменную окружения для команды:
GITEA_PASSWORD='replace-with-approved-test-password' \
python3 scanner.py confirm \
https://gitea.example \
--contract-number ENG-2026-001 \
--username audit-user \
--execute-poc \
--write-client-marker \
--output evidence/confirmation.json
Если для автоматизации не указан --yes-i-am-authorized, confirm попросит вас ввести привязанную к договору фразу подтверждения. Команда по умолчанию — id.
Используйте это только тогда, когда создание учётной записи разрешено правилами взаимодействия:
python3 scanner.py confirm \
https://gitea.example \
--contract-number ENG-2026-001 \
--register-test-account \
--credential-log evidence/credentials.txt \
--execute-poc \
--write-client-marker \
--output evidence/confirmation.json
Пароль хранится только в приватном журнале учётных данных и не дублируется в JSON-доказательствах или панели результатов терминала.
python3 scanner.py test \
https://gitea.example \
--contract-number ENG-2026-001
🚨 test — это активная удобная команда. На затронутой цели с включённой регистрацией она автоматически создаёт учётную запись и приватный репозиторий, записывает маркер договора, выполняет id и сохраняет результаты в afterdark-results/. Она намеренно не имеет дополнительного интерактивного запроса, поэтому её вызов и является подтверждением авторизации.
Для узко ограниченной, явно одобренной валидации confirm и test принимают --cmd. Предпочитайте профиль id по умолчанию, когда его достаточно.
GITEA_PASSWORD='replace-with-approved-test-password' \
python3 scanner.py confirm \
https://gitea.example \
--contract-number ENG-2026-001 \
--username audit-user \
--execute-poc \
--cmd 'uname -a' \
--output evidence/confirmation.json
export LEAKIX_API_KEY='replace-with-your-key'
python3 scanner.py discover \
--method app \
--pages 3 \
--output evidence/leakix.json
Для просмотра записей LeakIX об одном известном хосте без связи с этим хостом:
python3 scanner.py discover \
--method host \
--target gitea.example \
--pages 1 \
--output evidence/leakix-host.json
Результаты обнаружения — это зацепки, а не авторизация на сканирование или эксплуатацию перечисленных систем.
hooks/post-index-change.diffpatch репозитория.0600, и отказывается перезаписывать существующие доказательства.Аутентифицированные HTTP-редиректы ограничены выбранным исходным источником цели. Получение вывода Git также отключает редиректы, пока активен заголовок авторизации.
Активные запуски могут создавать:
confirmation.json — временные метки, цель, имя учётной записи, оценка версии, код возврата и захваченный выводconfirmation.command-output.txt — полный вывод удалённой командыcredentials.txt — сгенерированный пароль одноразовой учётной записи, если запрошеноembedded-result.txt, сохраняемое внутри JSON-доказательствЭти файлы могут содержать чувствительные данные взаимодействия. Они игнорируются включённым .gitignore, создаются с режимом 0600 и должны шифроваться в состоянии покоя в соответствии с вашей политикой обработки доказательств.
Инструмент намеренно избегает автоматического удаления, чтобы доказательства оставались доступными для проверки. После тестирования администратор цели должен:
audit-*, если она была созданаafterdark-*/tmp/gitea-validation-*/client.txt1.27.1 или новееУспешное выполнение PoC демонстрирует выполнение команд от имени сервисной учётной записи Gitea. Само по себе оно не доказывает root-доступ, закрепление, боковое перемещение или компрометацию базового хоста.
id или whoami--execute-poc для confirmВключённые тесты являются локальными и не выполняют сетевых запросов:
python3 -m unittest discover -s tests -v
Ответственные улучшения приветствуются — особенно исправления совместимости, снижение ложных срабатываний, улучшение качества доказательств и более безопасные рабочие процессы очистки. Пожалуйста, не отправляйте реальные данные целей, учётные данные, приватные доказательства или оружейные полезные нагрузки.
По вопросам безопасности самого инструмента следуйте SECURITY.md.
Создано для внимательных исследователей, которые верят, что хороший PoC должен быть воспроизводимым, атрибутируемым и скучным в очистке. 🛡️
| Пункт | Детали |
|---|
| Продукт | Gitea |
| Затронутые версии | >= 1.17.0, < 1.27.1 |
| Исправленная версия | 1.27.1 |
| Воздействие | Удалённое выполнение команд от имени пользователя ОС Gitea |
| Требуемый доступ | Право записи в репозиторий; открытая регистрация может позволить атакующему создать его |
| Консультация | GHSA-rcr6-4jqh-j84m |
| Режим | Сетевое поведение | Изменяет состояние цели? | Назначение |
|---|
discover | Запрашивает только LeakIX | Нет | Ищет в существующем стороннем индексе; не связывается с обнаруженными хостами |
recon | Одна конкретная цель | Нет | Инвентаризирует фиксированные публичные маршруты и опубликованный целевой Swagger-документ |
verify | Одна конкретная цель | Нет | Читает /api/v1/version и классифицирует сообщённую версию Gitea |
test | Одна конкретная цель | Да | Удобный поток: проверка версии, проверка регистрации, одноразовая учётная запись, маркер, id и доказательства |
confirm | Одна конкретная цель | Да | Контролируемое подтверждение с одобренной учётной записью или явной одноразовой регистрацией |