
Rileva in modo sicuro se un target PAN-OS è vulnerabile a CVE-2026-0265.
Determina in modo sicuro se un portale GlobalProtect di Palo Alto Networks PAN-OS è vulnerabile a CVE-2026-0265 senza autenticare alcuna sessione o modificare alcuno stato.
CVE-2026-0265 è un bypass di autenticazione remota che colpisce PAN-OS e Panorama e si attiva quando un profilo di autenticazione utilizza il servizio di autenticazione cloud (CAS). La vulnerabile funzione pan_auth_verify in libpanmp_mp.so gestisce la verifica della firma del JSON Web Token basandosi esclusivamente sull'header alg controllato dall'attaccante — un JWT contraffatto con alg=HS256 e HMAC-SHA256(cas_public_key_pem, header.payload) come firma viene accettato come se fosse un vero token CAS firmato RS256, permettendo a qualsiasi attaccante di impersonare qualsiasi utente. Il bug è raggiungibile attraverso due superfici di attacco — il portale GlobalProtect (/saml/acs.esp, produce una sessione VPN) e l'interfaccia di gestione (/SAML20/SP/ACS, produce un amministratore PAN-OS completo). Questo strumento copre solo la superficie del portale GlobalProtect.
Una singola richiesta anonima GET /global-protect/prelogin.esp rivela tutto il necessario per un verdetto autorevole:
<cas-auth>yes|no</cas-auth> impostato direttamente dalla configurazione di autenticazione del portale. Un valore di yes conferma che la precondizione della CVE è soddisfatta per questo listener.<saml-request>. Decodificarlo produce la stringa di versione autorevole del firewall, che viene poi confrontata con la matrice di hotfix corretti per base dell'avviso del fornitore per produrre il verdetto..saas cortocircuito — Le build gestite dal cloud PA non sono affette secondo la precisazione di Palo Alto (21-05-2026), indipendentemente dal numero della build base sottostante.Lo script emette il verdetto, la versione PanOS riportata dal firewall (così un difensore può verificare la valutazione rispetto al proprio inventario), e il contesto di triage base (prelogin_status, prelogin_msg, http_status, note di errore). Se la tua pipeline necessita di metadati dell'appliance più ricchi, confronta l'URL target con il tuo inventario.
git clone https://github.com/BishopFox/CVE-2026-0265-check
cd CVE-2026-0265-check
pip install requests
Richiede Python 3.9+ e il pacchetto requests.
Passa uno o più target come argomenti posizionali, tramite --targets-file, o su stdin. I nomi host e le stringhe host:porta vengono automaticamente incapsulati in https://.
python3 CVE-2026-0265-check.py [options] <target> [<target>...]
L'output predefinito è un oggetto JSON per target su stdout (compatibile con jq).
Lo script emette una delle tre classi di verdetto per target. I verdetti Determinati rispondono autorevolmente alla domanda sulla vulnerabilità per quel target. I verdetti Indeterminati indicano che il probe non ha potuto raggiungere una conclusione ed è necessario un follow-up dell'operatore.
| Verdetto | Quando |
|---|---|
VULNERABLE | CAS collegato, PanOSversion rigorosamente inferiore all'hotfix corretto dell'avviso per questa base, non .saas. |
$ python3 CVE-2026-0265-check.py -b -f targets.txt
https://gp1.customer.example VULNERABLE 11.1.6-h23
https://gp2.customer.example PATCHED 11.1.6-h32
https://vpn.cloud.customer.example NOT-AFFECTED-SAAS 11.2.7-h9.saas
https://mgmt.customer.example NOT-AFFECTED-NO-CAS -
https://www.customer.example NOT-AFFECTED-NOT-GLOBALPROTECT -
https://internal-vpn.customer.example UNDETERMINED-MTLS-GATED -
$ python3 CVE-2026-0265-check.py gp.customer.example | jq .
{
"target": "https://gp.customer.example",
"verdict": "VULNERABLE",
"panos_version": "11.1.6-h23",
"prelogin_status": "Success",
"http_status": 200,
"notes": [
"11.1.6-h23 is below the advisory's patched hotfix for this base."
]
}
gpsvc limita la frequenza sotto sondaggi consecutivi — lo script ritenta già ogni HTTP 503 con backoff crescente, ma -c 5 e un -t moderato sono amichevoli per grandi flotte:
cat all-targets.txt | python3 CVE-2026-0265-check.py -b -c 5
Lo script può produrre un verdetto determinato solo quando:
NOT-AFFECTED-NOT-GLOBALPROTECT o UNDETERMINED-ERROR).UNDETERMINED-MTLS-GATED) o da un controllo aggressivo dello User-Agent (altrimenti UNDETERMINED-VERSION-GATED).Distribuito sotto una licenza MIT.
L'uso di questo strumento per attaccare target senza il preventivo consenso reciproco è illegale. È responsabilità dell'utente finale rispettare tutte le leggi locali, statali e federali applicabili. Gli sviluppatori non si assumono alcuna responsabilità e non sono responsabili per qualsiasi uso improprio o danno causato da questo programma.
| Flag | Significato |
|---|
-f, --targets-file FILE | Leggi un target per riga dal FILE |
-t, --timeout SECONDS | Timeout per richiesta. Predefinito: 20.0 |
-c, --concurrent N | Massimo target paralleli. Predefinito: 5 |
-b, --brief | Emette <url>\t<verdict>\t<panos_version> per target invece del JSON completo |
--user-agent UA | Sovrascrivi User-Agent del probe. Il predefinito è una stringa Chrome simile a un browser che bypassa il controllo versione client GP di gpsvc; usa un UA personalizzato se hai bisogno di visibilità nei log di accesso e non hai bisogno del percorso controllato dalla versione. |
| Verdetto | Quando |
|---|
PATCHED | CAS collegato, PanOSversion uguale o superiore all'hotfix corretto dell'avviso per questa base. |
NOT-AFFECTED-SAAS | CAS collegato ma PanOSversion ha il suffisso .saas (gestito dal cloud PA; non affetto secondo PA 21-05-2026). |
NOT-AFFECTED-NO-CAS | Prelogin è riuscito ma <cas-auth> indica autenticazione SAML / RADIUS / LDAP / locale. CVE non si applica a questo listener. |
NOT-AFFECTED-NOT-GLOBALPROTECT | La forma della risposta non è un portale GP (es. "Il portale GlobalProtect non esiste"). Fuori dal campo di applicazione. |
| Verdetto | Quando | Follow-up suggerito |
|---|
UNDETERMINED-VERSION-GATED | gpsvc ha restituito "CAS non è supportato dal client". CAS è collegato ma il probe è stato respinto per motivi di User-Agent; PanOSversion non può essere letta da questa risposta. | Riprova con --user-agent impostato su una stringa reale del client GP. |
UNDETERMINED-MTLS-GATED | "È richiesto un certificato client valido" nella risposta prelogin. Superficie di autenticazione nascosta dietro un gate mTLS. | Conferma la build tramite un canale separato (versione autorevole del cliente, o un probe con un certificato client valido). |
UNDETERMINED-ERROR | Errore di rete, risposta malformata, PanOSversion non analizzabile, o fallimento della decodifica del Token nonostante cas-auth=yes. | Riesegui; se persiste, il target probabilmente non è raggiungibile da questa posizione. |