Someone with keys to your firewall's front door can now own the entire house, foundation included
CVE-2026-0322 is an authenticated remote code execution vulnerability in the Palo Alto Networks PAN-OS management web interface, classified as CWE-94 (Code Injection). An attacker who already holds high-privilege admin credentials can send a crafted request to the management interface and execute arbitrary commands as root on the underlying Linux OS — not merely PAN-OS admin-level, but full OS root. Affected branches span PAN-OS 10.2.x through 12.2.x: specifically 10.2.0–10.2.18-h10, 11.1.0–11.1.16-h2, 11.2.0–11.2.15, 12.1.2–12.1.10-h1, and 12.2.0–12.2.3. Cloud NGFW and Prisma Access are unaffected. Patches landed October 14, 2026, with fixes at 12.2.4, 12.1.10-h2, 11.2.16, 11.1.16-h3, and 10.2.18-h12.
The vendor's CVSSv4.0 score of 8.6 (HIGH) with their maximum urgency rating ('Red') is honest — they're not downplaying this. But it's important to read the PR:H in the vector: you need admin-level credentials *before* exploitation begins. That gate prevents mass spray-and-pray attacks. The vendor's 'very limited exploitation' language confirms targeted, credential-dependent campaigns rather than wormable or drive-by exploitation. For a fleet manager, the severity is real because PAN-OS *is* your perimeter — root on it means traffic interception, implant persistence that survives config resets, and a pivot point into every routed segment — but the attack requires a prior credential compromise, which meaningfully narrows exposure.
5 steps from start to impact.
Obtain PAN-OS admin credentials
- Valid admin-level PAN-OS credentials (PR:H)
- PAN-OS admin accounts are typically tightly controlled and limited to a small team
- Environments with SAML/RADIUS + MFA make credential theft significantly harder
- Palo Alto best practice guides recommend unique, rotated credentials
Reach the management interface
- Network path to PAN-OS management interface (HTTPS)
- Best practice deploys management on isolated OOB VLAN behind jump servers
- Roughly 8,700–15,000 of an estimated 300,000+ PAN-OS devices expose management to the internet (~3-5%)
- Enterprises with mature network segmentation require VPN + jump box to reach management plane
http.title:"Palo Alto Networks" or ssl.cert.subject.CN:"PAN-OS" on management ports; network flow anomalies to management interface from non-management subnetsSend code injection payload
- Authenticated session on management interface
- Knowledge of the code injection vector (no public PoC yet)
- No public PoC reduces the attacker population to advanced groups or internal discoverers
- Threat Prevention IDs 510046/510047 can detect known exploitation patterns if SSL decryption is enabled on management traffic
Achieve root-level execution
root privileges on the underlying PAN-OS Linux OS. This exceeds normal PAN-OS admin capabilities — admin can configure the firewall, but root can modify the OS, install persistent backdoors, intercept packets below PAN-OS application layer, access stored credentials and certificates, and tamper with logging. Recovery from root compromise requires full device reimaging, not just a config restore.- Successful code injection from Step 3
- None — once the injection succeeds, root is immediate
Establish persistence and pivot
- Root shell from Step 4
- Advanced attackers only — requires operational tradecraft to maintain access without detection
- Firmware integrity checks in newer PAN-OS versions may detect some persistence mechanisms
- Data-plane IPS/IDS rules alone — the vulnerability is in the management plane web interface, which does not traverse the data-plane inspection engine unless management traffic is deliberately routed through another firewall's data plane with SSL decryption. Most deployments use the dedicated MGT port, bypassing all data-plane security processing.
- Panorama-level access restrictions without device-level controls — Panorama itself runs PAN-OS and is affected. Locking down Panorama access does not protect the individual managed firewalls, each of which has its own management interface. Both must be secured independently.
- GlobalProtect or VPN-only access to the network — while VPN restricts who can reach the internal network, if the management interface is reachable from any internal subnet (common in flat management networks), a VPN-connected attacker with stolen admin creds can still reach it. OOB VLAN isolation with jump-box enforcement is required, not just VPN.
The supporting signals.
| In-the-Wild Exploitation | Active — very limited. Palo Alto Networks confirms 'very limited exploitation has been observed targeting the management interface.' No named threat actor or campaign attributed yet. Vendor urgency: Red (highest). |
|---|---|
| Proof of Concept | No public PoC. As of 2026-10-15, no exploit code has been published on GitHub, ExploitDB, pocindex.io, or Nuclei templates. No repos named CVE-2026-0322 found on GitHub. The vulnerability was internally discovered, and weaponization appears limited to private actors. |
| EPSS Score | Not yet scored. The FIRST EPSS API returns no data for CVE-2026-0322 as of 2026-10-15 (advisory published 2026-10-14, EPSS typically populates within 1–7 days of NVD ingestion). |
| CISA KEV Status | Not listed. CVE-2026-0322 is not in the CISA Known Exploited Vulnerabilities catalog as of 2026-10-15. Given confirmed active exploitation, KEV addition is likely imminent. |
| CVSS Vector | CVSSv4.0: 8.6 (HIGH) — CVSS:4.0/AV:N/AC:L/AT:N/PR:H/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:A. Key read: network-reachable, low complexity, but high privileges required (PR:H). The E:A (Attacked) modifier confirms active exploitation. No CVSSv3.1 vector published; a v3.1 equivalent with AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H would score 7.2. |
| Affected Versions | PAN-OS 10.2.0–10.2.18-h10, 11.1.0–11.1.16-h2, 11.2.0–11.2.15, 12.1.2–12.1.10-h1, 12.2.0–12.2.3. Affects PA-Series, VM-Series, and Panorama (virtual and M-Series). Cloud NGFW and Prisma Access are not affected. |
| Fixed Versions | 12.2.4, 12.1.10-h2 (also 12.1.7-h8, 12.1.4-h12), 11.2.16 (also 11.2.13-h3, 11.2.10-h15, 11.2.7-h21, 11.2.4-h22), 11.1.16-h3 (also 11.1.13-h15, 11.1.10-h35, 11.1.7-h11, 11.1.6-h39, 11.1.4-h37), 10.2.18-h12 (also 10.2.16-h11, 10.2.13-h26, 10.2.10-h41, 10.2.7-h38). Multiple hotfix trains available per branch. |
| Internet Exposure | Shadowserver tracked ~8,726 IPs with exposed PAN-OS management interfaces (2024 data, declining). Shodan found ~15,429 globally with 11,180 active. Against an estimated 300,000+ PAN-OS deployments worldwide, this is ~3–5% direct internet exposure of the management plane. |
| Disclosure Date | 2026-10-14 — published by Palo Alto Networks. Internally discovered; no prior public disclosure or coordinated disclosure timeline. |
| Reporter | Suraj Siddharudh (Palo Alto Networks internal). No external researcher credit. |
Sources.
- Palo Alto Networks Security Advisory
- SecurityOnline — PAN-OS RCE CVE-2026-0322 Actively Exploited
- CERT-EU Security Advisory 2026-006
- Palo Alto Administrative Access Best Practices
- GreyNoise — Surge in Palo Alto Networks Scanner Activity
- CISA Vulnerability Bulletin Week of Sept 14, 2026
- Shodan PAN-OS Vulnerability Dashboard
Why this verdict
- Network edge appliance role floor: PAN-OS is *canonically* a perimeter firewall — effectively 100% of installs occupy the high-value network edge role. Root compromise on a perimeter firewall enables traffic interception, VPN credential harvesting, security policy tampering, and lateral pivot into every routed segment. Per the deployment-role blast radius rule, the verdict floor is HIGH at minimum.
- Role multiplier: Panorama = fleet-scale blast radius. The advisory explicitly lists Panorama (virtual and M-Series) as affected. Root on a Panorama appliance grants management-plane control over the entire managed firewall fleet — potentially hundreds of devices. On a standalone PA-Series firewall, the blast radius is host → network segments; on Panorama, it's host → fleet → enterprise. This outcome is plausible for any organization running Panorama with the same admin credential surface.
- Active exploitation confirms viability. Palo Alto Networks confirms 'very limited exploitation' in the wild with their highest urgency rating (Red). This eliminates any argument that the PR:H gate makes the bug merely theoretical — adversaries are clearing that hurdle in real campaigns.
- PR:H is genuine friction — holds the verdict at HIGH, not CRITICAL. The attacker must already possess admin-level credentials to the PAN-OS management interface before the code injection is reachable. This is not a low-bar requirement — PAN-OS admin accounts are typically limited to a small team, and environments with SAML/RADIUS + MFA make credential acquisition significantly harder. This prevents mass exploitation and limits the attacker population to advanced, targeted operators.
- No public PoC constrains attacker population further. Without published exploit code, only threat actors with independent vulnerability research capability or access to private exploit markets can weaponize this. This will change if a PoC drops — reassess immediately if one surfaces.
- ~3–5% internet exposure of management plane. Only a fraction of PAN-OS management interfaces are directly internet-reachable. For the remaining ~95%, the attacker needs prior internal network access (post-initial-access position), compounding the prerequisite chain. This is meaningful downward pressure but does not break the HIGH floor because (a) the 3–5% still represents thousands of devices, and (b) internal attackers with admin creds are a real threat model.
Why not higher?
CRITICAL would require either unauthenticated exploitation or a reliable credential-bypass chain that makes PR:H moot. The high-privilege requirement is genuine — the attacker must already possess admin credentials to the firewall management interface, which is among the most tightly controlled credential sets in any enterprise. While admin credentials *do* get compromised, requiring them as a precondition meaningfully narrows the attacker population and prevents wormable or mass-spray exploitation. The absence of a public PoC further constrains the current threat to advanced operators only.
Why not lower?
MEDIUM would catastrophically undercount the blast radius of root access on a perimeter firewall — the single device that sees and controls all north-south traffic. PAN-OS is categorically a high-value network edge appliance; the HIGH floor is binding. Active exploitation, even described as 'very limited,' confirms real-world viability and operator interest. The escalation from admin to OS root is not trivial — it grants capabilities (persistent implants, packet-level interception, log tampering, certificate theft) that admin-level PAN-OS access cannot provide. Panorama exposure amplifies this to fleet-scale impact.
Crowdsourced verification payload.
Run this script from any workstation with network access to the PAN-OS management interface and a valid API key (read-only is sufficient). Invoke with: python3 check_cve_2026_0322.py <firewall_host> <api_key>. No root/admin privileges needed on the workstation — only a PAN-OS API key with operational read access. For fleet-wide checks, loop over your device inventory.
#!/usr/bin/env python3
"""CVE-2026-0322 PAN-OS Version Checker
Checks if a Palo Alto Networks firewall is running a vulnerable PAN-OS version.
Usage: python3 check_cve_2026_0322.py <firewall_host> <api_key>
Exit codes: 0=PATCHED, 1=VULNERABLE, 3=UNKNOWN
"""
import sys
import re
import xml.etree.ElementTree as ET
try:
import requests
requests.packages.urllib3.disable_warnings()
except ImportError:
print("UNKNOWN - 'requests' library required: pip install requests")
sys.exit(3)
# Latest fixed version per branch (conservative check)
FIXED = {
"12.2": (12, 2, 4, 0),
"12.1": (12, 1, 10, 2),
"11.2": (11, 2, 16, 0),
"11.1": (11, 1, 16, 3),
"10.2": (10, 2, 18, 12),
}
def parse_version(v):
"""Parse '11.2.13-h3' into (11, 2, 13, 3) or '11.2.16' into (11, 2, 16, 0)."""
m = re.match(r'^(\d+)\.(\d+)\.(\d+)(?:-h(\d+))?', v)
if not m:
return None
return (int(m.group(1)), int(m.group(2)), int(m.group(3)), int(m.group(4) or 0))
def main():
if len(sys.argv) != 3:
print("Usage: python3 check_cve_2026_0322.py <host> <api_key>")
sys.exit(3)
host, api_key = sys.argv[1], sys.argv[2]
url = f"https://{host}/api/?type=version&key={api_key}"
try:
r = requests.get(url, verify=False, timeout=15)
r.raise_for_status()
except Exception as e:
print(f"UNKNOWN - Connection failed: {e}")
sys.exit(3)
try:
root = ET.fromstring(r.text)
sw_elem = root.find('.//sw-version')
if sw_elem is None or not sw_elem.text:
print("UNKNOWN - No <sw-version> in API response")
sys.exit(3)
running_str = sw_elem.text.strip()
except ET.ParseError:
print("UNKNOWN - Could not parse XML response")
sys.exit(3)
running = parse_version(running_str)
if running is None:
print(f"UNKNOWN - Unrecognized version format: {running_str}")
sys.exit(3)
branch = f"{running[0]}.{running[1]}"
if branch not in FIXED:
branch_num = running[0] * 10 + running[1]
if branch_num < 102: # older than 10.2
print(f"VULNERABLE - PAN-OS {running_str} is EOL, no patch available for CVE-2026-0322")
sys.exit(1)
else:
print(f"UNKNOWN - Branch {branch} not in known affected range")
sys.exit(3)
fixed = FIXED[branch]
if running >= fixed:
print(f"PATCHED - PAN-OS {running_str} >= {fixed[0]}.{fixed[1]}.{fixed[2]}-h{fixed[3] if fixed[3] else '0'}")
sys.exit(0)
else:
print(f"VULNERABLE - PAN-OS {running_str} is below fixed version for branch {branch}")
sys.exit(1)
if __name__ == "__main__":
main()