
Strumento di audit in sola lettura per CVE-2026-0300 (esposizione del portale di autenticazione User-ID di PAN-OS)
Strumenti di audit in sola lettura per CVE-2026-0300 — il buffer overflow non autenticato nel Portale di Autenticazione User-ID di PAN-OS (precedentemente noto come "Captive Portal") sui firewall delle serie PA e VM.
Questo repository accompagna l'advisory di sicurezza di Tailwind Resource Group TRG-SA-2026-003 e fornisce:
audit_portal.py — Livello 1: audit di un singolo firewallaudit_fleet.py — Livello 2: scansione della flotta guidata da Panorama (concorrente)panos_audit.py — libreria condivisa utilizzata da entrambe le CLIGli script sono in sola lettura. Eseguono query di tipo show contro l'API XML di PAN-OS e non modificano mai la configurazione. La chiave API viene inviata tramite l'header HTTP X-PAN-KEY anziché come parametro di query nell'URL, quindi non compare nei log di accesso del piano di gestione PAN, nei log dei proxy con ispezione TLS o negli argomenti di processo dell'auditor.
Il record CVE utilizza il nome moderno della funzionalità "Portale di Autenticazione User-ID". Lo schema XML di PAN-OS, le opzioni CLI e i percorsi URL della documentazione utilizzano ancora il vocabolario legacy captive-portal. Gli operatori che eseguono audit sulle flotte con show config running | match authentication-portal mancheranno silenziosamente ogni configurazione perché quella stringa non appare mai come elemento di configurazione. Questo strumento cerca il nome dell'elemento corretto per lo schema indipendentemente da quando la configurazione è stata creata.
L'analisi completa di Tailwind su questo problema di nomenclatura è in TRG-SA-2026-003, "Captive Portal's legacy footprint."
pip install richiesto--insecure è fornito solo per audit di avvio una tantumexport PAN_API_KEY="<key>"
./audit_portal.py --hostname fw1.example.com
Esempio di output tabellare:
vsys: vsys1
configured: True
enabled: True
redirect_host: auth-portal.internal.example.com
mode: redirect
bound: ethernet1/3(internal-trust), ethernet1/4(guest)
tls_verified: True
risk: EXPOSED_LIKELY
Altri formati di output: --output json o --output csv.
Altre opzioni: --vsys <name> per audit di un singolo vsys, --timeout/--retries per upstream lenti, --debug per dettagli di errore verbosi su stderr.
export PAN_API_KEY="<panorama-key>"
./audit_fleet.py --hostname panorama.example.com --workers 16 --output csv > fleet-audit.csv
Ogni riga nel CSV è un dispositivo-vsys con stato del portale, host di reindirizzamento, modalità, binding delle interfacce e una classificazione del rischio. Lo script utilizza il parametro API target=<serial> di Panorama, quindi non si connette mai direttamente ai firewall gestiti — una sola connessione a Panorama esegue la scansione dell'intera flotta.
Opzioni notevoli:
--workers N — thread di audit concorrenti (default 8, max 32). Una flotta di 1000 dispositivi viene completata in minuti anziché nell'ora o più che richiederebbe una scansione seriale.--timeout, --retries — impostazioni per singola chiamata API. Gli errori transitori URLError e HTTP 5xx vengono ritentati con backoff limitato.--exclude-disconnected — di default, i dispositivi disconnessi vengono inclusi con risk=DISCONNECTED così rimangono visibili durante la finestra di patch. Usa questa opzione per escluderli.--min-expected-devices N — avvisa (su stderr) se Panorama restituisce meno dispositivi di N. Utile per rilevare il troncamento della risposta rispetto a una dimensione nota della flotta.--serial-filter '0007*' — filtro glob per seriale per eseguire l'audit di un sottoinsieme.--debug — stampa dettagli di errore verbosi per dispositivo su stderr (include stringhe reason dell'upstream; disattivato di default per evitare di far trapelare hostname nei CSV destinati ai clienti).La colonna risk nell'output è una delle seguenti:
| Etichetta | Significato |
|---|---|
INFO_NOT_CONFIGURED | Nessun blocco <captive-portal> sul dispositivo. Fuori dall'ambito di CVE-2026-0300. |
INFO_DISABLED | Il portale è configurato ma enabled=no. Il percorso di codice vulnerabile non è attivo. |
REVIEW_POLICY_NO_BINDINGS | Portale abilitato, ma nessun binding di interfaccia trovato nella configurazione. Verificare tramite WebUI. |
EXPOSED_LIKELY | Portale abilitato e associato a una zona il cui nome suggerisce esposizione non attendibile (untrust, dmz, guest, external, internet, wan, public). Investigare per primo. |
REVIEW_POLICY | Portale abilitato e associato a zone con nomi interni. Esaminare la security policy per confermare la raggiungibilità. |
EXPOSED_LIKELY è un suggerimento, non un verdetto — i nomi delle zone sono convenzioni dell'operatore, non imposizioni. Lo script non può sostituire un'analisi della security policy; ordina l'output della flotta per indicare dove concentrare l'attenzione per prima.
Fanno:
<captive-portal> per vsys (il nome dell'elemento dello schema è sempre captive-portal, indipendentemente dalla denominazione dell'interfaccia utente o dalla versione PAN-OS).EXPOSED_LIKELY emergono per prime nell'output della flotta.X-PAN-KEY così rimane fuori dai log di accesso URL e dagli argomenti di processo.Non fanno:
La chiave API PAN-OS eredita il ruolo e le autorizzazioni dell'utente che la genera.
Avvertenza importante: non esiste una concessione XML API in sola lettura in PAN-OS.
Le autorizzazioni del Ruolo Amministratore sulla scheda XML API sono binarie Abilita/Disabilita per categoria — Configurazione, Richieste Operative, Commit, Export, Import, Report, Log, Agente User-ID. Abilitare Configurazione per XML API consente sia
showche azioniset/edit/delete/move/rename/clone. Abilitare Richieste Operative consente operazioni<request>arbitrarie inclusi<request><restart>. Le schede Web UI e REST API offrono l'opzione Sola Lettura; la scheda XML API no.Un "utente audit" creato abilitando queste categorie XML API detiene piena autorità di scrittura XML API sul dispositivo. Tratta la chiave risultante come una credenziale privilegiata: limita la sua durata alla finestra di audit, conservala in un gestore di segreti e disabilita l'utente quando il lavoro è completato.
Riferimento PAN canonico: Get Your API Key (PAN-OS XML API).