Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

FeedContattoPrivacy© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
pfsense-api-fleet-jwt — pfSense Plus MIM API toolkit b4acd7ca - Alto - Remoto - IDOR - un JWT del controller è un token di flotta | Kitploit
Strumenti/GitHubGitHub/abraxas/pfsense-api-fleet-jwt
Autenticazione e AutorizzazioneAnalisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebRaccolta InformazioniPenetration TestingSicurezza delle APILab e Pratica
GitHubabraxas/pfsense-api-fleet-jwt

pfsense-api-fleet-jwt

pfSense Plus MIM API toolkit b4acd7ca - Alto - Remoto - IDOR - un JWT del controller è un token di flotta

1 giorno faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi
Vedi Repository

Abraxas Labs - pfsense-api-fleet-jwt

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

pfsense-api-fleet-jwt

Class: IDOR Reach: Remote

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

Un Bearer ottenuto da POST /login viene riutilizzato per ogni device_id registrato. Gli esempi ufficiali copiano quel token su /api/device/pfsense/{device_id}/api per ogni id restituito da GET /mim/devices. I campi di LoginResponse sono solo token, user, version e alerts. I ruoli LDAP MIM sono globali. Non sono vincolati a un dispositivo. Un login controller che può elencare i dispositivi comunica con il firewall B usando un token emesso per un utente destinato al firewall A.

Si tratta di un singolo tenant cliente, non di un residuo cross-tenant SaaS. Le chiamate non autenticate restano 401. Inoltre il RBAC non è stato eseguito. Hub della serie: pfsense-api-nexus-mim (questo è il residuo 6). Il JWT rubato dal residuo 9 (campioni verify_ssl=False) è questo token di flotta.

IDnessuna CVE al momento
ClassIDOR
ReachRemote (JWT controller autenticato)
CWECWE-639
CVSSHigh: 8.1 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N
ProductNetgate/pfsense-api (pfSense Plus Nexus Multi-instance Management controller OpenAPI + client generato)
Affectedpin b4acd7ca21dbca739a530403a1f62a7440f7726f (2026-05-25). Nessun tag. Il server è solo Plus (a pagamento). Non è il pacchetto REST CE.
AuthJWT controller da POST /login. Indovinare device_id non è necessario se GET /mim/devices è consentito.
LicenseGNU Affero GPL v3.0
Labsolo 127.0.0.1:19161. Mock Python del contratto client pubblicato. Nessuna immagine Plus.

Ho fissato github.com/Netgate/pfsense-api main b4acd7ca21dbca739a530403a1f62a7440f7726f (2026-05-25, Add Snort-3 API definitions). Non è jaredhendrickson/pfsense-api / pfrest.org.

Cosa può fare un attaccante

Un login controller che può elencare i dispositivi comunica con ogni istanza registrata usando lo stesso JWT. Il CSRF non è in gioco (API Bearer). PHP / shell / export-key su ogni box è il potere admin previsto una volta che il proxy accetta il token di flotta. Il residuo è il binding per-dispositivo mancante, non Diagnostics: Command.

PrivilegioMetodo / percorsoProvato in laboratorio o dedotto
Elenca ogni device_id registrato (nome, indirizzo, stato)GET /mim/devices con il Bearer di loginRicognizione (provata in laboratorio). Il mock ha restituito sia site-a che site-b. Senza autenticazione è 401.
Leggi lo stato di sistema di firewall A e firewall B con un solo tokenGET /api/device/pfsense/{device_id}/api/systemRicognizione (provata in laboratorio). device-a=200, device-b=200. Witness solo su B.
Esegui il POST del wrapper PHP di diagnostica su entrambi gli idPOST /api/device/pfsense/{device_id}/api/diag/cmd/phpIntegrità (solo lab su mock). Entrambi 200. Inoltre RBAC non è stato eseguito, quindi un gate di ruolo live non è provato.
Esegui PHP / shell / modifica file su ogni box registrato se il login include console o systemPOST /diag/cmd/php, POST /diag/cmd/shell, GET/POST /diag/editfile, download/uploadIntegrità (dedotta da OAS + esempi). Potere admin previsto una volta che il proxy accetta il token della flotta. Il tipico pfSense PHP-FPM è root.
Esporta chiavi private CA / leaf e PKCS12 su ogni istanza elencataGET /system/certificates/{refid}/export-key, GET /system/certauth/{refid}/export-key, GET /system/certificates/{refid}/export-p12Ricognizione (dedotta). Stesso JWT, stesso schema del leftover 4. Inoltre RBAC non eseguito.
Estrai account ACME e chiavi emesse su ogni istanza elencataGET /services/acme e relative GET di account/certificatiRicognizione (dedotta). Stesso JWT, schema del leftover 5.
Modifica alias, firewall, interfacce, VPN, servizi su ogni istanza elencatastesso prefisso per dispositivo, oltre 700 operazioni rimanentiIntegrità (dedotta). Stesso JWT, stesso schema dell'istanza locale.
Riavvia / arresta / ripristina configurazione su ogni istanza elencataPOST /diag/control, POST /diag/backup/restoreDisponibilità + integrità (dedotta). Stesso proxy. Non esercitato.
IDOR SaaS cross-customern/aChiuso. Un solo tenant cliente. Netgate esegue il controller in quel tenant.
Internet-to-:8443 non autenticatoGET /mim/devices senza BearerChiuso in questo laboratorio. 401. Anche un Bearer errato è 401.
Dispositivi offlinei campioni saltano state != onlineChiuso dai campioni. Non è un confine di autenticazione.
Scansione numerica cieca di device_idGET /api/device/pfsense/1/api/systemChiuso come requisito di indovinare. Gli id sono stringhe lunghe (a forma di ED25519). L'elenco elimina la necessità di indovinare.

Richiede: un login al controller autorizzato ad accedere al proxy del dispositivo. Percorso di rete verso il controller MIM (:8443 in prodotto, loopback :19161 in questo laboratorio). Non non autenticato. Non CSRF.

Superficie adiacente che resta chiusa

SuperficiePerché
Elenco / php / shell non autenticatiMock 401 senza Bearer e con un Bearer errato. Il silenzio della specifica su securitySchemes non è un 200 del server.
SaaS cross-tenantUn solo tenant cliente. I cluster di tenancy erano comunque pianificati nella pagina di marketing.
mim_user / nessun gruppo NexusDocumentato come chiuso se il gate di login regge.
Nomi di ruolo mim_* funzionaliEsistono (view, logs, usermgmt, services, firewall, interfaces, devices, system, superuser). Sono globali, non per device_id. I controlli live di Plus non sono stati eseguiti (plus-rbac=not-executed).
Interpolazione JSON SSH di enrollmentLeftover 1. Pacchetto diverso.
AutoAddPolicy di enrollmentLeftover 2. Pacchetto diverso.
Socket unix del dispositivo senza JWTLeftover 3. Locale, pacchetto diverso.
Pacchetto REST CEjaredhendrickson/pfsense-api è un server diverso.
CE WebGUI QinQ / procedura guidata OpenVPN / CARP / limiter / banner IPsecGià segnalati come leftover CE. I nomi dei campi in questo OAS sono gli stessi sink, non nuove CVE.
Console flotta admins / mim_superuser previstaModello di prodotto per il proprietario del controller. Il leftover è l'ACL oggetto mancante per tutti gli altri.

Come l'ho trovato

Ho fissato b4acd7ca e letto gli esempi ufficiali rispetto all'OpenAPI. Ogni campione che comunica con firewall gestiti fa questo:

Scarica lo strumento