TL;DR: CVE-2026-0265 is a pre-authentication JSON Web Token (JWT) signature bypass in PAN-OS and Panorama, reachable only when Cloud Authentication Service (CAS) is attached to an authentication profile. Bishop Fox has published a detection script that returns a definitive vulnerable / not-vulnerable verdict per GlobalProtect portal from a single anonymous HTTP request. Patch to a fixed version (10.2.18+, 11.1.15+, 11.2.12+, 12.1.7+) or detach CAS from affected profiles as a workaround.
CVE-2026-0265 lets an unauthenticated, remote attacker forge a JWT and log in as any user the firewall trusts. Two interfaces are affected: attacks against the GlobalProtect portal can compromise virtual private network (VPN) user sessions, while attacks against the management interface can compromise the PAN-OS administrator account. In both cases, PAN-OS must be configured with CAS attached to an authentication profile. Without that precondition, the vulnerable code path is never invoked.
Palo Alto Networks rated the bug 7.2 (high severity) for the case where the management interface is internet-exposed and gave the GlobalProtect portal a separate, lower Common Vulnerability Scoring System (CVSS) score. Harsh Jaiswal of HacktronAI, the original reporter, publicly disputed that rating on the basis that he had bypassed CAS-protected GlobalProtect portals on multiple production tenants and has since published his own technical analysis.
Our independent analysis of the patched binaries confirms his root-cause findings, but for this article we will focus on defense. We built a detection tool that pulls two important data points (the CAS precondition and the PAN-OS version) out of the same anonymous prelogin response and determines if the target is vulnerable to CVE-2026-0265.
Our detection script is available at https://github.com/BishopFox/CVE-2026-0265-check.
Remediation advice from the vendor is straightforward:
Palo Alto Networks classified this vulnerability as CWE-347, improper verification of a cryptographic signature. The root cause is JWT algorithm confusion in pan_auth_verify (in libpanmp_mp.so), which dispatches signature verification on the alg value parsed from the attacker-controllable JWT header. The vulnerable build happily accepts alg=HS256 and computes a hash-based message authentication code (HMAC) over whatever bytes the caller staged as the verification key. Crucially, it does so even when those bytes are a PEM-encoded RSA public key that the firewall fetched from CAS to verify RS256-signed tokens. Anyone who can read that public key, which Palo Alto's regional CAS service exposes to enrolled devices, can pre-compute the matching HMAC and forge a token for any user.
This is a textbook JWT algorithm confusion bug, and the canonical fix (refuse to HMAC if the key bytes look like a PEM-encoded asymmetric key) is exactly what the patch implements.
A key detail is that both vulnerable interfaces (GlobalProtect and management) answer at the same external path: /SAML20/SP/ACS. Which listener is on the other end depends on which Nginx server block handles the request.
Surface | Rewrite target | Daemon | Impact on success |
GlobalProtect portal |
|
| VPN session as forged user |
Management interface |
→
|
| Full PAN-OS administrator |
The administrator case is the more severe one: write firewall config, drop into a command-line interface (CLI) shell from the web management terminal panel, read RADIUS shared keys and stored private keys, pivot to Panorama. Jaiswal's GlobalProtect portal claim is the more publicly visible side of this bug, but it is the less severe side.
Both surfaces share the same vulnerable function (pan_auth_verify) and the same gating condition: CAS must be attached to the authentication profile in front of the listener.
One scope note before moving on: the detection technique we describe in the rest of this post fingerprints the GlobalProtect portal surface only. The management interface doesn't expose the unauthenticated endpoint we read from, so a clean external assessment against that surface needs a different approach. In practice, the more important point is that the management interface shouldn't be reachable from the internet in the first place. If yours is, that exposure is itself the priority finding and should be closed before chasing the CVE-specific triage.
For a GlobalProtect portal to be exploitable, two independent things have to be true:
If either factor is false on its own, the target isn't exploitable. The cleanest external assessment is one that observes both factors, on the same host, in one pass. PAN-OS's own unauthenticated prelogin endpoint hands us exactly that, and it hands us the firewall's authoritative self-reported version while it's at it, which beats every banner-scraping or TLS-cert heuristic we've tried.
The probe is a single anonymous GET /global-protect/prelogin.esp. No authentication, no body modification, no state change. The only caveat is that this endpoint can be configured to require an mTLS client certificate, which not only interferes with detection but also mitigates exploitation by unauthorized attackers.
The prelogin response is a small XML document that the GlobalProtect agent normally consumes before submitting credentials. Among its fields:
<cas-auth>yes</cas-auth>
The firewall emits <cas-auth>yes</cas-auth> exactly when CAS is the configured authentication method on the portal's login profile. The no and empty-value forms cover SAML, RADIUS, LDAP, and local-auth. Absence of the tag means an upstream gate blocked the probe: a client-certificate (mTLS) requirement, a GP-client version gate, or the host not being a GlobalProtect portal at all.
There's no guessing here: the portal is telling us its own auth configuration directly. We require the explicit yes form for a positive precondition verdict.
The same prelogin response also carries a <saml-request> field whose contents are a base64-encoded auto-submit HTML form: the redirect handoff a real GlobalProtect client would forward to Palo Alto's CAS service to begin the authentication flow. Inside that form is a JWT issued by the firewall itself, and inside that JWT's payload is a claim populated from the appliance's own configuration:
"PanOSversion": "11.1.6-h32"
That claim is the authoritative version string. It comes from the same code path that determines what hotfix the appliance is running, so it cannot drift from what the firewall is actually executing the way a TLS certificate or HTML banner can. Recovering it is a straightforward three-step decode, with no cryptography involved:
<saml-request> XML element to get the auto-submit HTML form. <input name="Token" value="HEADER.PAYLOAD.SIGNATURE">). PanOSversion lives there.The JWT's signature is never verified; we're reading a claim from a structurally valid token that the firewall hands out to anyone who asks. The token would be useful for an attacker only if forged with the right key (the bug we're discussing), but as a defensive read of the firewall's posture it's a gift.
With a recovered PanOSversion, the verdict is a table lookup against the vendor advisory's patch matrix. For each affected <train>.<base> release, the advisory publishes the lowest hotfix number that contains the fix. For example:
11.1.6-h32 → base 11.1.6's patch is h32. h32 ≥ h32 → not vulnerable. 11.1.6-h23 → same base, same patch. h23 < h32 → vulnerable. 11.2.7-h9 → base 11.2.7's patch is h13. h9 < h13 → vulnerable. 11.1.15 → the entire base is patched. → not vulnerable.Bases that have no hotfix listed in their train (for example, 11.1.8 in the 11.1 train) are vulnerable across all hotfixes; the customer has to move up to a base release that does contain the fix.
Cloud-managed PAN-OS builds emit a PanOSversion claim with a trailing .saas suffix (for example, 11.2.7-h9.saas). Per Palo Alto Networks' May 21, 2026 clarification, all SaaS builds are not affected by CVE-2026-0265: they're patched independently through the cloud-managed deployment pipeline. We short-circuit any .saas suffix straight to a not-affected verdict without consulting the on-prem hotfix matrix.
Decoding the embedded JWT also surfaces a handful of fields that aren't part of the verdict but are worth knowing exist, because the same probe that drives the patch decision will incidentally hand them to anyone scanning for them:
x5c device certificate subject). cloud-auth-service.<region>.apps.paloaltonetworks.com host this firewall's CAS pipeline is bound to.For defenders, this is useful posture data: knowing what your portal hands out anonymously is part of the audit. For the broader research community, it's a reminder that "the precondition for this CVE" and "the parameters an attacker would need to weaponize the bug" overlap more than the original advisory framing suggests. We're not publishing a forge recipe in this post, but anyone reading both this analysis and HacktronAI's together can connect the dots, which is part of why patch urgency matters.
The two-factor verdict only fires when both factors can be observed cleanly. Our detection tool explicitly does not assert a verdict when:
We also don't try to verify the bug by submitting a forged JWT. Every signal we use is something the firewall already publishes to anonymous visitors, which keeps the assessment safe to run at scale.
Credit to Harsh Jaiswal and HacktronAI for the original public discussion of remote exploitability against GlobalProtect portals. Our analysis confirms theirs and adds the defender-side detection technique, the on-prem-vs-cloud-managed split via the .saas suffix, and the embedded-JWT version-extraction primitive. The vendor advisory is the authoritative reference for affected versions and fixed hotfixes: security.paloaltonetworks.com/CVE-2026-0265.
Our Cosmos customers were notified about our research into this vulnerability shortly after the vendor advisory. If you're interested in learning more about managed services delivered through our Cosmos platform, visit https://bishopfox.com/services/continuous-threat-exposure-management.
For more vulnerability intelligence insights, visit the Bishop Fox Blog.