安全地判断 Palo Alto Networks PAN-OS GlobalProtect 门户是否易受 CVE-2026-0265 影响,无需认证任何会话或修改任何状态。
CVE-2026-0265 是一个影响 PAN-OS 和 Panorama 的远程认证绕过漏洞,当认证配置文件使用云认证服务 (CAS) 时触发。libpanmp_mp.so 中存在漏洞的 pan_auth_verify 函数完全根据攻击者控制的 alg 头部分派 JSON Web Token 签名验证——一个伪造的 JWT,其 alg=HS256 且签名为 HMAC-SHA256(cas_public_key_pem, header.payload),会被当作真实的 RS256 签名 CAS 令牌接受,从而允许任何攻击者冒充任何用户。
该漏洞可通过两个攻击面利用——GlobalProtect 门户 (/saml/acs.esp,可获得 VPN 会话) 和管理界面 (/SAML20/SP/ACS,可获得完整的 PAN-OS 管理员权限)。本工具仅覆盖 GlobalProtect 门户攻击面。
一个匿名的 GET /global-protect/prelogin.esp 请求即可揭示所有必要信息以给出权威结论:
<cas-auth>yes|no</cas-auth>,由门户的认证配置直接设置。值为 yes 表示满足此监听器的 CVE 前提条件。<saml-request> 字段中嵌入了出站 CAS 请求令牌。解码后可获得防火墙的权威版本字符串,然后与供应商公告中每个基础版本的已修补热修复矩阵进行交叉比对,从而产生结论。.saas 短路 — 根据 Palo Alto 的澄清 (2026-05-21),PA 云管理版本不受影响,无论底层基础版本号如何。脚本输出结论、防火墙报告的 PanOS 版本(以便防御者根据库存验证评估)、以及基本分类上下文(prelogin_status、prelogin_msg、http_status、错误说明)。如果您的管道需要更丰富的设备元数据,请将目标 URL 与您自己的库存进行交叉引用。
git clone https://github.com/BishopFox/CVE-2026-0265-check
cd CVE-2026-0265-check
pip install requests
需要 Python 3.9+ 和 requests 包。
将一个或多个目标作为位置参数传递,或通过 --targets-file 传递,或从标准输入传递。主机名和 host:port 字符串会自动包装为 https://。
python3 CVE-2026-0265-check.py [options] <target> [<target>...]
默认输出为每个目标一行 JSON 对象到标准输出(便于 jq 解析)。
脚本为每个目标输出三类判定结果之一。确定 判定结果权威地回答了该目标的漏洞问题。未确定 判定结果表示探测无法得出结论,需要操作员跟进。
| 判定结果 | 条件 |
|---|---|
VULNERABLE | CAS 已附加,PanOSversion 严格低于公告中该基础版本的已修补热修复版本,且非 .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 在连续探测下会进行速率限制——脚本已经对每个 HTTP 503 使用递增退避进行重试,但使用 -c 5 和适中的 -t 对大型部署更友好:
cat all-targets.txt | python3 CVE-2026-0265-check.py -b -c 5
脚本仅在以下情况下才能产生确定判定结果:
NOT-AFFECTED-NOT-GLOBALPROTECT 或 UNDETERMINED-ERROR)。UNDETERMINED-MTLS-GATED)或激进的 User-Agent 检查限制(否则为 UNDETERMINED-VERSION-GATED)。根据 MIT 许可证 分发。
在未事先获得双方同意的情况下使用此工具攻击目标是非法的。最终用户有责任遵守所有适用的地方、州和联邦法律。开发者不承担任何责任,且不对因使用本程序造成的任何误用或损害负责。
| 标志 | 含义 |
|---|
-f, --targets-file FILE | 从 FILE 中每行读取一个目标 |
-t, --timeout SECONDS | 每个请求的超时时间。默认值:20.0 |
-c, --concurrent N | 最大并行目标数。默认值:5 |
-b, --brief | 每个目标输出 <url>\t<verdict>\t<panos_version> 而不是完整 JSON |
--user-agent UA | 覆盖探测 User-Agent。默认使用类似 Chrome 的浏览器字符串,可绕过 gpsvc 的 GP 客户端版本检查;如果需要访问日志审计可见性且不需要版本门控路径,请使用自定义 UA。 |
| 判定结果 | 条件 |
|---|
PATCHED | CAS 已附加,PanOSversion 达到或高于公告中该基础版本的已修补热修复版本。 |
NOT-AFFECTED-SAAS | CAS 已附加但 PanOSversion 带有 .saas 后缀(PA 云管理;根据 PA 2026-05-21 不受影响)。 |
NOT-AFFECTED-NO-CAS | Prelogin 成功返回但 <cas-auth> 指示 SAML / RADIUS / LDAP / 本地认证。CVE 不适用于此监听器。 |
NOT-AFFECTED-NOT-GLOBALPROTECT | 响应形态不是 GP 门户(例如"GlobalProtect portal does not exist")。超出范围。 |
| 判定结果 | 条件 | 建议跟进 |
|---|
UNDETERMINED-VERSION-GATED | gpsvc 返回"CAS is not supported by the client"。CAS 已附加但探测由于 User-Agent 原因被拒绝;无法从该响应中读取 PanOSversion。 | 使用 --user-agent 设置为真实的 GP 客户端字符串重试。 |
UNDETERMINED-MTLS-GATED | prelogin 响应中出现"Valid client certificate is required"。认证表面隐藏在 mTLS 网关之后。 | 通过其他渠道确认版本(客户权威版本,或使用有效客户端证书进行探测)。 |
UNDETERMINED-ERROR | 网络故障、格式错误的响应、无法解析的 PanOSversion,或尽管 cas-auth=yes 但 Token 解码失败。 | 重新运行;如果持续出现,则目标可能无法从此位置访问。 |