Skip to content
KitploitKITPLOIT
ИнструментыЭксплойтыБлог
Log in
Отправить
ИнструментыЭксплойтыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

ЛентыКонтактыКонфиденциальность© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
Инструменты/GitHubGitHub/abraxas/forgejo-restore-file-open
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийСбор информацииТестирование на ПроникновениеЛаборатории и Практика
GitHubabraxas/forgejo-restore-file-open

forgejo-restore-file-open

Forgejo 16.0.5 — высокий — удалённый — чтение файлов — restore-repo следует за file:// со стороны дампа в attachments

Репозиторий
189 дней назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Abraxas Labs - forgejo-restore-file-open

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  forgejo-restore-file-open

Разбор: https://abraxaslabs.tech/research/forgejo-restore-file-open

forgejo-restore-file-open

Класс: чтение файлов Доступ: локальный

Forgejo 16.0.5 (8d24b7d) - Forgejo

forgejo restore-repo недоверенного дампа перезаписывает URL релизных артефактов через необработанный filepath.Join(baseDir, download_url) и добавляет префикс file://. uri.Open по-прежнему выполняет os.Open для этого пути. Пустой --units восстанавливает релизы. В Gitea 1.27.0 добавлен localFileURL и пропущено экранирование записей. Этого помощника здесь нет.

Восстановление оператором недоверенного дампа копирует файл хоста, который может открыть uid forgejo, во вложение релиза.

IDCVE пока нет
Классчтение файлов
Доступлокальный (оператор forgejo restore-repo недоверенного дампа)
CWECWE-22 / CWE-73
CVSSВысокий: 7.3 CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:C/C:H/I:N/A:N
ПродуктForgejo
Затронутопо v16.0.5 (8d24b7d); локальное восстановление оператором
Аутентификациялокальное восстановление оператором недоверенного дампа
ЛицензияGNU Affero GPL v3.0
Лабораториятолько 127.0.0.1

Что может сделать атакующий

Передать оператору каталог дампа (или уже иметь INTERNAL_TOKEN и путь, который сервер может прочитать). Юниты включают releases / release_assets.

ПривилегияМетод / точка сбросаРазведка / целостность / доступностьДоказано в лаборатории или выведено
Прочитать файл хоста, который может открыть uid forgejo, через .. за пределы дампаrelease.yml download_url: ../FORGEJO-FILE-WITNESS.txt; восстановление объединяет пути, uri.Open выполняет os.Open, байты сохраняются как witness.txtРазведка (конфиденциальность файлов хоста)Доказано в лаборатории. Тело вложения — FORGEJO-RESTORE-FILE-OPEN-WITNESS. Приманка внутри дампа INSIDE-DUMP-NOT-HOST не была отдана
Тот же результат с символической ссылкой, помещённой внутрь дампаОбъединённый путь остаётся под baseDir; os.Open следует по ссылкеРазведкаВыведено из uri.Open file -> os.Open. В лаборатории использовался .., а не символическая ссылка
Тот же сброс на патчах PRpull_request.yml PatchURL перезаписывается так же, затем uri.Open в repo/pulls/<n>.patchРазведкаВыведено из restore.go GetPullRequests. В лаборатории восстанавливались только релизы
Читатели восстановленного репозитория скачивают файл хостаGET /<owner>/<repo>/releases/download/<tag>/<name>РазведкаДоказано в лаборатории как labadmin Basic на восстановленном публичном репозитории
Типичные файлы хоста: app.ini, INTERNAL_TOKEN, SECRET_KEY, пароль БДuid forgejo может читать дерево конфигурацииРазведкаВыведено. Свидетелем в лаборатории был подложенный файл рядом с дампом, а не реальные секреты

Закрыто здесь: живой POST /repos/migrate file:// LFI (DownloadFunc задан; PR PatchURL проверяется на префикс относительно HTTP-базы клона). Побег из корня дампа через абсолютный DownloadURL (в Go filepath.Join("/dump", "/etc/passwd") остаётся /dump/etc/passwd). Неаутентифицированное HTTP-восстановление (только CLI / внутренний токен). Упаковка app.ini в резервный dump (секреты по замыслу, режим архива 0600). Не OS LPE. Не удалённый LFI.

Как я это нашёл

У меня было две идеи насчёт восстановления. Сначала я мысленно проверил абсолютное объединение путей в Gitea. Go filepath.Join не отбрасывает абсолютный второй аргумент так, как это делает Python os.path.join. Рабочий вход — относительный ... localFileURL из Gitea в этом дереве отсутствует.

Неверные повороты уже зафиксированы: выход из dump-root через join с помощью абсолютного DownloadURL; live-миграция file:// LFI; X-Forgejo-Internal-Auth (restore выполняется через CLI от имени uid forgejo, а не через /api/internal); трактовка restore HTTP как удалённого неаутентифицированного; reverse shell. Театр.

Лаборатория

python3 forgejo-restore-file-open-Abraxas-Labs.py

или:

cd lab
./run.sh

Цель — только http://127.0.0.1:19340. Образ codeberg.org/forgejo/forgejo:16.0.5. Свидетель FORGEJO-RESTORE-FILE-OPEN-WITNESS.

IOC asset name='witness.txt' ...
IOC download status=200 bytes=34 snippet=b'FORGEJO-RESTORE-FILE-OPEN-WITNESS\n'
SUCCESS forgejo-restore-file-open how=live ..-join file:// os.Open FORGEJO-RESTORE-FILE-OPEN-WITNESS

Исправление

Ограничить объединённые пути в пределах baseDir после EvalSymlinks (Gitea PR 38215 localFileURL). Отклонять ... Не следовать символьным ссылкам со стороны дампа за пределы дампа. Убрать file:// из uri.Open, кроме вспомогательной функции, ограниченной корнем дампа.

Ссылки

  • codeberg.org/forgejo/forgejo тег v16.0.5
  • restore.go · uri.go
  • Тот же класс уязвимости в Gitea: gitea-restore-file-open
  • CWE-22 · CWE-73

Лицензия

GNU Affero GPL v3.0. См. LICENSE. Только для лабораторных испытаний на loopback. Без гарантий.

Скачать инструмент