
pfSense Plus MIM API toolkit b4acd7ca - Alta - Remoto - Privilegio residuo - GET export-key chiavi private
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · pfsense-api-export-key-get
Classe: Privilegio residuo Portata: Remota
pfSense Plus MIM API (Netgate) pin b4acd7ca - OpenAPI pubblico + client Python generato per il controller Nexus Multi-instance Management.
GET /system/certauth/{refid}/export-key è documentato come "Download the CA certificate signing key". GET /system/certificates/{refid}/export-key è "Download the certificate's private key". GET /system/certificates/{refid}/export-p12 è un file PKCS12 unificato senza protezione tramite password. La documentazione mappa GET sotto /system a mim_system_read / mim_read_system. mim_view è documentato come privo di informazioni riservate. La specifica non ha securitySchemes né sicurezza per operazione. Il _get_kwargs generato è il metodo più un URL tra virgolette. L'autorizzazione non viene mai aggiunta lì.
Questo non è php, non è shell e non è firmware POST. Un JWT rubato dal campione G9 TLS skip o un token fleet G6 è sufficiente per chiamare questi GET. Se un MIM JWT a forma di lettura sia sufficiente su Plus è il residuo. Non ho eseguito Plus. Il RBAC di Plus non è stato eseguito.
| ID | nessuna CVE al momento |
| Classe | Privilegio residuo |
| Portata | Remota (HTTP autenticato verso il controller Nexus; il lab è il contratto pubblico del client) |
| 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 se un MIM JWT a forma di lettura può chiamare questi GET |
| Prodotto | Netgate/pfsense-api (controller OpenAPI pfSense Plus Nexus MIM + client generato) |
| Affetto | pin b4acd7ca21dbca739a530403a1f62a7440f7726f (2026-05-25). OpenAPI 3.0.3 titolo pfSense API versione 1.0. Plus 25.11+. Non il pacchetto REST CE. |
| Auth | Nexus JWT documentato (POST /login, Bearer). Il lab è l'OpenAPI pubblico più il contratto _get_kwargs generato. Il RBAC di Plus non è stato eseguito. |
| Licenza | GNU Affero GPL v3.0 |
| Lab | solo 127.0.0.1:19141. Nessuna immagine Plus. |
Ho fissato github.com/Netgate/pfsense-api b4acd7ca21dbca739a530403a1f62a7440f7726f. Non master dopo quel giorno. Non il pacchetto CE di terze parti jaredhendrickson/pfsense-api.
Hub della serie: pfsense-api-nexus-mim. Questo pacchetto è la Parte 4.
La documentazione mappa GET sotto /system a mim_system_read / mim_read_system. mim_view è documentato come privo di informazioni riservate. Il residuo è l'esportazione della chiave privata su GET, con PKCS12 documentato come non protetto, e _get_kwargs generato che non aggiunge mai Authorization.
| Metodo | Percorso | Privilegio |
|---|---|---|
GET DownloadCAKey | /system/certauth/{refid}/export-key | Recon (lab-proven su mock): corpo application/octet-stream contenente il PEM witness. Inferito su Plus: chiave di firma del certificato CA se RBAC consente la GET. |
GET GetCertKey | /system/certificates/{refid}/export-key | Recon (lab-proven su mock): PEM witness. Inferito su Plus: chiave privata leaf. |
GET GetCertP12 | /system/certificates/{refid}/export-p12 | Recon (lab-proven su mock): stesso corpo witness. Inferito su Plus: certificato più chiave come PKCS12 senza protezione con password (riepilogo OpenAPI). |
_get_kwargs generato | tutte e tre le operazioni | Recon (lab-proven): i kwargs sono solo method più url tra virgolette. Nessun headers, nessun Authorization, nessun Bearer. |
Client (senza token) | tutte e tre le operazioni | Recon (lab-proven): tre hit sul mock con has_authorization=false e corpo witness (client-no-auth=yes, witness-body=yes). |
AuthenticatedClient | tutte e tre le operazioni | Recon (lab-proven): tre hit sul mock con Authorization: Bearer mock-token (authed-bearer=3). Bearer è una proprietà del wrapper, non _get_kwargs. |
| JWT rubato dal MITM G9, o token fleet G6 | le stesse tre GET, più /api/device/pfsense/{device_id}/api se il residuo fleet lo mantiene | Recon (inferito, concatenato): estrarre le chiavi CA / leaf per il controller e ogni istanza registrata che il token può nominare. |
| Usare le chiavi CA / leaf rubate | certificati TLS, VPN, IPsec, WebGUI | Integrità (inferito, non testato in lab): coniare certificati discendenti come la CA; impersonare il nome TLS del Nexus; decifrare tunnel che usano quei certificati. Non root Unix di per sé. |
| GET correlati di lista/dettaglio | /system/certauth?withprivkey=true, campi prv / private_key del certificato | Recon (spec, non questo lab): dump massivo degli stessi segreti. Non esercitato qui. |
Disponibilità: nessuna richiesta.
Lab-proven vs inferito: i tre percorsi GET OpenAPI, la frase PKCS12 "senza protezione con password", _get_kwargs senza Authorization, i tre hit no-auth di Client con PEM witness, i tre hit Bearer di AuthenticatedClient, e il pin clone di pfapi_openapi.yml sono lab-proven. Inoltre i 200 di mim_system_read / mim_view, la coniazione di certificati discendenti, e l'estrazione delle chiavi a livello fleet sono inferiti. Inoltre RBAC non è stato eseguito.
Richiede (inferito, Plus non eseguito): login Nexus più un gruppo autorizzato alla GET sotto /system/certauth e /system/certificates. Non admins / mim_superuser se il residuo è reale. Non Diagnostics: Command. Percorso di rete verso il controller :8443 (o il proxy del dispositivo) con un JWT.
| Superficie | Perché |
|---|---|
| RBAC Plus | Non eseguito. Questo pack non rivendica un 200 live su Plus per mim_system_read o mim_view. |
POST /diag/cmd/php, POST /diag/cmd/shell, GET/POST /diag/cmd/download /upload /diag/editfile | Intesi come Diagnostics: Command. Di forma superuser. Non questo residuo. |
POST /system/firmware | Inteso come modifica di sistema / superuser. |
GET .../export-ca e GET .../export-cert | PEM del certificato pubblico. Inteso. |
POST .../export-key e POST .../export-p12 con una password come superuser | Wrapper inteso. La GUI system_certmanager.php esporta già le chiavi in quel modo. |
| Internet-to-8443 non autenticato | Il login emette comunque un JWT. La mancanza di securitySchemes nell'OpenAPI è un errore del generatore, non un server unauth provato. |
| Pacchetto CE jaredhendrickson/pfsense-api / pfrest.org | Prodotto diverso. |
Default verify_ssl della libreria generata | True. Gli esempi ufficiali impostano False. Quello è G9, non questa GET. |