
Gitea diffpatch RCE (CVE-2026-60004) PoC - repo-write to RCE as Gitea service account
PoC удаленного выполнения кода через конечную точку diffpatch Gitea. Учетная запись с правом записи в репозиторий (на инстансах с открытой регистрацией достаточно анонимной регистрации) может выполнять произвольные команды shell на сервере от имени сервисной учетной записи Gitea.
POST /api/v1/repos/{owner}/{repo}/diffpatch применяет управляемый атакующим патч в общем временном bare-клон-репозитории:
git apply --index --recount --cached --binary # Git ≥ 2.32 时追加 -3 三路合并回退
Цепочка атаки: один и тот же патч применяется дважды → конфликт add/add → запасное трехстороннее слияние выполняет checkout пути из индекса (даже с флагом --cached) → в bare-репозитории root = $GIT_DIR, извлеченный hooks/post-index-change (100755) становится активным Git-хуком → Git автоматически выполняет его при записи индекса → RCE.
AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H470d34b1)-3 — трехстороннее слияние)diffpatch доступна# 设置账户密码
export GITEA_PASSWORD='account-password'
python3 gitea_diffpatch_rce_poc.py \
https://<gitea-base-url> \
<username> \
'id; uname -srm; pwd'
| Параметр | Описание |
|---|---|
url | Базовый URL Gitea |
username |
Зависимости: Python 3 + локальный клиент git.
Ход работы PoC: аутентификация → создание приватного инициализированного репозитория → создание патча hooks/post-index-change → двукратная отправка в diffpatch (вызывает конфликт add/add) → Git выполняет хук → вывод команды извлекается через аутентифицированный Smart HTTP. Без исходящих callback-запросов — вывод возвращается in-band (по тому же каналу).
Только для исследований в области безопасности, проверки уязвимостей и защитного тестирования. Данный PoC создает репозиторий на целевом инстансе, применяет патч и инициирует выполнение команд на сервере. Запускайте только на собственных тестовых инстансах, не используйте против несанкционированных или производственных сред.
| Существующее имя пользователя Gitea (доступность: по умолчанию открыта регистрация) |
command | Команда shell для выполнения на целевой системе |
GITEA_PASSWORD | Пароль учетной записи (переменная окружения или интерактивный ввод) |