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

Multiple buffer overflow vulnerabilities in the User-ID Terminal Server Agent

ASSESSED — NOISGATE V0.5
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 · 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
04 · The Call

noisgate verdict.

Final Verdict
= UNCHANGED to HIGH (7.8/10)

The single decisive factor is role multiplier: TSA is a component of a network-edge identity/policy device, so a successful chain compromises firewall integrity and identity-aware policy for every user it protects. Even though the reachable population is narrow (TSA is an internal service), the blast radius of a compromised PAN-OS data plane keeps this firmly in the HIGH bucket rather than MEDIUM.

HIGH affected-version and fix accuracy from vendor advisory
MEDIUM practical exploitability (DoS is easy; RCE is aspirational without public PoC)
HIGH low external exposure — TSA should not be internet-reachable

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.

05 · Compensating Control

What to do — in priority order.

  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.
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
07 · Bottom Line

If you remember one thing.

TL;DR
Monday morning: (1) run the Panorama export to identify every firewall with a TSA entry — everything else is out of scope; (2) verify TSA listener source-IP restrictions actually match the Terminal-Server host list, and if the port is reachable from any untrusted zone, treat as active exposure and firewall it off within hours (KEV-tier urgency despite no KEV listing, because internet-exposed TSA is the vendor's own 9.2 case). Beyond that, this is a HIGH and follows the noisgate mitigation SLA — deploy the source-IP allowlist within 30 days — and the noisgate remediation SLA — upgrade to 12.1.8 / 11.2.13 / 11.1.16 / 10.2.7-h36 within 180 days, aligned to your normal PAN-OS maintenance cadence. No public PoC and EPSS 0.005 means there's no cause to blow up your change window this week for correctly-segmented deployments.

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
Peer Review

What defenders are saying.

Submit a review attribution: handle + country only
0 flags selected · stored anonymously
Validation Results

Crowdsourced verification outputs.

Results submitted by users who ran the verification payload against their environment.