← Back to Feed CACHED · 2026-07-09 14:09:05 · CACHE_KEY CVE-2026-0288
CVE-2026-0288 · CWE-787 · Disclosed 2026-07-08

PAN-OS User-ID Terminal Server Agent (TSA) unauthenticated buffer overflow (multiple)

ASSESSED — NOISGATE
Vendor
—
—
—
Reassessed
—
—
—
Verdict: —
Do you agree?
01 · The Real Story

A memory-corruption bug in the plumbing that tells your firewall which Citrix user is which

The User-ID Terminal Server Agent (TSA) is the PAN-OS component that maps source-port ranges to individual users on multi-user Windows/Citrix hosts so firewall policies can be identity-aware. It listens on a TCP port that agents connect to, and multiple out-of-bounds writes (CWE-787) in that listener let an unauthenticated attacker with network reach send crafted traffic that corrupts memory — either crashing the daemon (DoS) or, less reliably, achieving arbitrary code execution in the TSA process context. Affected: PAN-OS 12.1 < 12.1.8 (and h-lines 12.1.4-h8, 12.1.7-h2), 11.2 < 11.2.13 (h-lines 11.2.4-h20, 11.2.7-h18, 11.2.10-h12), 11.1 < 11.1.16, and 10.2 < 10.2.7-h36 plus Prisma Access equivalents. Panorama and any firewall with no TSA entry configured under Device > User Identification > Terminal Server Agents is unaffected.

Palo Alto's CVSS:4.0 base of 7.2 HIGH is defensible but bakes in the assumption you followed their deployment guidance. Where operators exposed the TSA listener to untrusted networks — a real, observed misconfiguration — the vendor's own CVSS-B climbs to 9.2. There is no NVD/CVSS 3.1 vector, so this is a first-pass assessment: we land at HIGH (7.8) because unauth pre-auth memory corruption on a network-edge product with fleet-scale blast radius easily clears the HIGH floor, even after discounting for the fact that most TSA installs are correctly segmented.

"Unauth RCE on a PAN-OS component that's supposed to be internal-only — the moment you exposed TSA to the internet, you own the consequences."
02 · The Attack Path

4 steps from start to impact.

STEP 01

Discover a firewall with TSA configured

The attacker enumerates PAN-OS devices with the TSA listener reachable. Externally that's a Shodan/Censys sweep for PAN-OS management/data-plane fingerprints combined with the TSA port; internally it's a nmap -sS across the firewall inside interface. Panorama and firewalls with an empty TSA list are not in scope.
Conditions required:
  • Network path to a PAN-OS device with a configured TSA entry
  • PAN-OS version in the affected range
Where this breaks in practice:
  • TSA is designed for internal-only reach — most enterprises restrict it to the Citrix/TS server subnets
  • Panorama and TSA-less firewalls are excluded entirely
Detection/coverage: Shodan/Censys queries for product:PAN-OS plus custom port; internal asset inventories via Panorama config export.
STEP 02

Send crafted TSA traffic to the listener

Using a hand-rolled Python scapy/socket PoC (no public exploit at time of assessment), the attacker sends malformed TSA protocol frames that overflow a heap or stack buffer during parsing (CWE-787 out-of-bounds write). At minimum this crashes the daemon and drops User-ID mappings across the firewall.
Conditions required:
  • TCP reach to the TSA listener port
  • Ability to speak or malform the TSA wire protocol
Where this breaks in practice:
  • No public PoC yet — attackers must reverse the TSA protocol themselves
  • ASLR, stack canaries, and NX in modern PAN-OS complicate reliable code exec — DoS is the practical outcome for most attackers
Detection/coverage: Threat prevention signatures from Palo Alto will backfill; NGFW telemetry can flag anomalous inbound to the TSA port.
STEP 03

Escalate DoS to code execution (aspirational)

A skilled attacker who wins the memory-corruption lottery gets code execution in the TSA daemon context on the firewall data plane. From that foothold: pivot into the management plane, tamper with User-ID policy decisions, or use the firewall as an internal-network beachhead. This step is unproven publicly; the vendor's language is 'potentially execute arbitrary code.'
Conditions required:
  • Reliable heap/stack layout knowledge for the specific PAN-OS build
  • Bypass of PAN-OS binary hardening
Where this breaks in practice:
  • Per-build offsets differ across PAN-OS trains
  • No exploit toolkit exists as of 2026-07-09
Detection/coverage: EDR does not run on PAN-OS; rely on PAN-OS system logs, unexpected daemon restarts, and Panorama alerting on User-ID agent connectivity drops.
STEP 04

Abuse identity mapping to weaken policy

With TSA compromised — or even just crashed — User-ID-based firewall rules degrade to their fallback (often any or unknown-user). An attacker inside the network can now traverse zones that identity-gated rules would have blocked, or impersonate a privileged user in User-ID mappings if code execution succeeded.
Conditions required:
  • User-ID-based security policy in use
  • TSA disruption sustained long enough to shift traffic
Where this breaks in practice:
  • Well-designed policy has deny-by-default fallbacks for unknown-user
  • Panorama alerts on User-ID agent disconnects
Detection/coverage: Panorama User-ID agent status dashboard; SIEM alerts on unknown-user traffic spikes.
03 · Compensating Control

1
Restrict TSA listener to Terminal Server / Citrix host IPs only — Add explicit source-IP allowlists on the firewall management/data-plane interface hosting the TSA port so only the TSA-installed Windows hosts can connect. Per noisgate mitigation SLA for HIGH, deploy this within 30 days — but if your TSA port is externally reachable today, treat it as CRITICAL exposure and lock it down within hours.
2
Audit Panorama for firewalls with TSA entries — Export the User-ID > Terminal Server Agents list from every managed firewall. Any firewall with zero entries is not vulnerable and can be deprioritized — this narrows the patch scope drastically. Complete within 7 days.
3
Monitor for TSA daemon restarts and User-ID agent disconnects — Wire Panorama and SIEM alerts on User-ID agent state transitions and unexpected data-plane process restarts; DoS is the most likely exploit outcome and shows up as identity policy degradation.
4
Upgrade to fixed PAN-OS trains — Schedule maintenance windows to move to 12.1.8 / 11.2.13 / 11.1.16 / 10.2.7-h36 (or the corresponding hotfix line closest to your current build) within the noisgate remediation SLA of 180 days for HIGH.
What doesn't work
  • Threat Prevention signatures alone — Palo Alto will publish App-ID / Threat sigs, but they only fire on inbound traffic to the firewall itself; if your TSA port is exposed to hostile subnets you cannot rely on the vulnerable device to protect itself.
  • Turning off User-ID at the policy level — the TSA listener still binds if a TSA entry exists. You must remove the TSA entry or upgrade.
  • WAF or upstream firewall — TSA speaks a proprietary binary protocol on a non-HTTP port; WAFs are irrelevant.
04 · Intelligence Metadata

The supporting signals.

In-the-wild exploitationNone observed. Palo Alto: *not aware of any malicious exploitation*
KEV listedNo
EPSS0.00524 (~0.5% — very low near-term exploit probability)
Public PoCNone public as of 2026-07-09. Discovered by researcher Liang Zhu and reported to Palo Alto
CVSS vector (vendor)CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:L/SI:L/SA:L — 7.2 HIGH base, 9.2 when TSA is internet-exposed
CWECWE-787 Out-of-bounds Write
AffectedPAN-OS 12.1, 11.2, 11.1, 10.2 and Prisma Access — only when a TSA entry is configured. Panorama unaffected
Fixed versions12.1.8, 11.2.13, 11.1.16, 10.2.7-h36, plus hotfix lines 12.1.4-h8 / 12.1.7-h2 / 11.2.4-h20 / 11.2.7-h18 / 11.2.10-h12; Prisma Access 11.2.7-h18 / 10.2.10-h39
Exposure telemetryTSA is not a standard internet-exposed service; Shodan/Censys show negligible external TSA listeners. Most risk is internal-network reachability
Disclosed2026-07-08 by Palo Alto PSIRT

Sources.

  1. Palo Alto PSIRT — CVE-2026-0288 advisory
  2. Canadian Centre for Cyber Security AV26-674
  3. CyberPress coverage
  4. Cybersecurity News writeup
  5. Tenable CVE record
  6. NVD CVE-2026-0288
  7. Feedly CVE tracker
  8. OpenCVE record
05 · The Call

Final Verdict
= UNCHANGED to HIGH (7.8/10)

Why this verdict

  • Unauth + network + memory-corruption on a network-security appliance clears the HIGH threshold on its own; there is no auth or user-interaction gate.
  • Role multiplier — canonical network edge: PAN-OS firewalls are network-edge / policy-enforcement devices. TSA compromise degrades User-ID enforcement fleet-wide behind the firewall and, if RCE lands, delivers a data-plane foothold on the perimeter. Floor is HIGH.
  • Friction — exposure narrowness: TSA is architected for internal-only reach; correctly configured deployments never expose the listener externally. This holds the verdict at HIGH rather than pushing to CRITICAL.
  • Friction — RCE reliability: No public PoC, PAN-OS binary hardening (ASLR/NX/canaries), and the wording 'potentially execute arbitrary code' means DoS is the reliable outcome and RCE is a research problem. EPSS 0.00524 aligns.
  • Not KEV, no in-the-wild use — removes the immediate-patch pressure that would push to CRITICAL.

Why not higher?

CRITICAL would require broad external reachability, active exploitation, or a reliable public RCE. TSA is a segmented internal service, EPSS is 0.005, no PoC exists, and PA has seen no exploitation. All three CRITICAL prerequisites fail.

Why not lower?

MEDIUM would ignore that this is unauthenticated memory corruption on a network-edge security device. The role multiplier alone floors this at HIGH regardless of how few installs expose TSA — if the chain lands, the firewall itself is impacted, which is fleet-scale for every user behind it.

06 · Verification

Crowdsourced verification payload.

Run on an auditor workstation with API access to Panorama or each firewall. Requires a PAN-OS API key with read on config and op. Invoke as ./check-cve-2026-0288.sh <firewall-host> <api-key>. Outputs VULNERABLE / PATCHED / UNKNOWN based on PAN-OS version AND whether any TSA entry is configured.

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/usr/bin/env bash
# noisgate check for CVE-2026-0288 (PAN-OS TSA buffer overflow)
# Usage: ./check-cve-2026-0288.sh <fw-host> <api-key>
set -u
HOST="${1:-}"
KEY="${2:-}"
if [[ -z "$HOST" || -z "$KEY" ]]; then
  echo "usage: $0 <fw-host> <api-key>" >&2
  exit 2
fi

CURL=(curl -sk --max-time 20)

# 1. Pull PAN-OS software version
VER_XML=$("${CURL[@]}" "https://$HOST/api/?type=op&cmd=<show><system><info></info></system></show>&key=$KEY")
VER=$(printf '%s' "$VER_XML" | sed -n 's:.*<sw-version>\([^<]*\)</sw-version>.*:\1:p')
if [[ -z "$VER" ]]; then
  echo "UNKNOWN: could not read PAN-OS version from $HOST"
  exit 3
fi

# 2. Check for any configured TSA entry
TSA_XML=$("${CURL[@]}" "https://$HOST/api/?type=config&action=get&xpath=/config/devices/entry/vsys/entry/user-id-agent&key=$KEY")
TSA_COUNT=$(printf '%s' "$TSA_XML" | grep -c '<entry name=' || true)

# 3. Version comparison (major.minor.patch[-hN])
vuln_ver() {
  local v="$1"
  case "$v" in
    10.2.*) awk -v v="$v" 'BEGIN{split(v,a,"."); split(a[3],b,"-h"); p=b[1]+0; h=(b[2]==""?0:b[2]+0); if(p<7||(p==7&&h<36)) exit 0; exit 1}" && echo yes ;;
    11.1.*) awk -v v="$v" 'BEGIN{split(v,a,"."); p=a[3]+0; if(p<16) exit 0; exit 1}' && echo yes ;;
    11.2.*) awk -v v="$v" 'BEGIN{split(v,a,"."); split(a[3],b,"-h"); p=b[1]+0; h=(b[2]==""?0:b[2]+0); if((p<4)||(p==4&&h<20)||(p>4&&p<7)||(p==7&&h<18)||(p>7&&p<10)||(p==10&&h<12)||(p>10&&p<13)) exit 0; exit 1}' && echo yes ;;
    12.1.*) awk -v v="$v" 'BEGIN{split(v,a,"."); split(a[3],b,"-h"); p=b[1]+0; h=(b[2]==""?0:b[2]+0); if((p<4)||(p==4&&h<8)||(p>4&&p<7)||(p==7&&h<2)||(p>7&&p<8)) exit 0; exit 1}' && echo yes ;;
    *) echo unknown ;;
  esac
}

RESULT=$(vuln_ver "$VER")

if [[ "$RESULT" == "unknown" ]]; then
  echo "UNKNOWN: version $VER not in affected trains — verify manually"
  exit 3
fi

if [[ "$RESULT" == "yes" && "$TSA_COUNT" -gt 0 ]]; then
  echo "VULNERABLE: PAN-OS $VER with $TSA_COUNT TSA entry(ies) configured"
  exit 1
fi

if [[ "$TSA_COUNT" -eq 0 ]]; then
  echo "PATCHED: no TSA entries configured — not exposed regardless of version ($VER)"
  exit 0
fi

echo "PATCHED: PAN-OS $VER is on a fixed train ($TSA_COUNT TSA entries present)"
exit 0