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

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

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

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

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

Категории

Все категории
Loading categories
pfsense-api-fleet-jwt — pfSense Plus MIM API toolkit b4acd7ca — High — Remote — IDOR — один JWT контроллера является токеном всего парка устройств | Kitploit
Инструменты/GitHubGitHub/abraxas/pfsense-api-fleet-jwt
Аутентификация и авторизацияАнализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийСбор информацииТестирование на ПроникновениеБезопасность APIЛаборатории и Практика
GitHubabraxas/pfsense-api-fleet-jwt

pfsense-api-fleet-jwt

pfSense Plus MIM API toolkit b4acd7ca — High — Remote — IDOR — один JWT контроллера является токеном всего парка устройств

1 день назадЕщё не проверено

Популярное

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

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

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

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

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

Abraxas Labs - pfsense-api-fleet-jwt

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

pfsense-api-fleet-jwt

Класс: IDOR Достижимость: Удалённая

pfSense Plus MIM API (Netgate) пин b4acd7ca - github.com/Netgate/pfsense-api

Один Bearer-токен из POST /login переиспользуется для каждого зарегистрированного device_id. Официальные примеры копируют этот токен в /api/device/pfsense/{device_id}/api для каждого id из GET /mim/devices. Поля LoginResponse — это только token, user, version и alerts. Роли LDAP MIM являются глобальными. Они не привязаны к устройству. Логин контроллера, который может перечислять устройства, обращается к firewall B с токеном, выданным для пользователя, предназначенного для firewall A.

Это одна клиентская тенантность, а не SaaS-пережиток кросс-тенантности. Неаутентифицированные вызовы остаются 401. Plus RBAC не выполнялся. Хаб серии: pfsense-api-nexus-mim (это пережиток 6). Украденный JWT из пережитка 9 (образцы verify_ssl=False) — это и есть fleet-токен.

IDCVE пока нет
КлассIDOR
ДостижимостьУдалённая (аутентифицированный JWT контроллера)
CWECWE-639
CVSSHigh: 8.1 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N
ПродуктNetgate/pfsense-api (pfSense Plus Nexus Multi-instance Management controller OpenAPI + сгенерированный клиент)
Затронутопин b4acd7ca21dbca739a530403a1f62a7440f7726f (2026-05-25). Тегов нет. Сервер только для Plus (платный). Не пакет CE REST.
АутентификацияJWT контроллера из POST /login. Угадывание device_id не требуется, если разрешён GET /mim/devices.
ЛицензияGNU Affero GPL v3.0
Лабораториятолько 127.0.0.1:19161. Python-мок опубликованного контракта клиента. Без образа Plus.

Я зафиксировал github.com/Netgate/pfsense-api main b4acd7ca21dbca739a530403a1f62a7440f7726f (2026-05-25, Add Snort-3 API definitions). Это не jaredhendrickson/pfsense-api / pfrest.org.

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

Логин контроллера, который может перечислять устройства, обращается к каждому зарегистрированному экземпляру с одним и тем же JWT. CSRF здесь ни при чём (Bearer API). PHP / shell / export-key на каждом узле — это предполагаемые права администратора как только прокси принимает fleet-токен. Пережиток — это отсутствующая привязка к устройству, а не Diagnostics: Command.

ПривилегияМетод / путьДоказано в лаборатории или выведено
Перечислить все зарегистрированные device_id (имя, адрес, состояние)GET /mim/devices с login BearerРазведка (доказано в лаборатории). Мок вернул и site-a, и site-b. Без аутентификации — 401.
Прочитать состояние системы firewall A и firewall B одним токеномGET /api/device/pfsense/{device_id}/api/systemРазведка (доказано в лаборатории). device-a=200, device-b=200. Свидетельство только на B.
Отправить POST на PHP-обёртку диагностики для обоих idPOST /api/device/pfsense/{device_id}/api/diag/cmd/phpЦелостность (лаборатория только на моке). Оба 200. Плюс RBAC не выполнялся, поэтому живой ролевой шлюз не доказан.
Запустить PHP / shell / редактирование файлов на каждом зарегистрированном узле, если логин включает console или systemPOST /diag/cmd/php, POST /diag/cmd/shell, GET/POST /diag/editfile, download/uploadЦелостность (выведено из OAS + примеров). Предполагаемая административная возможность, как только прокси принимает fleet-токен. Типичный pfSense PHP-FPM работает от root.
Экспортировать CA / приватные ключи leaf и PKCS12 на каждом перечисленном экземпляреGET /system/certificates/{refid}/export-key, GET /system/certauth/{refid}/export-key, GET /system/certificates/{refid}/export-p12Разведка (выведено). Тот же JWT, та же схема, что и в leftover 4. Плюс RBAC не выполнялся.
Выгрузить аккаунт ACME и выпущенные ключи на каждом перечисленном экземпляреGET /services/acme и связанные GET аккаунта/сертификатовРазведка (выведено). Тот же JWT, схема из leftover 5.
Изменить алиасы, firewall, интерфейсы, VPN, сервисы на каждом перечисленном экземпляретот же префикс для каждого устройства, остальные 700+ операцийЦелостность (выведено). Тот же JWT, та же схема, что и у локального экземпляра.
Перезагрузить / остановить / восстановить конфигурацию на каждом перечисленном экземпляреPOST /diag/control, POST /diag/backup/restoreДоступность + целостность (выведено). Тот же прокси. Не проверялось.
Межклиентский SaaS IDORн/дЗакрыто. Один клиентский тенант. Netgate запускает контроллер в этом тенанте.
Неаутентифицированный доступ из Интернета к :8443GET /mim/devices без BearerЗакрыто в этой лаборатории. 401. Неверный Bearer тоже 401.
Офлайн-устройстваобразцы пропускают state != onlineЗакрыто образцами. Это не граница аутентификации.
Слепой перебор числовых device_idGET /api/device/pfsense/1/api/systemЗакрыто как требование угадывания. Id — длинные строки (в форме ED25519). Листинг устраняет необходимость угадывать.

Требуется: логин контроллера, которому разрешён доступ к прокси устройства. Сетевой путь к контроллеру MIM (:8443 в продукте, loopback :19161 в этой лаборатории). Не без аутентификации. Не CSRF.

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

ПоверхностьПочему
Неаутентифицированный листинг / php / shellМок 401 без Bearer и с неверным Bearer. Молчание спецификации о securitySchemes — это не серверный 200.
Межтенантный SaaSОдин клиентский тенант. Кластеры тенантов всё ещё планировались на маркетинговой странице.
mim_user / без группы NexusЗадокументировано как закрытое, если шлюз логина держится.
Функциональные имена ролей mim_*Они существуют (view, logs, usermgmt, services, firewall, interfaces, devices, system, superuser). Они глобальные, а не для каждого device_id. Живые проверки Plus не выполнялись (plus-rbac=not-executed).
Интерполяция JSON при регистрации по SSHLeftover 1. Другой пакет.
AutoAddPolicy при регистрацииLeftover 2. Другой пакет.
Unix-сокет устройства без JWTLeftover 3. Локальный, другой пакет.
REST-пакет CEjaredhendrickson/pfsense-api — это другой сервер.
CE WebGUI QinQ / мастер OpenVPN / CARP / limiter / баннер IPsecУже отправлено как CE leftovers. Имена полей в этом OAS — те же стоки, а не новые CVE.
Предполагаемая fleet-консоль admins / mim_superuserМодель продукта для владельца контроллера. Leftover — это отсутствующий ACL объектов для всех остальных.

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

Я зафиксировал b4acd7ca и прочитал официальные примеры против OpenAPI. Каждый образец, который обращается к управляемым firewall, делает это:

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