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

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

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

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

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

Категории

Все категории
Loading categories
Gitea-template-sync-Path-Traversal-Privilege-Escalation-CVE-2026-38526- — PoC и разбор повышения привилегий в HackTheBox "Nexus": запускаемая от root служба синхронизации шаблонов Gitea, уязвимая к обходу пути через поддельные Git-объекты. Только для образовательных целей. | Kitploit
Инструменты/GitHubGitHub/shirouuu/gitea-template-sync-path-traversal-privilege-escalation-cve-2026-38526-
Повышение привилегийАнализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийПост-эксплуатацияCTFТестирование на ПроникновениеОбучение и ОбразованиеРазработка Полезной Нагрузки

Популярное

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

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

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

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

Смотреть все инструменты →
Поделиться
Лаборатории и Практика
GitHubshirouuu/gitea-template-sync-path-traversal-privilege-escalation-cve-2026-38526-

Gitea-template-sync-Path-Traversal-Privilege-Escalation-CVE-2026-38526-

PoC и разбор повышения привилегий в HackTheBox "Nexus": запускаемая от root служба синхронизации шаблонов Gitea, уязвимая к обходу пути через поддельные Git-объекты. Только для образовательных целей.

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

Nexus — PoC локального повышения привилегий

Обход пути при синхронизации шаблонов Gitea через поддельные Git-объекты → root

Proof-of-concept эксплойта для повышения привилегий на машине HackTheBox Nexus. Принадлежащий root systemd-сервис синхронизирует шаблонные репозитории Gitea на диск без очистки имён записей, что позволяет аутентифицированному низкопривилегированному пользователю записывать произвольные файлы от имени root через обход каталога — здесь это используется для внедрения SSH-ключа в /root/.ssh/authorized_keys.


⚠️ Отказ от ответственности

Этот код предоставлен исключительно в образовательных целях и для авторизованного тестирования безопасности — то есть для лабораторных сред, таких как HackTheBox, или систем, которыми вы владеете или на тестирование которых у вас есть явное письменное разрешение. Неавторизованное использование против систем, которые вы не контролируете, незаконно. Автор не несёт ответственности за неправомерное использование.

Если машина Nexus всё ещё активна на HackTheBox, не публикуйте и не распространяйте этот эксплойт — правила HTB запрещают распространение решений для активных машин.


Сводка уязвимости

КлассОбход каталога (CWE-22) → Локальное повышение привилегий
Компонентgitea-template-sync.service (кастомный /etc/gitea/template-sync.py)
Запускается отroot, срабатывает каждые ~60 с через gitea-template-sync.timer
Первопричинаos.path.join() по неочищенным именам, взятым из объектов Git tree
ВоздействиеАутентифицированный низкопривилегированный пользователь → root

Скрипт синхронизации читает файлы из репозиториев, помеченных как шаблоны в Gitea, и записывает их в локальную файловую систему. Путь назначения строится примерно так:

dest = os.path.join(base_dir, name)   # name comes straight from the Git tree
open(dest, "w").write(content)

os.path.join() не нейтрализует последовательности ... Поэтому запись дерева, имя которой является путём обхода (например, ../../../../../root/.ssh/authorized_keys), заставляет привилегированный процесс записать файл вне предполагаемого каталога.


Зачем поддельные Git-объекты?

Git хранит содержимое и имена отдельно:

  • blob содержит необработанное содержимое файла (без имени);
  • tree сопоставляет name → object (именно здесь хранится имя файла);
  • commit указывает на дерево верхнего уровня.

Имя файла в записи дерева — это просто текст, поэтому оно может быть .. — но стандартный клиент Git отказывается создавать такую запись, именно чтобы предотвратить эту атаку.

Этот PoC обходит клиентскую проверку, записывая необработанные Git-объекты напрямую в .git/objects/ (вычисляя SHA-1 идентификаторы вручную) и вручную формируя refs/heads/main. Отправленный репозиторий затем содержит запись дерева с именем .., которую root-процесс синхронизации разрешает и следует по ней.


Цепочка атаки (полный контекст машины)

  1. Первичный доступ — неограниченная загрузка файлов в Krayin CRM (CVE-2026-38526) → RCE от имени www-data.
  2. Боковое перемещение — учётные данные в открытом виде в production .env, переиспользованные как системный пароль → SSH от имени низкопривилегированного пользователя.
  3. Повышение привилегий — этот PoC → root.

Повторяющаяся тема на всех трёх этапах: привилегированный процесс доверяет контролируемым атакующим данным без валидации (подделанный MIME-тип, переиспользованный пароль, неочищенное имя файла).


Требования

  • Запуск на целевой машине, от имени аутентифицированного низкопривилегированного пользователя.
  • Gitea доступна по адресу http://localhost:3000.
  • Доступны git, python3, curl и ssh (по умолчанию на машине).

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

chmod +x nexus_privesc.sh
./nexus_privesc.sh -t <TARGET_IP> -u <GITEA_USER> -p <GITEA_PASS> [-d DEPTH]
ФлагОписаниеПо умолчанию
-tIP цели (для финального root SSH)— (обязательно)
-uИмя пользователя Gitea— (обязательно)
-pПароль Gitea— (обязательно)
-dКоличество уровней .. для достижения / из каталога синхронизации5

Пример:

./nexus_privesc.sh -t 10.129.21.192 -u jones -p 'REDACTED' -d 5

Что делает скрипт

  1. Генерирует пару SSH-ключей ed25519 (/tmp/.exploit_key).
  2. Запрашивает токен Gitea API через basic auth.
  3. Создаёт репозиторий и помечает его как шаблон.
  4. Подделывает необработанные Git-объекты, кодирующие дерево обхода .., которое сопоставляется с /root/.ssh/authorized_keys, с публичным ключом атакующего в качестве содержимого.
  5. Отправляет отравленный репозиторий.
  6. Ожидает срабатывания принадлежащего root таймера синхронизации (~60 с).
  7. Входит как root с внедрённым ключом.

Отслеживайте синхронизацию на цели с помощью:

tail -f /var/log/template-sync.log

Успешный запуск записывает строку вида:

synced: ../../../../../root/.ssh/authorized_keys

Настройка DEPTH

DEPTH — это количество уровней .., необходимых для подъёма из каталога синхронизации/подготовки до корня файловой системы (/). Если синхронизация в логе проходит успешно, но root SSH не удаётся, обход попал на неверный уровень — повторите с -d 4 или -d 6. Точное значение можно подтвердить, прочитав путь подготовки в /etc/gitea/template-sync.py.


Устранение

  • Никогда не строите пути файловой системы из недоверенных имён с помощью одного лишь os.path.join(). Нормализуйте и ограничивайте пути, например:

    base = os.path.realpath(base_dir)
    dest = os.path.realpath(os.path.join(base, name))
    if not dest.startswith(base + os.sep):
        raise ValueError("path traversal blocked")
    
  • Отклоняйте имена записей дерева, содержащие .., абсолютные пути или разделители путей.

  • Запускайте сервис синхронизации под выделенной низкопривилегированной учётной записью, а не root.

  • Включите receive.fsckObjects = true в Gitea, чтобы отклонять некорректные отправленные объекты.


Ссылки

  • CWE-22 — Improper Limitation of a Pathname to a Restricted Directory (Path Traversal)
  • CVE-2026-38526 — Krayin CRM unrestricted file upload (foothold stage)
  • Git internals — objects (blob / tree / commit): https://git-scm.com/book/en/v2/Git-Internals-Git-Objects
  • MITRE ATT&CK — T1068 Exploitation for Privilege Escalation

Автор

<your name / handle> — для образовательного использования на HackTheBox.

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