
Detectar de forma segura si un objetivo PAN-OS es vulnerable a CVE-2026-0265.
Determine de manera segura si un portal GlobalProtect de Palo Alto Networks PAN-OS es vulnerable a CVE-2026-0265 sin autenticar ninguna sesión ni modificar ningún estado.
CVE-2026-0265 es una omisión de autenticación remota que afecta a PAN-OS y Panorama, y se activa cuando un perfil de autenticación utiliza Cloud Authentication Service (CAS). La función vulnerable pan_auth_verify en libpanmp_mp.so envía la verificación de la firma del JSON Web Token basándose únicamente en el encabezado alg controlado por el atacante; se acepta un JWT falsificado con alg=HS256 y HMAC-SHA256(cas_public_key_pem, header.payload) como su firma, como si fuera un token CAS real firmado con RS256, lo que permite que cualquier atacante suplante a cualquier usuario.
El error se puede alcanzar a través de dos superficies de ataque: el portal GlobalProtect (/saml/acs.esp, genera una sesión VPN) y la interfaz de administración (, otorga privilegios de administrador PAN-OS).
/SAML20/SP/ACSUna única solicitud anónima GET /global-protect/prelogin.esp revela todo lo necesario para un veredicto autorizado:
<cas-auth>yes|no</cas-auth> establecido directamente por la configuración de autenticación del portal. Un valor de yes confirma que la condición previa de CVE se cumple para este oyente.<saml-request>. Decodificarlo produce la cadena de versión autorizada del firewall, que luego se cruza con la matriz de parches y hotfixes por base del aviso del proveedor para producir el veredicto..saas — Las versiones administradas en la nube de PA no se ven afectadas según la aclaración de Palo Alto (2026-05-21), independientemente del número de versión base subyacente.El script emite el veredicto, la versión de PanOS reportada por el firewall (para que un defensor pueda verificar la evaluación contra su inventario) y contexto básico de triaje (prelogin_status, prelogin_msg, http_status, notas de error). Si su canalización necesita metadatos más ricos del dispositivo, compare la URL de destino con su propio inventario.
git clone https://github.com/BishopFox/CVE-2026-0265-check
cd CVE-2026-0265-check
pip install requests
Requiere Python 3.9+ y el paquete requests.
Pase uno o más objetivos como argumentos posicionales, mediante --targets-file o por stdin. Los nombres de host y las cadenas host:port se envuelven automáticamente a https://.
python3 CVE-2026-0265-check.py [options] <target> [<target>...]
| Flag | Significado |
|---|---|
-f, --targets-file FILE | Lee un objetivo por línea desde FILE |
-t, --timeout SECONDS | Tiempo de espera por solicitud. Por defecto: 20.0 |
-c, --concurrent N | Máximo de objetivos en paralelo. Por defecto: 5 |
-b, --brief | Emite <url>\t<verdict>\t<panos_version> por objetivo en lugar de JSON completo |
--user-agent UA | Sobrescribe el User-Agent de la sonda. El valor por defecto es una cadena de Chrome similar a un navegador que evita la compuerta de versión de cliente GP de gpsvc; use un UA personalizado si necesita visibilidad en los registros de acceso y no necesita la ruta restringida por versión. |
La salida por defecto es un objeto JSON por objetivo en stdout (compatible con jq).
El script emite una de tres clases de veredicto por objetivo. Los veredictos Determinados responden a la pregunta de vulnerabilidad de forma autorizada para ese objetivo. Los veredictos Indeterminados indican que la sonda no pudo llegar a una conclusión y se requiere seguimiento por parte del operador.
| Verdict | Cuándo |
|---|---|
VULNERABLE | CAS adjunto, PanOSversion estrictamente por debajo del hotfix parcheado del aviso para esta base, no .saas. |
| Verdict | Cuándo |
|---|---|
PATCHED | CAS adjunto, PanOSversion igual o superior al hotfix parcheado del aviso para esta base. |
NOT-AFFECTED-SAAS | CAS adjunto pero PanOSversion tiene el sufijo .saas (gestionado en la nube de PA; no afectado según PA 2026-05-21). |
NOT-AFFECTED-NO-CAS | Prelogin devuelto con éxito pero <cas-auth> indica autenticación SAML / RADIUS / LDAP / local. CVE no aplica a este oyente. |
NOT-AFFECTED-NOT-GLOBALPROTECT | La forma de la respuesta no es un portal GP (p. ej., "GlobalProtect portal does not exist"). Fuera del alcance. |
| Verdict | Cuándo | Seguimiento sugerido |
|---|---|---|
UNDETERMINED-VERSION-GATED | gpsvc devolvió "CAS is not supported by the client". CAS está adjunto pero la sonda fue rechazada por razones de User-Agent; PanOSversion no se puede leer de esta respuesta. | Reintentar con --user-agent configurado como una cadena real de cliente GP. |
UNDETERMINED-MTLS-GATED | "Valid client certificate is required" en la respuesta de prelogin. Superficie de autenticación oculta detrás de una compuerta mTLS. | Confirmar la versión a través de un canal separado (versión autorizada del cliente, o una sonda con un certificado de cliente válido). |
UNDETERMINED-ERROR | Fallo de red, respuesta malformada, PanOSversion no analizable, o fallo en la decodificación de Token a pesar de cas-auth=yes. | Reejecutar; si persiste, es probable que el objetivo no sea alcanzable desde esta posición. |
$ 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 velocidad bajo sondeos consecutivos — el script ya reintenta cada HTTP 503 con retroceso creciente, pero -c 5 y un -t moderado es amigable con flotas grandes:
cat all-targets.txt | python3 CVE-2026-0265-check.py -b -c 5
El script puede producir un veredicto determinado solo cuando:
NOT-AFFECTED-NOT-GLOBALPROTECT o UNDETERMINED-ERROR).UNDETERMINED-MTLS-GATED) ni por una verificación agresiva de User-Agent (de lo contrario, UNDETERMINED-VERSION-GATED).Distribuido bajo una licencia MIT.
El uso de esta herramienta para atacar objetivos sin el consentimiento mutuo previo es ilegal. Es responsabilidad del usuario final cumplir con todas las leyes locales, estatales y federales aplicables. Los desarrolladores no asumen ninguna responsabilidad y no se hacen responsables por el uso indebido o los daños causados por este programa.