Someone left the VPN client's toolbox unlocked, but you already need to be inside the house to reach it
CVE-2026-0307 covers multiple local privilege escalation flaws in the Palo Alto Networks GlobalProtect app on Windows, macOS, and Linux desktops. The root cause is CWE-426 (Untrusted Search Path): the GlobalProtect service, running as NT AUTHORITY\SYSTEM (Windows) or root (macOS/Linux), loads libraries or executables from directories a standard user can write to. A local, low-privileged attacker can plant a malicious DLL or binary in the search path and wait for the privileged service to execute it, gaining full SYSTEM/root on the host. Affected versions are 6.3 < 6.3.3-h15, 6.2 < 6.2.8-h14, and 6.0 < 6.0.15. iOS, Android, and ChromeOS clients are unaffected.
Palo Alto published a CVSS v4.0 base score of 8.5 but applied their own environmental and threat adjustments to arrive at 5.9 MEDIUM. That adjusted score is honest. The base score of 8.5 reflects the raw impact (full host compromise), but the local-access-only attack vector, absence of any public PoC, zero known exploitation in the wild, and host-scoped blast radius all compress the real-world risk. GlobalProtect is a VPN *client* — not an identity provider, hypervisor, or domain controller — so popping SYSTEM on one endpoint doesn't cascade to fleet-level compromise by itself. The MEDIUM bucket is the right neighborhood.
4 steps from start to impact.
Local user account on target endpoint
- Local access to a host running a vulnerable GlobalProtect version
- Standard user (non-admin) credentials
- Requires prior compromise or insider access — this is NOT an initial-access vulnerability
- EDR/EPP on the endpoint may flag unusual process creation from writable directories
Plant malicious library in untrusted search path
- Write access to a directory in the GlobalProtect service's search path
- Knowledge of which library name to hijack (trivially enumerable with Process Monitor or
strace)
- Application whitelisting / WDAC policies block unsigned DLLs from loading in protected processes
- Some EDR products detect DLL planting patterns in writable directories
Trigger service to load the malicious library
- GlobalProtect service must restart or re-initialize
- Planted DLL must match the expected filename
- If the service has already loaded the legitimate library and doesn't restart, exploitation is delayed
- Endpoint detection for unusual parent-child process trees from
PanGPS.exeorPanGPA.exe
Achieve SYSTEM/root and post-exploitation
NT AUTHORITY\SYSTEM on Windows or root on macOS/Linux. From here, typical actions include credential dumping (Mimikatz, sekurlsa::logonpasswords), disabling security agents, establishing persistence, or pivoting laterally via cached domain credentials or VPN certificates stored on the host.- Successful library load from step 3
- Credential-guard-enabled Windows hosts resist credential dumping
- EDR behavioral detection for LSASS access, credential theft tools, or security-agent tampering
- Network segmentation limits lateral movement value of a single compromised endpoint
The supporting signals.
| In-the-Wild Exploitation | None reported. Palo Alto Networks states: *"not aware of any malicious exploitation of this issue."* Not listed on CISA KEV. |
|---|---|
| Proof-of-Concept | No public PoC as of 2026-09-10. No known exploit code on GitHub, Exploit-DB, or researcher blogs. CWE-426 exploitation is well-documented generically, lowering the barrier for skilled attackers. |
| EPSS Score | Not yet available — CVE published 2026-09-09, EPSS model likely has not ingested it. Expect low initial probability given local-only vector and no PoC. |
| KEV Status | Not listed on CISA Known Exploited Vulnerabilities catalog. |
| CVSS v4.0 Vector | CVSS:4.0/AV:L/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:L/SI:L/SA:L/E:U/AU:N/R:U/V:D/RE:M/U:Amber — Base 8.5, adjusted to 5.9 MEDIUM by Palo Alto's environmental modifiers (E:U unreported exploitation, V:D diffuse value density). |
| Affected Versions | GlobalProtect App 6.3.x < 6.3.3-h15 (Win/macOS/Linux), 6.2.x < 6.2.8-h14 (Win/macOS), 6.0.x < 6.0.15 (all platforms). iOS, Android, ChromeOS not affected. |
| Fixed Versions | 6.3.3-h15 (Linux ETA 09/17, macOS ETA 09/28, Windows ETA 09/28–10/29), 6.2.8-h14 (macOS/Win), 6.0.15 (all). Both GP client AND PAN-OS/Prisma Access must be upgraded. |
| Scanning/Exposure | GlobalProtect is an endpoint VPN client, not an internet-facing service. Shodan/Censys data is irrelevant for this local-access-only bug. Exposure = every managed endpoint running vulnerable GP versions, typically thousands per enterprise. |
| Disclosure Date | 2026-09-09 — published in Palo Alto Networks September 2026 security advisory batch. |
| Credit | Palo Alto internal security research teams, Liang Zhu, and Martijn van Ramesdonk (credited on sibling CVE-2026-0251; likely same research effort). |
noisgate verdict.
The single most decisive factor is the local-access-only attack vector: exploitation requires the attacker to already hold a standard-user session on the target endpoint, meaning this is a post-compromise privilege-escalation link, not an initial-access vulnerability. The blast radius is confined to the individual host — GlobalProtect is a VPN client, not a fleet-controlling infrastructure component — so even successful exploitation does not directly cascade beyond the compromised endpoint.
Why this verdict
- Local access prerequisite (AV:L, PR:L): The attacker must already have a foothold on the endpoint. This is not reachable from the network. Every internet-facing attack surface metric (Shodan, Censys, GreyNoise) is irrelevant. This single prerequisite implies the attacker has already passed initial access — compounding downward pressure from the 8.5 base.
- No PoC, no exploitation, no KEV: Zero evidence of weaponization. CWE-426 is a well-understood class, but without a named hijackable path, building a reliable exploit requires reverse engineering the service's load order. EPSS will likely score this below the 10th percentile once ingested.
- Host-scoped blast radius: Successful exploitation yields SYSTEM/root on *one endpoint*. There is no lateral-movement amplifier inherent in the GlobalProtect client component itself.
- Role multiplier: GlobalProtect is a VPN *client agent* deployed on user workstations and laptops. (a) *Low-value role:* dev sandbox or lab — LPE is inconsequential. (b) *Typical role:* corporate laptop — SYSTEM access aids credential theft and lateral movement, but EDR + Credential Guard + network segmentation contain the blast radius to one host. (c) *High-value role consideration:* GlobalProtect does NOT typically run on domain controllers, hypervisors, CI/CD servers, or identity providers. It is not a kernel-mode security agent (it runs as a user-mode service). The nearest high-value scenario is an admin workstation with cached privileged credentials — but this is a deployment-specific condition, not inherent to the component. The blast radius does NOT reach fleet/domain/supply-chain scale from the component itself. No verdict floor override triggered.
- Vendor environmental adjustment validates MEDIUM: Palo Alto's own CVSS v4.0 environmental scoring reduced the base 8.5 to 5.9 MEDIUM using E:U (unreported exploitation) and V:D (diffuse value). Our independent friction audit arrives at the same bucket.
Why not higher?
Upgrading to HIGH would require either active exploitation, a public PoC lowering the skill barrier, or a blast radius beyond the individual host. None of these conditions exist. The local-access-only vector means the attacker is already inside — this CVE is a *convenience link* in an existing chain, not a chain-starter. GlobalProtect's deployment role (endpoint VPN client) does not meet the high-value-role floor criteria for domain/fleet/supply-chain impact.
Why not lower?
Dropping to LOW would understate the impact of a reliable local-to-SYSTEM/root escalation on enterprise-managed endpoints. CWE-426 is a well-understood vulnerability class that lowers the skill barrier for anyone with local access. The affected population is large (every GP desktop client in the enterprise), and SYSTEM access on a corporate endpoint has real operational value for credential theft and EDR evasion. The absence of workarounds also means the only remediation is patching.
What to do — in priority order.
- Enable Windows Defender Application Control (WDAC) or AppLocker in enforced mode — Block unsigned or unexpected DLLs from loading in the GlobalProtect service context. This directly breaks the CWE-426 exploitation chain by preventing the untrusted library from executing. Deploy this as your primary compensating control within the 365-day noisgate remediation SLA for MEDIUM.
- Restrict write permissions on GlobalProtect installation directories — Audit and lock down ACLs on
C:\Program Files\Palo Alto Networks\GlobalProtect\(Windows) and/opt/paloaltonetworks/globalprotect/(Linux) so only SYSTEM/root can write. This prevents standard users from planting libraries in the service's search path. - Monitor for DLL sideloading via EDR — Create detection rules for unsigned DLL loads by
PanGPS.exe,PanGPA.exe, orglobalprotectservice processes. Sysmon Event ID 7 or equivalent EDR telemetry will surface exploitation attempts before they succeed. - Enable Credential Guard on Windows endpoints — Even if an attacker achieves SYSTEM, Credential Guard prevents extraction of domain credentials from LSASS, severely limiting the post-exploitation value of this LPE.
- Network-level controls (firewalls, IPS, WAF): This is a local privilege escalation — there is no network traffic to inspect or block. Perimeter defenses are irrelevant.
- MFA / conditional access policies: MFA protects authentication flows, not local library loading. It does not prevent or detect DLL hijacking.
- Disabling GlobalProtect service as a workaround: Palo Alto explicitly states no workarounds exist. Disabling the VPN client breaks remote access for the user and does not constitute an acceptable mitigation in most enterprises.
Crowdsourced verification payload.
Run on each Windows endpoint where GlobalProtect is installed. Execute in an elevated PowerShell session: powershell -ExecutionPolicy Bypass -File .\Check-CVE-2026-0307.ps1. No special modules required. For macOS/Linux, check the version string from globalprotect show --version against the thresholds below.
# Check-CVE-2026-0307.ps1
# Checks if the installed GlobalProtect app is vulnerable to CVE-2026-0307
# Output: VULNERABLE / PATCHED / UNKNOWN
# Exit codes: 1 = VULNERABLE, 0 = PATCHED, 2 = UNKNOWN
$ErrorActionPreference = 'Stop'
function Compare-Version ($installed, $fixed) {
# Normalize hotfix versions: 6.3.3-h15 -> 6.3.3.15
$instNorm = $installed -replace '-h', '.'
$fixNorm = $fixed -replace '-h', '.'
try {
$iv = [Version]$instNorm
$fv = [Version]$fixNorm
return $iv.CompareTo($fv)
} catch {
return $null
}
}
# Try to find GlobalProtect version from registry
$regPaths = @(
'HKLM:\SOFTWARE\Palo Alto Networks\GlobalProtect',
'HKLM:\SOFTWARE\WOW6432Node\Palo Alto Networks\GlobalProtect'
)
$version = $null
foreach ($rp in $regPaths) {
if (Test-Path $rp) {
$version = (Get-ItemProperty -Path $rp -ErrorAction SilentlyContinue).Version
if ($version) { break }
}
}
# Fallback: check PanGPA.exe file version
if (-not $version) {
$exePath = "$env:ProgramFiles\Palo Alto Networks\GlobalProtect\PanGPA.exe"
if (Test-Path $exePath) {
$fi = (Get-Item $exePath).VersionInfo
$version = $fi.ProductVersion
}
}
if (-not $version) {
Write-Host 'UNKNOWN - GlobalProtect not detected on this host.'
exit 2
}
Write-Host "Detected GlobalProtect version: $version"
# Define fixed versions per branch
$fixedVersions = @{
'6.3' = '6.3.3-h15'
'6.2' = '6.2.8-h14'
'6.0' = '6.0.15'
}
# Determine branch
$branch = $null
if ($version -match '^6\.3\.') { $branch = '6.3' }
elseif ($version -match '^6\.2\.') { $branch = '6.2' }
elseif ($version -match '^6\.0\.') { $branch = '6.0' }
else {
Write-Host "UNKNOWN - Version $version is not in a known affected branch (6.0, 6.2, 6.3)."
exit 2
}
$fixed = $fixedVersions[$branch]
$cmp = Compare-Version $version $fixed
if ($null -eq $cmp) {
Write-Host "UNKNOWN - Could not parse version '$version' for comparison."
exit 2
}
if ($cmp -lt 0) {
Write-Host "VULNERABLE - GlobalProtect $version is below fixed version $fixed for branch $branch. CVE-2026-0307 applies."
exit 1
} else {
Write-Host "PATCHED - GlobalProtect $version meets or exceeds fixed version $fixed."
exit 0
}If you remember one thing.
PanGPS.exe or PanGPA.exe, enable that rule now — it costs nothing and buys you detection coverage while you wait for the patch rollout.Sources
- Palo Alto Networks Advisory — CVE-2026-0307
- Palo Alto Networks Advisory — CVE-2026-0251 (sibling LPE)
- Palo Alto Networks Advisory — CVE-2026-0299 (sibling LPE)
- OpenCVE — CVE-2026-0299 Details
- CybersecurityNews — GlobalProtect Root Privilege Escalation
- Feedly CVE Intelligence — CVE-2026-0251
- MITRE CWE-426 — Untrusted Search Path
What defenders are saying.
Crowdsourced verification outputs.
Results submitted by users who ran the verification payload against their environment.