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

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

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

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

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

Категории

Все категории
Loading categories
pfsense-api-enroll-autoadd — pfSense Plus MIM API toolkit b4acd7ca — высокий — удалённый — остаточные привилегии — Paramiko AutoAddPolicy enroll | Kitploit
Инструменты/GitHubGitHub/abraxas/pfsense-api-enroll-autoadd
Анализ уязвимостейЭксплуатацияСетевая безопасностьКриптографияТестирование на ПроникновениеАутентификацияСтатьи и ИсследованияRed TeamingЛаборатории и Практика
GitHubabraxas/pfsense-api-enroll-autoadd

pfsense-api-enroll-autoadd

pfSense Plus MIM API toolkit b4acd7ca — высокий — удалённый — остаточные привилегии — Paramiko AutoAddPolicy enroll

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

Популярное

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

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

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

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

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

Abraxas Labs - pfsense-api-enroll-autoadd

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

pfsense-api-enroll-autoadd

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

pfSense Plus MIM API (Netgate/pfsense-api) b4acd7ca - Netgate

example-add-devices.py — это документированный способ регистрации контроллера Nexus на каждом устройстве pfSense. Он никогда не вызывает load_system_host_keys(). Он устанавливает paramiko.AutoAddPolicy(), затем connect, затем exec_command(device_script). В комментарии сказано убрать AutoAdd, когда устройства уже находятся в known_hosts. Поставляемое значение по умолчанию — AutoAdd.

SSH-соединение при первом контакте с новым устройством принимает любой ключ хоста, который ответит. Пароль или ключ аутентификации передаётся этому узлу. stdout пропускается через json.loads и отправляется через POST /mim/devices на реальный контроллер.

Это не сторонний REST-пакет CE. Это официальный OpenAPI плюс сгенерированный Python-клиент для pfSense Plus Nexus Multi-instance Management. Сервер поддерживается только в Plus. Лабораторная установка — это SSH-гаджет на Paramiko. Я не взаимодействовал с живым контроллером Plus.

IDCVE пока нет
КлассОстаточные привилегии (Paramiko AutoAddPolicy при SSH-регистрации)
ДостижимостьУдалённая (на пути к SSH-устройству при первом контакте)
CWECWE-322
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 Nexus MIM)
Затронутоmain b4acd7ca21dbca739a530403a1f62a7440f7726f example-add-devices.py
АутентификацияОператор запускает официальный пример; атакующий находится на пути к SSH-устройству
ЛицензияGNU Affero GPL v3.0
Лабораториятолько 127.0.0.1:19111. Без образа Plus.

AC:H — это первый контакт / нахождение на пути. Рабочая станция, у которой уже есть реальные ключи устройства в known_hosts и строка AutoAdd удалена, не является этим остатком.

Такие же остатки в закреплённой версии: JSON-интерполяция ControllerSummary в shell-скрипт регистрации (G1) и примеры принудительно устанавливают verify_ssl=False (G9). Центр серии: pfsense-api-nexus-mim.

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

Находиться на пути к адресу SSH первого контакта в pfsense_addresses, пока оператор запускает пример. AutoAdd всё ещё включён.

МетодSinkПривилегия
Расположиться на пути к адресу SSH первого контакта в pfsense_addressesset_missing_host_key_policy(paramiko.AutoAddPolicy()) затем connect (example-add-devices.py:151-160)Целостность (доказано в лаборатории): неизвестный ключ хоста принимается. Лаборатория: AutoAddPolicy подключился (autoadd=yes). RejectPolicy не сработал (reject-control=yes).
Та же сессия, ответ exec_command(device_script)stdout парсится как DeviceIdentity (example-add-devices.py:161-187)Целостность (доказано в лаборатории): exec вернул identity JSON, содержащий PFSENSE-API-ENROLL-AUTOADD-WITNESS (identity-json=yes).
Тот же MITM, чтение полезной нагрузки execdevice_script — это оставшийся от G1 curl -d для ControllerSummaryРазведка (выведено из исходного кода): ключ идентичности контроллера, Netgard vpn_pubkey / vpn_netkey / адреса прослушивания. В этой лаборатории не выгружалось.
Тот же MITM, аутентификация по паролю или ключуSSHUSER / SSHPASS или agent/keys (example-add-devices.py:156-160)Разведка (выведено): учётные данные или ключи, предъявленные поддельном хосту. В лаборатории использовалась только аутентификация по паролю как путь примера SSHPASS.
Тот же stdout JSON, add_controlled_device.syncPOST /mim/devices на реальном контроллереЦелостность (выведено): регистрирует ключи Noise/VPN атакующего и address. Плюс рукопожатие в этой лаборатории не выполнялось.
MITM является SSH-серверомлюбой exec, отправленный клиентом, как SSHUSERЦелостность / доступность (выведено): выполнить, отбросить или пропустить скрипт регистрации. Вызовы Unix-сокета на реальном устройстве происходят только если MITM их перенаправляет.

Доказано в лаборатории vs выведено: подключение AutoAdd, сбой RejectPolicy и identity JSON со свидетелем — это лаборатория. Дамп ключа контроллера, кража учётных данных, POST /mim/devices поддельного устройства и выполнение реальных curl-запросов к unix-сокету выведены из того же пути примера.

Требуется: оператор запускает официальный пример против SSH-адреса, ключ хоста которого ещё не закреплён, при включённом AutoAdd. Сетевой путь к этому SSH. AC:H — это первый контакт / на пути.

Смежная поверхность, которая остаётся закрытой

ПоверхностьПочему
RejectPolicy на том же неизвестном хостеЛаборатория: reject-control=yes. Paramiko отклоняет ключ.
Рабочая станция с реальными ключами устройства в known_hosts и удалённой строкой AutoAddРежим, подразумеваемый комментарием. Пример никогда не загружает эти ключи, если вы не добавите вызов.
Вход в HTTPS-контроллерverify_ssl=False — это оставшийся от соседнего примера фрагмент (G9), а не этот sink.
Unix-сокет MIM на реальном межсетевом экранеТолько если MITM перенаправляет exec. Эта лаборатория никогда не обращается к /var/run/pfnet-controller.sock.
Сгенерированный Client по умолчанию verify_ssl=TrueЗначение по умолчанию библиотеки — это не оставшийся фрагмент. Примеры принудительно устанавливают False.
Плюс RBAC / живой :8443Эта лаборатория — это гаджет Paramiko. Я не обращался к контроллеру Plus.
Неаутентифицированный доступ из Интернета к 8443Вход всё равно выдаёт JWT. Это не данная находка.
Диагностика PHP/shellПреднамеренная административная возможность для fleet JWT. Это не данная находка.

Как я это нашёл

Я закрепил github.com/Netgate/pfsense-api main b4acd7ca21dbca739a530403a1f62a7440f7726f после оставшихся фрагментов CE WebGUI. Это дерево — OpenAPI плюс сгенерированный Python для Plus Nexus MIM. Я прочитал цикл регистрации в example-add-devices.py. Политика ключа хоста — AutoAdd. Секреты находятся на том же канале exec. Пример никогда не вызывает load_system_host_keys().

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