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

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

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

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

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

Категории

Все категории
Loading categories
forgejo-restore-file-open — Forgejo 16.0.5 — высокий — удалённый — чтение файлов — restore-repo следует за file:// со стороны дампа в attachments | Kitploit
Инструменты/GitHubGitHub/abraxas/forgejo-restore-file-open
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийСбор информацииТестирование на ПроникновениеЛаборатории и Практика
GitHubabraxas/forgejo-restore-file-open

forgejo-restore-file-open

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

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

Популярное

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

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

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

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

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

Abraxas Labs - forgejo-restore-file-open

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  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 в этом дереве отсутствует.

Уже зафиксированные неверные пути: побег из объединения с корнем дампа через абсолютный DownloadURL; живой migrate file:// LFI; X-Forgejo-Internal-Auth (восстановление — это CLI от имени uid forgejo, а не /api/internal); трактовка HTTP-восстановления как удалённого неаутентифицированного; обратная оболочка. Театр.

Лаборатория

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. Без гарантий.

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