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-enroll-autoadd — pfSense Plus MIM API toolkit b4acd7ca - Alta - Remota - Privilegio residual - Paramiko AutoAddPolicy enroll | Kitploit
Herramientas/GitHubGitHub/abraxas/pfsense-api-enroll-autoadd
Análisis de VulnerabilidadesExplotaciónSeguridad de RedesCriptografíaPruebas de PenetraciónAutenticaciónPapers e InvestigaciónRed TeamingLabs y Práctica
GitHubabraxas/pfsense-api-enroll-autoadd

pfsense-api-enroll-autoadd

pfSense Plus MIM API toolkit b4acd7ca - Alta - Remota - Privilegio residual - Paramiko AutoAddPolicy enroll

Ver Repositorio
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

Abraxas Labs - pfsense-api-enroll-autoadd

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

pfsense-api-enroll-autoadd

Clase: Privilegio residual Alcance: Remoto

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

example-add-devices.py es la forma documentada de registrar el controlador Nexus en cada dispositivo pfSense. Nunca llama a load_system_host_keys(). Establece paramiko.AutoAddPolicy(), luego connect y después exec_command(device_script). El comentario dice que se debe eliminar AutoAdd cuando los dispositivos ya están en known_hosts. La configuración predeterminada de envío es AutoAdd.

El primer contacto SSH con una máquina nueva acepta cualquier clave de host que responda. La autenticación por contraseña o clave se presenta a ese par. La salida estándar se pasa por json.loads y se envía mediante POST /mim/devices al controlador real.

Este no es el paquete REST CE de terceros. Este es el OpenAPI oficial más el cliente Python generado para pfSense Plus Nexus Multi-instance Management. El servidor es exclusivo de Plus. El laboratorio es un gadget SSH de Paramiko. No me comuniqué con un controlador Plus en vivo.

IDsin CVE todavía
ClasePrivilegio residual (Paramiko AutoAddPolicy en el SSH de enrolamiento)
AlcanceRemoto (en ruta hacia el SSH del dispositivo en el primer contacto)
CWECWE-322
CVSSAlto: 8.1 CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H
ProductoNetgate/pfsense-api (kit de herramientas del cliente Plus Nexus MIM)
Afectadomain b4acd7ca21dbca739a530403a1f62a7440f7726f example-add-devices.py
AutenticaciónEl operador ejecuta el ejemplo oficial; el atacante está en ruta hacia el SSH del dispositivo
LicenciaGNU Affero GPL v3.0
LaboratorioSolo 127.0.0.1:19111. Sin imagen Plus.

AC:H es primer contacto / en ruta. Una estación de trabajo que ya tiene las claves reales del dispositivo en known_hosts y tiene la línea AutoAdd eliminada no presenta este residuo.

Mismos residuos del pin: interpolación JSON de ControllerSummary en el shell de enrolamiento (G1) y los ejemplos fuerzan verify_ssl=False (G9). Centro de la serie: pfsense-api-nexus-mim.

Qué puede hacer un atacante

Situarse en ruta hacia una dirección SSH de primer contacto en pfsense_addresses mientras el operador ejecuta el ejemplo. AutoAdd sigue activado.

MétodoSinkPrivilegio
Situarse on-path ante una dirección SSH de primer contacto en pfsense_addressesset_missing_host_key_policy(paramiko.AutoAddPolicy()) y luego connect (example-add-devices.py:151-160)Integridad (probado en laboratorio): se acepta la clave de host desconocida. Laboratorio: AutoAddPolicy conectó (autoadd=yes). RejectPolicy falló (reject-control=yes).
Misma sesión, responder exec_command(device_script)stdout parseado como DeviceIdentity (example-add-devices.py:161-187)Integridad (probado en laboratorio): exec devolvió un JSON de identidad que contenía PFSENSE-API-ENROLL-AUTOADD-WITNESS (identity-json=yes).
Mismo MITM, leer el payload de execdevice_script es el -d de curl sobrante de G1 de ControllerSummaryRecon (inferido del código fuente): clave de identidad del controlador, vpn_pubkey / vpn_netkey / direcciones de escucha de Netgard. No volcado por este laboratorio.
Mismo MITM, autenticación por contraseña o claveSSHUSER / SSHPASS o agente/claves (example-add-devices.py:156-160)Recon (inferido): credenciales o claves presentadas al host falso. El laboratorio usó autenticación por contraseña solo como la ruta de ejemplo SSHPASS.
Mismo JSON de stdout, add_controlled_device.syncPOST /mim/devices en el controlador realIntegridad (inferido): registra claves Noise/VPN del atacante y address. Además, el handshake no se ejecutó en este laboratorio.
El MITM es el servidor SSHcualquier exec que el cliente envió, como SSHUSERIntegridad / disponibilidad (inferido): ejecutar, descartar u omitir el script de enrolamiento. Las llamadas al socket Unix en el dispositivo real ocurren solo si el MITM las reenvía.

Probado en laboratorio vs inferido: la conexión AutoAdd, el fallo de RejectPolicy y el JSON de identidad con el testigo son de laboratorio. El volcado de la clave del controlador, el robo de credenciales, el POST /mim/devices de un dispositivo falso y la ejecución de los curls reales al socket Unix se infieren de la misma ruta de ejemplo.

Requiere: que el operador ejecute el ejemplo oficial contra una dirección SSH cuya clave de host no esté ya fijada, con AutoAdd activado. Ruta de red hacia ese SSH. AC:H es primer contacto / on-path.

Superficie adyacente que permanece cerrada

SuperficiePor qué
RejectPolicy en el mismo host desconocidoLaboratorio: reject-control=yes. Paramiko rechaza la clave.
Estación de trabajo con claves de dispositivo reales en known_hosts y la línea AutoAdd eliminadaEl modo previsto por el comentario. El ejemplo nunca carga esas claves a menos que añadas la llamada.
Inicio de sesión HTTPS del controladorverify_ssl=False es un sobrante de un ejemplo hermano (G9), no este sink.
MIM por socket Unix en el firewall realSolo si el MITM reenvía exec. Este laboratorio nunca habla con /var/run/pfnet-controller.sock.
Client generado con verify_ssl=True por defectoEl valor por defecto de la biblioteca no es el sobrante. Los ejemplos fuerzan False.
Además RBAC / :8443 en vivoEste laboratorio es un gadget de Paramiko. No hablé con un controlador Plus.
Internet no autenticado hacia 8443El inicio de sesión sigue emitiendo un JWT. No es este hallazgo.
Diagnósticos PHP/shellPoder de administrador previsto para un JWT de flota. No es este hallazgo.

Cómo lo encontré

Fijé github.com/Netgate/pfsense-api main b4acd7ca21dbca739a530403a1f62a7440f7726f tras los sobrantes del WebGUI de CE. Este árbol es OpenAPI más Python generado para Plus Nexus MIM. Leí el bucle de enrolamiento en example-add-devices.py. La política de clave de host es AutoAdd. Los secretos están en el mismo canal exec. El ejemplo nunca llama a load_system_host_keys().

Descargar herramienta