
Python PoC-эксплойт для CVE-2025-8110, демонстрирующий произвольную запись файлов с переходом к RCE в Gogs через манипуляции с символическими ссылками и злоупотребление API. Предназначен для образовательных исследований в области безопасности и авторизованных лабораторных сред.
Этот репозиторий содержит скрипт доказательства концепции (PoC) на Python для демонстрации и анализа уязвимости, зарегистрированной как CVE-2025-8110 в самоуправляемом Git-сервисе Gogs (версии 0.13.3 и ниже).
[!WARNING] ЭТО ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДНАЗНАЧЕНО ТОЛЬКО ДЛЯ ОБРАЗОВАТЕЛЬНЫХ ЦЕЛЕЙ И ИССЛЕДОВАНИЙ БЕЗОПАСНОСТИ. Использование данного материала против целей без предварительного письменного согласия их владельцев является полностью незаконным. Автор этого репозитория не несет ответственности за любой ущерб, вред или неправомерное использование, возникшее в результате применения этого кода. Используйте его всегда на свой страх и риск и только в контролируемых средах или санкционированных симуляциях (таких как лаборатории CTF).
CVE-2025-8110 — это критическая уязвимость произвольной записи файлов, вызванная недостаточной проверкой при обработке символических ссылок (symlinks) через API PutContents в Gogs.
Аутентифицированный злоумышленник может:
.git/config).root, запись файлов может быть расширена до удаленного выполнения кода (RCE) путем внедрения желаемой команды в свойство sshCommand файла конфигурации Git.exploit.py)Скрипт автоматизирует весь процесс эксплуатации, используя действительные учетные данные и токен API, предварительно сгенерированный вручную в веб-интерфейсе Gogs:
┌──────────────────────────────────────────────┐
│ Машина атакующего (Kali) │
└──────────────────────┬───────────────────────┘
│
(1) Создает вредоносный │ (3) Загружает Symlink (.git/config)
репозиторий через API │ через git push
▼
┌──────────────────────────────────────────────┐
│ Локальный SSH-туннель (порт 8080) │
└──────────────────────┬───────────────────────┘
│
▼
┌──────────────────────────────────────────────┐
│ Сервер-жертва Gogs │
│ (Порт 3001) │
└──────────────────────┬───────────────────────┘
│
│ (4) API PUT "contents"
│ Переходит по Symlink и записывает
│ "sshCommand" в .git/config
▼
┌──────────────────────────────────────────────┐
│ Выполнение полезной нагрузки от имени │
│ ROOT │
└──────────────────────────────────────────────┘
create_malicious_repo: Выполняет запрос POST к API Gogs (/api/v1/user/repos) с аутентификацией по предоставленному токену доступа для создания нового репозитория со случайным именем, генерируемым динамически.upload_malicious_symlink:
/tmp/..git/config (файл конфигурации Git сервера).git push).exploit: Определяет полезную нагрузку (payload) с помощью трюка внедрения в свойство sshCommand Git. При обновлении содержимого через API Gogs вынужден перезаписать свой собственный .git/config на сервере. Когда срабатывает последняя часть процесса Git, система Gogs выполняет команду терминала (обратную оболочку Bash), возвращая соединение на ваш слушающий Netcat.Убедитесь, что вы настроили глобальные идентификационные данные в Git перед запуском скрипта, чтобы избежать ошибок при автоматическом коммите:
git config --global user.email "студент@безопасность.local"
git config --global user.name "студент"