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

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

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-объекты. Только для образовательных целей.

Репозиторий
6 ч 47 мин назадЕщё не проверено

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

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

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


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

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

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


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

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

root@kitploit:~
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 (по умолчанию на машине).

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

root@kitploit:~
chmod +x nexus_privesc.sh
./nexus_privesc.sh -t <TARGET_IP> -u <GITEA_USER> -p <GITEA_PASS> [-d DEPTH]

Пример:

root@kitploit:~
./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 с внедрённым ключом.

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

root@kitploit:~
tail -f /var/log/template-sync.log

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

root@kitploit:~
synced: ../../../../../root/.ssh/authorized_keys

Настройка DEPTH

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


Устранение

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

    root@kitploit:~
    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.

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