
pfSense Plus MIM API toolkit b4acd7ca - Alta - Remota - Privilegio residual - GET export-key claves privadas
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · pfsense-api-export-key-get
Clase: Privilegio residual Alcance: Remoto
pfSense Plus MIM API (Netgate) pin b4acd7ca - OpenAPI público + cliente Python generado para el controlador Nexus Multi-instance Management.
GET /system/certauth/{refid}/export-key está documentado como "Download the CA certificate signing key". GET /system/certificates/{refid}/export-key es "Download the certificate's private key". GET /system/certificates/{refid}/export-p12 es un archivo PKCS12 unificado sin protección por contraseña. La documentación asigna GET bajo /system a mim_system_read / mim_read_system. mim_view está documentado como sin información confidencial. La especificación no tiene securitySchemes ni seguridad por operación. El _get_kwargs generado es el método más una URL entre comillas. La autorización nunca se añade allí.
Esto no es php, no es shell, y no es firmware POST. Un JWT robado del ejemplo G9 TLS skip o un token de flota G6 es suficiente para llamar a estos GETs. Si un JWT MIM con forma de lectura es suficiente en Plus es lo residual. No ejecuté Plus. El RBAC de Plus no fue ejecutado.
| ID | sin CVE todavía |
| Clase | Privilegio residual |
| Alcance | Remoto (HTTP autenticado al controlador Nexus; el laboratorio es el contrato público del cliente) |
| CWE | CWE-200, CWE-862 |
| CVSS | Alto: 8.1 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N si un JWT MIM con forma de lectura puede llamar a estos GETs |
| Producto | Netgate/pfsense-api (controlador OpenAPI de pfSense Plus Nexus MIM + cliente generado) |
| Afectado | pin b4acd7ca21dbca739a530403a1f62a7440f7726f (2026-05-25). OpenAPI 3.0.3 título pfSense API versión 1.0. Plus 25.11+. No es el paquete REST de CE. |
| Autenticación | JWT de Nexus documentado (POST /login, Bearer). El laboratorio es el contrato público de OpenAPI más el _get_kwargs generado. El RBAC de Plus no fue ejecutado. |
| Licencia | GNU Affero GPL v3.0 |
| Laboratorio | solo 127.0.0.1:19141. Sin imagen de Plus. |
Fijé github.com/Netgate/pfsense-api b4acd7ca21dbca739a530403a1f62a7440f7726f. No master después de ese día. No el paquete CE de terceros jaredhendrickson/pfsense-api.
Centro de la serie: pfsense-api-nexus-mim. Este paquete es la Parte 4.
La documentación asigna GET bajo /system a mim_system_read / mim_read_system. mim_view está documentado como sin información confidencial. Lo residual es la exportación de clave privada en GET, con PKCS12 documentado como sin protección, y un _get_kwargs generado que nunca añade Authorization.
| Método | Ruta | Privilegio |
|---|---|---|
GET DownloadCAKey | /system/certauth/{refid}/export-key | Recon (probado en laboratorio sobre mock): cuerpo application/octet-stream que contiene el PEM testigo. Inferido en Plus: clave de firma del certificado de CA si RBAC permite el GET. |
GET GetCertKey | /system/certificates/{refid}/export-key | Recon (probado en laboratorio sobre mock): PEM testigo. Inferido en Plus: clave privada de hoja. |
GET GetCertP12 | /system/certificates/{refid}/export-p12 | Recon (probado en laboratorio sobre mock): mismo cuerpo testigo. Inferido en Plus: certificado más clave como PKCS12 sin protección por contraseña (resumen de OpenAPI). |
_get_kwargs generado | las tres operaciones | Recon (probado en laboratorio): los kwargs son method más url entrecomillado únicamente. Sin headers, sin Authorization, sin Bearer. |
Client (sin token) | las tres operaciones | Recon (probado en laboratorio): tres aciertos en mock con has_authorization=false y cuerpo testigo (client-no-auth=yes, witness-body=yes). |
AuthenticatedClient | las tres operaciones | Recon (probado en laboratorio): tres aciertos en mock con Authorization: Bearer mock-token (authed-bearer=3). Bearer es una propiedad del wrapper, no de _get_kwargs. |
| JWT robado del MITM de G9, o token de flota de G6 | los mismos tres GET, más /api/device/pfsense/{device_id}/api si el remanente de flota lo conserva | Recon (inferido, encadenado): extraer las claves de CA / hoja del controlador y de cada instancia inscrita que el token pueda nombrar. |
| Uso de las claves de CA / hoja robadas | certificados TLS, VPN, IPsec, WebGUI | Integridad (inferido, no probado en laboratorio): acuñar certificados descendientes como la CA; suplantar el nombre TLS de Nexus; descifrar túneles que usan esos certificados. No es root de Unix por sí mismo. |
| GET de listado/detalle relacionados | /system/certauth?withprivkey=true, campos prv / private_key del certificado | Recon (especificación, no este laboratorio): volcado masivo de los mismos secretos. No ejercitado aquí. |
Disponibilidad: no se requiere ninguna.
Probado en laboratorio vs inferido: las tres rutas GET de OpenAPI, la frase de PKCS12 "sin protección por contraseña", _get_kwargs sin Authorization, los tres aciertos sin autenticación de Client con PEM testigo, los tres aciertos con Bearer de AuthenticatedClient, y el clon fijado de pfapi_openapi.yml están probados en laboratorio. Los 200 de mim_system_read / mim_view en Plus, la acuñación de certificados descendientes y la extracción de claves en toda la flota son inferidos. Además, RBAC no se ejecutó.
Requiere (inferido, Plus no ejecutado): inicio de sesión en Nexus más un grupo autorizado a GET bajo /system/certauth y /system/certificates. No admins / mim_superuser si el remanente es real. No Diagnostics: Command. Ruta de red al controlador :8443 (o al proxy del dispositivo) con un JWT.