Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

FeedsContactoPrivacidad© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
pfsense-api-fleet-jwt — pfSense Plus MIM API toolkit b4acd7ca - Alta - Remota - IDOR - un JWT de controlador es un token de flota | Kitploit
Herramientas/GitHubGitHub/abraxas/pfsense-api-fleet-jwt
Autenticación y AutorizaciónAnálisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebRecopilación de InformaciónPruebas de PenetraciónSeguridad de APIsLabs y Práctica
GitHubabraxas/pfsense-api-fleet-jwt

pfsense-api-fleet-jwt

pfSense Plus MIM API toolkit b4acd7ca - Alta - Remota - IDOR - un JWT de controlador es un token de flota

hace 1 díaAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir
Ver Repositorio

Abraxas Labs - pfsense-api-fleet-jwt

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

pfsense-api-fleet-jwt

Clase: IDOR Alcance: Remoto

pfSense Plus MIM API (Netgate) pin b4acd7ca - github.com/Netgate/pfsense-api

Un Bearer de POST /login se reutiliza para cada device_id inscrito. Los ejemplos oficiales copian ese token en /api/device/pfsense/{device_id}/api para cada id de GET /mim/devices. Los campos de LoginResponse son solo token, user, version y alerts. Los roles LDAP MIM son globales. No están vinculados a un dispositivo. Un login de controlador que puede listar dispositivos habla con el firewall B con un token emitido para un usuario que estaba destinado al firewall A.

Esto es una única tenencia de cliente, no un remanente cross-tenant de SaaS. Las llamadas no autenticadas siguen siendo 401. Además, el RBAC no se ejecutó. Hub de la serie: pfsense-api-nexus-mim (este es el remanente 6). El JWT robado del remanente 9 (muestras con verify_ssl=False) es este token de flota.

IDsin CVE todavía
ClaseIDOR
AlcanceRemoto (JWT de controlador autenticado)
CWECWE-639
CVSSAlto: 8.1 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N
ProductoNetgate/pfsense-api (controlador OpenAPI de gestión multi-instancia pfSense Plus Nexus + cliente generado)
Afectadopin b4acd7ca21dbca739a530403a1f62a7440f7726f (2026-05-25). Sin tags. El servidor es solo Plus (de pago). No es el paquete REST de CE.
AuthJWT de controlador de POST /login. Adivinar device_id no es necesario si GET /mim/devices está permitido.
LicenciaGNU Affero GPL v3.0
Labsolo 127.0.0.1:19161. Mock en Python del contrato del cliente publicado. Sin imagen Plus.

Fijé github.com/Netgate/pfsense-api main b4acd7ca21dbca739a530403a1f62a7440f7726f (2026-05-25, Add Snort-3 API definitions). Este no es jaredhendrickson/pfsense-api / pfrest.org.

Qué puede hacer un atacante

Un login de controlador que puede listar dispositivos habla con cada instancia inscrita con el mismo JWT. CSRF no entra en juego (API con Bearer). PHP / shell / export-key en cada máquina es poder de administrador previsto una vez que el proxy acepta el token de flota. El remanente es la falta de vinculación por dispositivo, no Diagnostics: Command.

PrivilegioMétodo / rutaDemostrado en laboratorio o inferido
Listar cada device_id inscrito (nombre, dirección, estado)GET /mim/devices con el Bearer de inicio de sesiónRecon (demostrado en laboratorio). El mock devolvió tanto site-a como site-b. Sin autenticación es 401.
Leer el estado del sistema del firewall A y del firewall B con un solo tokenGET /api/device/pfsense/{device_id}/api/systemRecon (demostrado en laboratorio). device-a=200, device-b=200. Witness solo en B.
Enviar por POST el wrapper PHP de diagnóstico en ambos idsPOST /api/device/pfsense/{device_id}/api/diag/cmd/phpIntegridad (laboratorio solo en mock). Ambos 200. Además, RBAC no se ejecutó, por lo que una puerta de rol en vivo no está demostrada.
Ejecutar PHP / shell / edición de archivos en cada máquina inscrita si el inicio de sesión incluye consola o systemPOST /diag/cmd/php, POST /diag/cmd/shell, GET/POST /diag/editfile, download/uploadIntegridad (inferido de OAS + ejemplos). Poder de administrador previsto una vez que el proxy acepta el token de flota. El PHP-FPM típico de pfSense es root.
Exportar CA / claves privadas de hoja y PKCS12 en cada instancia listadaGET /system/certificates/{refid}/export-key, GET /system/certauth/{refid}/export-key, GET /system/certificates/{refid}/export-p12Recon (inferido). Mismo JWT, mismo esquema que el leftover 4. Además, RBAC no se ejecutó.
Volcar la cuenta ACME y las claves emitidas en cada instancia listadaGET /services/acme y los GET relacionados de cuenta/certificadoRecon (inferido). Mismo JWT, esquema del leftover 5.
Cambiar alias, firewall, interfaces, VPN, servicios en cada instancia listadamismo prefijo por dispositivo, las 700+ operaciones restantesIntegridad (inferido). Mismo JWT, mismo esquema que la instancia local.
Reiniciar / detener / restaurar configuración en cada instancia listadaPOST /diag/control, POST /diag/backup/restoreDisponibilidad + integridad (inferido). Mismo proxy. No ejercitado.
IDOR de SaaS entre clientesn/aCerrado. Una sola tenencia de cliente. Netgate ejecuta el controlador en esa tenencia.
Internet-a-:8443 sin autenticaciónGET /mim/devices sin BearerCerrado en este laboratorio. 401. Un Bearer incorrecto también es 401.
Dispositivos offlinelas muestras omiten state != onlineCerrado por las muestras. No es una frontera de autenticación.
Recorrido numérico ciego de device_idGET /api/device/pfsense/1/api/systemCerrado como requisito de adivinación. Los ids son cadenas largas (con forma de ED25519). El listado elimina la adivinación.

Requiere: un inicio de sesión en el controlador que esté permitido en el proxy del dispositivo. Ruta de red al controlador MIM (:8443 en el producto, loopback :19161 en este laboratorio). No sin autenticación. No CSRF.

Superficie adyacente que permanece cerrada

SuperficiePor qué
Listado / php / shell sin autenticaciónMock 401 sin Bearer y con un Bearer incorrecto. El silencio de la especificación sobre securitySchemes no es un 200 del servidor.
SaaS entre inquilinosUna sola tenencia de cliente. Los clústeres de tenencia seguían planificados en la página de marketing.
mim_user / sin grupo NexusDocumentado como cerrado si la puerta de inicio de sesión se mantiene.
Nombres de roles mim_* funcionalesExisten (view, logs, usermgmt, services, firewall, interfaces, devices, system, superuser). Son globales, no por device_id. Las comprobaciones en vivo de Plus no se ejecutaron (plus-rbac=not-executed).
Interpolación JSON de SSH en la inscripciónLeftover 1. Paquete diferente.
AutoAddPolicy en la inscripciónLeftover 2. Paquete diferente.
Socket unix del dispositivo sin JWTLeftover 3. Local, paquete diferente.
Paquete REST de CEjaredhendrickson/pfsense-api es un servidor diferente.
QinQ / asistente OpenVPN / CARP / limitador / banner IPsec de la WebGUI de CEYa enviados por correo como leftovers de CE. Los nombres de campo en este OAS son los mismos sumideros, no nuevas CVE.
Consola de flota admins / mim_superuser previstaModelo de producto para el propietario del controlador. El leftover es la ACL de objeto faltante para todos los demás.

Cómo lo encontré

Fijé b4acd7ca y leí los ejemplos oficiales contra el OpenAPI. Cada muestra que se comunica con firewalls gestionados hace esto:

Descargar herramienta