
Détecter en toute sécurité si une cible PAN-OS est vulnérable à CVE-2026-0265.
Déterminez en toute sécurité si un portail GlobalProtect de Palo Alto Networks PAN-OS est vulnérable à CVE-2026-0265 sans authentifier aucune session ni modifier aucun état.
CVE-2026-0265 est un contournement d'authentification à distance affectant PAN-OS et Panorama qui se déclenche lorsqu'un profil d'authentification utilise le service d'authentification cloud (CAS). La fonction vulnérable pan_auth_verify dans libpanmp_mp.so délègue la vérification de la signature du jeton Web JSON uniquement sur l'en-tête alg contrôlé par l'attaquant — un JWT falsifié avec alg=HS256 et HMAC-SHA256(cas_public_key_pem, header.payload) comme signature est accepté comme s'il s'agissait d'un véritable jeton CAS signé RS256, permettant à tout attaquant d'usurper l'identité de n'importe quel utilisateur.
Le bogue est accessible via deux surfaces d'attaque — le portail GlobalProtect (/saml/acs.esp, génère une session VPN) et l'interface de gestion (, génère un administrateur PAN-OS complet).
/SAML20/SP/ACSUne seule requête anonyme GET /global-protect/prelogin.esp révèle tout ce qui est nécessaire pour un verdict faisant autorité :
<cas-auth>yes|no</cas-auth> défini directement par la configuration d'authentification du portail. Une valeur de yes confirme que la précondition de la CVE est remplie pour cet écouteur.<saml-request>. Son décodage donne la chaîne de version faisant autorité du pare-feu, qui est ensuite recoupée avec la matrice de correctifs par base de l'avis du fournisseur pour produire le verdict..saas — Les builds gérées par le cloud PA ne sont pas affectées selon la clarification de Palo Alto (2026-05-21), quel que soit le numéro de build de base sous-jacent.Le script émet le verdict, la version PanOS signalée par le pare-feu (afin qu'un défenseur puisse vérifier l'évaluation par rapport à son inventaire), et le contexte de triage de base (prelogin_status, prelogin_msg, http_status, notes d'erreur). Si votre pipeline nécessite des métadonnées d'appareil plus riches, recoupez l'URL cible avec votre propre inventaire.
git clone https://github.com/BishopFox/CVE-2026-0265-check
cd CVE-2026-0265-check
pip install requests
Nécessite Python 3.9+ et le paquet requests.
Passez une ou plusieurs cibles comme arguments positionnels, via --targets-file, ou sur stdin. Les noms d'hôtes et les chaînes host:port sont automatiquement enveloppés en https://.
python3 CVE-2026-0265-check.py [options] <target> [<target>...]
| Option | Signification |
|---|---|
-f, --targets-file FILE | Lire une cible par ligne à partir de FILE |
-t, --timeout SECONDS | Délai d'attente par requête. Par défaut : 20.0 |
-c, --concurrent N | Maximum de cibles parallèles. Par défaut : 5 |
-b, --brief | Émettre <url>\t<verdict>\t<panos_version> par cible au lieu du JSON complet |
--user-agent UA | Remplacer le User-Agent de la sonde. La valeur par défaut est une chaîne Chrome de type navigateur qui contourne la restriction de version du client GP de gpsvc ; utilisez un UA personnalisé si vous avez besoin de visibilité d'audit dans les logs d'accès et que vous n'avez pas besoin du chemin restreint par version. |
La sortie par défaut est un objet JSON par cible sur stdout (compatible jq).
Le script émet l'une des trois classes de verdict par cible. Les verdicts Déterminé répondent à la question de vulnérabilité de manière autoritaire pour cette cible. Les verdicts Indéterminé indiquent que la sonde n'a pas pu conclure et qu'un suivi de l'opérateur est nécessaire.
| Verdict | Quand |
|---|---|
VULNERABLE | CAS attaché, PanOSversion strictement inférieure au correctif de l'avis pour cette base, pas .saas. |
| Verdict | Quand |
|---|---|
PATCHED | CAS attaché, PanOSversion égale ou supérieure au correctif de l'avis pour cette base. |
NOT-AFFECTED-SAAS | CAS attaché mais PanOSversion a le suffixe .saas (géré par le cloud PA ; non affecté selon PA 2026-05-21). |
NOT-AFFECTED-NO-CAS | Prelogin a retourné succès mais <cas-auth> indique SAML / RADIUS / LDAP / auth locale. La CVE ne s'applique pas à cet écouteur. |
NOT-AFFECTED-NOT-GLOBALPROTECT | La forme de la réponse n'est pas un portail GP (par ex. « GlobalProtect portal does not exist »). Hors scope. |
| Verdict | Quand | Suivi suggéré |
|---|---|---|
UNDETERMINED-VERSION-GATED | gpsvc a retourné « CAS is not supported by the client ». CAS est attaché mais la sonde a été rejetée pour des raisons de User-Agent ; PanOSversion ne peut pas être lue depuis cette réponse. | Réessayer avec --user-agent défini sur une chaîne de client GP réelle. |
UNDETERMINED-MTLS-GATED | « Valid client certificate is required » dans la réponse prelogin. Surface d'authentification cachée derrière une passerelle mTLS. | Confirmer le build via un canal séparé (version autoritaire du client, ou une sonde avec un certificat client valide). |
UNDETERMINED-ERROR | Échec réseau, réponse malformée, PanOSversion non analysable, ou échec de décodage du Token malgré cas-auth=yes. | Réexécuter ; si persistant, la cible n'est probablement pas joignable depuis cette position. |
$ 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 limite le débit lors de sondages consécutifs — le script réessaie déjà chaque HTTP 503 avec un backoff croissant, mais -c 5 et un -t modéré sont conviviaux pour les grandes flottes :
cat all-targets.txt | python3 CVE-2026-0265-check.py -b -c 5
Le script ne peut produire un verdict déterminé que lorsque :
NOT-AFFECTED-NOT-GLOBALPROTECT ou UNDETERMINED-ERROR).UNDETERMINED-MTLS-GATED) ou par une vérification agressive du User-Agent (sinon UNDETERMINED-VERSION-GATED).Distribué sous une licence MIT.
L'utilisation de cet outil pour attaquer des cibles sans consentement mutuel préalable est illégale. Il est de la responsabilité de l'utilisateur final de respecter toutes les lois locales, étatiques et fédérales applicables. Les développeurs déclinent toute responsabilité et ne sont pas responsables de toute utilisation abusive ou de tout dommage causé par ce programme.