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

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

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

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

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

Категории

Все категории
Loading categories
pfsense-api-enroll-json-ssh — pfSense Plus MIM API toolkit b4acd7ca — High — Удалённо — Остаточные привилегии — example-add-devices.py JSON в SSH | Kitploit
Инструменты/GitHubGitHub/abraxas/pfsense-api-enroll-json-ssh
Анализ уязвимостейАнализ КодаЭксплуатацияСетевая безопасностьТестирование на ПроникновениеКомандование и УправлениеСтатьи и ИсследованияRed TeamingЛаборатории и Практика
GitHubabraxas/pfsense-api-enroll-json-ssh

pfsense-api-enroll-json-ssh

pfSense Plus MIM API toolkit b4acd7ca — High — Удалённо — Остаточные привилегии — example-add-devices.py JSON в SSH

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

Популярное

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

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

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

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

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

Abraxas Labs - pfsense-api-enroll-json-ssh

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  pfsense-api-enroll-json-ssh

pfsense-api-enroll-json-ssh

Класс: Оставшиеся привилегии Достижимость: Удалённая

Набор инструментов pfSense Plus MIM API (b4acd7ca) - Netgate

example-add-devices.py — это документированный способ регистрации контроллера Nexus на каждом устройстве pfSense Plus по SSH. Он выполняет json.dumps для GET /mim/controller/identity, заменяет только ", затем дважды применяет .format к этому блобу, вставляя его в POSIX-скрипт с curl -d в двойных кавычках. Paramiko exec_command запускает скрипт от имени SSHUSER (в примере по умолчанию admin) на каждом адресе из pfsense_addresses.

json.dumps вместе с replace('"', '\\"') сохраняет кавычки закрытыми. $(), обратные кавычки и ${...} не являются метасимволами JSON. Они остаются активными внутри всё ещё открытой строки -d в двойных кавычках. OpenSSH exec — это оболочка. Вот в чём суть оставшейся уязвимости.

Это не сторонний REST-пакет CE. Это официальный клиент OpenAPI и примеры для контроллера pfSense Plus Nexus Multi-instance Management. Я не создавал Plus. Лаборатория — это зафиксированная интерполяция плюс макет /var/run/pfnet-controller.sock.

IDпока нет CVE
КлассОставшиеся привилегии (JSON контроллера в SSH-регистрацию)
ДостижимостьУдалённая (на пути к CONTROLLER_URL, пока пример устанавливает verify_ssl=False, или записывающий в строковые поля ControllerSummary)
CWECWE-78
CVSSВысокий: 8.1 CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H
ПродуктNetgate/pfsense-api (набор инструментов Plus MIM)
Затронутопубличная ветка main b4acd7ca21dbca739a530403a1f62a7440f7726f example-add-devices.py
Аутентификацияоператор запускает документированный пример. Атакующий находится на пути или может записывать строки summary. Вход в контроллер всё равно происходит первым.
ЛицензияGNU Affero GPL v3.0
Лабораториятолько 127.0.0.1:19101. Без образа Plus.

Часть 1 из серии об оставшихся уязвимостях Nexus MIM. Смежные материалы: enroll-autoadd, unix-sock-noauth, example-ssl-verify (G9 — это то, как узел на пути формирует этот JSON), fleet-jwt, export-key-get.

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

Оставшаяся уязвимость — это подстановка команд внутри всё ещё открытой строки -d в двойных кавычках. json.dumps вместе с проходом по кавычкам сохраняют строку закрытой. $(), обратные кавычки и ${...} выживают и выполняются от имени SSHUSER, когда OpenSSH выполняет exec для скрипта.

Целостность

МетодSinkПривилегияДоказано в лаборатории или выведено
Поместить $() (или обратные кавычки / ${...}) в строковое поле ControllerSummary, затем дать оператору запустить example-add-devices.pycontroller_info.replace('"', '\\"') затем device_script.format(...) затем sshclient.exec_command(device_script) (example-add-devices.py ~104-161)Shell от имени SSHUSER (в примере по умолчанию admin; SSH-доступ администратора pfSense обычно эквивалентен root) на каждом адресе в pfsense_addressesДоказано в лаборатории на интерполяции: INJECT vpn_listenaddr=$(printf %s PFSENSE-API-ENROLL-JSON-SSH-WITNESS >/oracle/witness) пережил экранирование только кавычек (dollar-paren-survived=yes) и записал свидетельство (inject-oracle=yes). Сам Paramiko/SSH в этот compose не входит.
TLS MITM для GET /api/mim/controller/identity, пока пример использует verify_ssl=FalseТот же разбор ControllerSummary, затем тот же скриптТот же shell. Все поля ControllerSummary имеют тип str или Unset, поэтому достаточно MITM JSON-тела, которое проходит разбор типов.Выведено из примера (example-add-devices.py login Client и AuthenticatedClient оба устанавливают verify_ssl=False). Лаборатория отправляет объект summary напрямую. Родственный: example-ssl-verify.
Записать символы подстановки в name или vpn_listenaddr на контроллере, дождаться следующей регистрацииТот же sinkТот же shell, когда оператор в следующий раз запустит примерВыведено. Требуется предварительная запись этих полей (уже controller-admin, или родственный unix-sock-noauth).
Тот же shell, дополнительные ключи через ControllerSummary.additional_propertiesТот же дамп включает дополнительные MITM-ключи (to_dict копирует остатки после from_dict)Дополнительные поля попадают в -d и в shellВыведено из to_dict. Лаборатория внедряет только через vpn_listenaddr.

Разведка

МетодSinkПривилегияДоказано в лаборатории или выведено
Прочитать stdout рабочей станции регистрацииprint("CONTROLLER_SUMMARY:", controller_info)Идентичность контроллера key, Netgard vpn_pubkey / vpn_netkey / адреса прослушиванияВыведено из print в примере. Лаборатория не печатает blob живого контроллера.
Перехватить или MITM SSH exec-каналПолезная нагрузка exec_command(device_script) — это curl -d JSONТа же идентичность контроллера в трафике к каждому устройствуВыведено. AutoAddPolicy на этом канале — родственный отчёт.
Случай CONTROL на гаджетеPOST /case name=controlЧестный vpn_listenaddr доходит до unix-сокета без измененийДоказано в лаборатории. 192.0.2.10:51820 отправлен как есть, без oracle (control-clean=yes).

Доступность

МетодSinkПривилегияДоказано в лаборатории или выведено
Внедрённая команда от имени SSHUSERТот же exec_commandОстановить pfnet-controller, стереть регистрацию, перезагрузить или иным образом вывести устройство из MIMВыведено как побочный эффект shell. Лаборатория только записывает файл-свидетельство.

Требуется: официальный путь примера (регистрация оператором). UI:N для on-path пира, как только этот пример запущен. Вход в контроллер всё равно происходит первым.

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