← Back to Feed CACHED · 2026-10-07 20:49:54 · CACHE_KEY CVE-2026-19490
CVE-2026-19490 · CWE-288 · Disclosed 2026-08-19

Citrix NetScaler ADC and Gateway SAML HTTP-Redirect Binding Authentication Bypass

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

Someone left the vault door hinged backwards so it swings open when you knock from the wrong side

CVE-2026-19490 is an authentication bypass (CWE-288) in Citrix NetScaler ADC and NetScaler Gateway. The flaw lives in nsppe, the packet-processing engine, specifically in its SAML HTTP-Redirect binding handler at /cgi/samlauth. Two bugs combine: (1) the redirect-binding code path passes a zero for the strict-parsing flag while the POST-binding path correctly enables it, and (2) the config word for rejectUnsignedAssertion treats the default value (2) as *permissive*, routing unsigned assertions to acceptance rather than denial. The result is that a single unauthenticated GET request carrying an unsigned, attacker-crafted SAML Response forges a valid session as any user. Affected versions are 14.1 before 14.1-73.32 and 13.1 before 13.1-63.21 (plus FIPS/NDcPP variants). Builds from 14.1-43.56 / 13.1-61.28 onward require a SAML action to be configured; earlier builds are vulnerable with just a Gateway or AAA virtual server configuration.

The vendor rated this CVSS 3.1 9.8 CRITICAL, and for once the label matches reality. This is not defense-in-depth hand-wringing — it is a one-request, zero-auth, zero-interaction bypass on a device that *is* your perimeter. Citrix published no workaround. A public PoC (TarPeg007 on GitHub) dropped 14 days after patch release, and in-the-wild exploitation was observed within 24 hours of the PoC on September 3, 2026. CISA added it to the KEV catalog six days later. Shadowserver and Rapid7 count 22,000+ NetScaler ADC and ~1,700 Gateway instances exposed to the internet. The vendor severity is, if anything, conservative given the deployment context.

"Unauthenticated single-request auth bypass on your VPN edge. Patch yesterday."
02 · The Attack Path

5 steps from start to impact.

STEP 01

Discover internet-facing NetScaler

The attacker scans for NetScaler login pages or /vpn/index.html fingerprints using Shodan, Censys, or FOFA. Over 23,000 instances are internet-reachable. The NetScaler version can sometimes be inferred from response headers or JavaScript build strings on the login page.
Conditions required:
  • Target NetScaler must be reachable on HTTPS from the internet
Where this breaks in practice:
  • None — these appliances are designed to be internet-facing
Detection/coverage: Shodan/Censys/GreyNoise tags exist for NetScaler; external attack surface management tools flag these automatically.
STEP 02

Enumerate SAML endpoint availability

The attacker sends a probe GET to /cgi/samlauth to confirm the SAML redirect binding handler is active. On builds 14.1-43.56+ / 13.1-61.28+, a SAML action must be configured for the endpoint to respond. On older builds, any Gateway or AAA vserver config suffices. The TarPeg007 PoC includes a --check-only mode for this step.
Conditions required:
  • SAML action configured (newer builds) OR Gateway/AAA vserver configured (older builds)
Where this breaks in practice:
  • Enterprises not using SAML SSO on newer firmware are not exploitable via this specific path — but older firmware does not require SAML at all
Detection/coverage: WAF rules or NetScaler AppFW policies logging GET requests to /cgi/samlauth with SAMLResponse query parameters; redirect-binding GETs are uncommon in legitimate flows.
STEP 03

Forge unsigned SAML assertion

The attacker crafts a SAML Response XML containing an unsigned assertion with: Issuer matching the target IdP entity ID, Audience matching the SP entity ID, Recipient/Destination set to the ACS URL, and an arbitrary NameID to impersonate any user — including admin accounts. The XML is deflated and base64-encoded per the HTTP-Redirect binding spec. No cryptographic keys or certificates are needed.
Conditions required:
  • Knowledge of IdP and SP entity IDs (often guessable or discoverable from SAML metadata endpoints)
Where this breaks in practice:
  • Entity ID values may require reconnaissance, but SAML metadata is frequently exposed at well-known paths
Detection/coverage: Deep packet inspection on the /cgi/samlauth GET looking for deflated payloads without XML signatures. IDS signatures for unsigned SAML assertions in the query string.
STEP 04

Send bypass request and obtain session

A single GET to /cgi/samlauth?SAMLResponse=<payload>&RelayState=<ctx> triggers the vulnerable code path. The nsppe engine parses the assertion with strict=0, accepts the unsigned payload because the default rejectUnsignedAssertion config word routes to acceptance, and mints an authenticated session cookie. The attacker is now logged in as the forged identity.
Conditions required:
  • Network path to the target on port 443
Where this breaks in practice:
  • Literally none — this is a single HTTP GET
Detection/coverage: Monitor for session creation events without corresponding legitimate IdP-side authentication. Correlate AAA logs for sessions originating from the redirect binding path. The TarPeg007 PoC --safe-oracle mode uses deliberately malformed assertions to detect without creating sessions.
STEP 05

Post-authentication pivot

With a valid VPN session (especially as an admin), the attacker gains access to the internal network via SSL VPN, ICA Proxy, or RDP Proxy — whatever the Gateway is configured to broker. Admin-level access also enables configuration changes, certificate extraction, and persistence via crontab or nsppe hooks. Historical NetScaler compromises have led to credential harvesting, lateral movement, and ransomware deployment.
Conditions required:
  • Forged identity has VPN or admin privileges
Where this breaks in practice:
  • MFA on the backend resources may limit lateral movement, but the NetScaler session itself is already forged past authentication
Detection/coverage: SIEM correlation of VPN session source IPs against threat intel feeds. Anomalous admin session creation from unexpected geolocations. File integrity monitoring on NetScaler filesystem for persistence artifacts.
03 · Compensating Control

1
CRITICAL 9.8→IGNORE 0.0
SEVERITY REDUCED
Patch to fixed firmware immediately — Upgrade to 14.1-73.32+ or 13.1-63.21+ (13.1-37.277+ for FIPS/NDcPP). This is the only complete fix. Given CRITICAL verdict and active exploitation, deploy within 3 days per the noisgate mitigation SLA — and given KEV status, treat as *hours not days*. Schedule maintenance windows now. Test in a lab pair first if you have one; if not, the risk of unpatched exposure exceeds the risk of a bad upgrade.
2
CRITICAL 9.8→MEDIUM 4.5
SEVERITY REDUCED
Set rejectUnsignedAssertion to STRICT — Run set samlAction <name> -samlRejectUnsignedAssertion STRICT on each SAML action. This forces the engine to reject unsigned assertions even on the redirect-binding path, breaking the exploit chain. Deploy within hours as a bridge to patching. Caveat: this may break IdP integrations that send unsigned assertions (uncommon but possible). Test against your IdP before broad rollout.
3
CRITICAL 9.8→HIGH 7.5
SEVERITY REDUCED
Block GET requests to /cgi/samlauth at WAF or upstream proxy — If you have a WAF, CDN, or reverse proxy in front of NetScaler (uncommon but possible in layered architectures), block or rate-limit GET requests to /cgi/samlauth containing a SAMLResponse query parameter. Legitimate SAML flows almost exclusively use POST binding. This is a stopgap; do not rely on it as a substitute for patching.
4
CRITICAL 9.8→MEDIUM 5.0
SEVERITY REDUCED
Restrict NetScaler management and VPN to known IP ranges — Apply ACLs or NetScaler responder policies to limit access to the SAML endpoint to known IdP source IPs only. This dramatically shrinks the attack surface from the entire internet to a handful of addresses. Not always feasible for VPN gateways serving roaming users, but effective for AAA vservers with a fixed IdP.
5
CRITICAL 9.8→CRITICAL 9.8
Forensic triage for pre-patch compromise — Per CISA guidance, after patching, review: (1) AAA and ns.log for sessions created via GET to /cgi/samlauth, (2) admin account session creation from unexpected sources, (3) configuration changes or new admin accounts, (4) crontab and nsppe filesystem modifications, (5) outbound connections to unusual destinations. If any indicators are found, treat as confirmed breach and invoke IR.
What doesn't work
  • MFA on NetScaler Gateway login — the bypass forges a session *after* the SAML authentication step; MFA configured on the NetScaler login page is never reached because the attacker enters through the SAML callback endpoint, not the login form.
  • NetScaler AppFW (Web App Firewall) — AppFW policies inspect traffic to backend servers, not to NetScaler's own management/authentication endpoints like /cgi/samlauth.
  • Network segmentation behind NetScaler — segmentation limits post-compromise lateral movement but does nothing to prevent the initial authentication bypass on the appliance itself.
  • Certificate pinning on SAML assertions — the vulnerability is that the unsigned-assertion rejection logic is inverted; the system never reaches the certificate validation step because it accepts the assertion as unsigned-but-allowed.
04 · Intelligence Metadata

The supporting signals.

In-the-Wild ExploitationConfirmed active since 2026-09-03. Previdian sensors detected exploit traffic from IPs in AU, US, and DE within 24 hours of PoC publication. CISA added to KEV catalog on 2026-09-09.
Proof of ConceptPublic and weaponized. TarPeg007/CVE-2026-19490 on GitHub provides poc.py with --check-only, --safe-oracle, and --mint (full exploit) modes. Root-cause analysis by TarPeg007; original report credited to Samarth Vashisht (JPMorgan Chase). Also indexed in SecureWithUmer/CVE-2026-PoCs.
EPSS Score0.2316 (top ~2% of all CVEs). This places it well above the threshold where most exploit-prediction models flag for priority action.
KEV StatusListed. Added 2026-09-09. Ransomware use: *Unknown* per CISA. Federal remediation deadline set per BOD 22-01.
CVSS VectorCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H — 9.8 CRITICAL. Network-accessible, low complexity, no privileges, no interaction. Full CIA impact. CVSS v4.0 score is 9.3.
Affected VersionsNetScaler ADC and Gateway 14.1 before 14.1-73.32, 13.1 before 13.1-63.21. FIPS: 14.1 before 14.1-73.32, 13.1 before 13.1-37.277. NDcPP: 13.1 before 13.1-37.277. Older builds (pre-14.1-43.56 / 13.1-61.28) exploitable without SAML; newer builds require SAML action configured.
Fixed Versions14.1-73.32, 13.1-63.21, 13.1-37.277 (FIPS/NDcPP). No backport to 12.x or earlier (EOL). Citrix bulletin: CTX696939.
Internet ExposureRapid7/Shadowserver report >22,000 NetScaler ADC and ~1,700 Gateway instances directly internet-reachable. This is the vulnerable surface — the total installed base is significantly larger behind firewalls.
Disclosure Timeline2026-08-19: Citrix advisory + patch. 2026-09-02: Public PoC (TarPeg007). 2026-09-03: ITW exploitation observed. 2026-09-09: CISA KEV listing. 15-day patch-to-exploit window.
Reporting ResearcherSamarth Vashisht (JPMorgan Chase pen-test team). Root-cause analysis and PoC by TarPeg007.

Sources.

  1. Citrix Security Bulletin CTX696939
  2. CISA KEV Catalog — CVE-2026-19490 Added September 2026
  3. TarPeg007 PoC and Root-Cause Analysis
  4. Horizon3.ai Vulnerability Analysis
  5. BleepingComputer — Critical Citrix NetScaler Auth Bypass in Attacks
  6. Tech Insider — 22,000 Exposed NetScaler Instances
  7. Vijilan — CVE-2026-19490 Forensic Triage Guidance
  8. The Hacker News — Critical NetScaler Flaw
05 · The Call

Final Verdict
= UNCHANGED to CRITICAL (9.8/10)

Why this verdict

  • Zero-friction attack chain: The entire exploit is a single unauthenticated GET request to a known endpoint. No credentials, no user interaction, no race conditions, no memory corruption — pure logic bug. There is no complexity discount to apply.
  • Public weaponized PoC + active exploitation: TarPeg007's PoC has been public since September 2 and exploitation was observed within 24 hours. The 15-day patch-to-exploit window is closed; this is in active campaigns *now*.
  • KEV-listed with EPSS in top 2%: CISA KEV listing on 2026-09-09 confirms government-verified exploitation. EPSS 0.2316 independently corroborates high exploitation probability.
  • Role multiplier: NetScaler ADC and Gateway are canonically network-edge appliances — 100% of installs occupy the high-value perimeter role by definition. These devices ARE the VPN concentrator, the SSL offloader, the authentication gateway. A successful bypass grants the attacker an authenticated session inside the enterprise network, equivalent to a VPN credential. Blast radius is network-scale to fleet-scale: the attacker bypasses the perimeter and lands inside with whatever access the forged identity carries. On admin sessions, the blast radius extends to full appliance control, certificate extraction, and persistent backdoor installation. Historical NetScaler compromises (CitrixBleed / CVE-2023-4966) led directly to ransomware deployments. The verdict floor is CRITICAL because the affected component is a canonical high-value network-edge device.
  • Massive exposed surface: 23,000+ internet-facing instances per Shadowserver/Rapid7. No firewall or NAT hides these — they are purpose-built to be internet-reachable.
  • No vendor workaround: Citrix published no workaround. The partial mitigation (set samlAction -samlRejectUnsignedAssertion STRICT) was community-discovered and may break legitimate SAML flows.

Why not higher?

This is already at the CVSS ceiling of 9.8. The only vector that could theoretically push higher would be Scope change (S:C), but the bypass is contained to the NetScaler session context — downstream impact depends on the network the Gateway brokers into. The score cannot meaningfully exceed 9.8 under CVSS 3.1.

Why not lower?

Downgrading would require meaningful friction in the attack chain, and there is none. The SAML-configuration prerequisite on newer builds is the only narrowing factor, but older builds do not require it at all, and SAML SSO is extremely common in enterprises deploying NetScaler Gateway. The 23,000+ internet-exposed instances, public weaponized PoC, confirmed ITW exploitation, and KEV listing collectively eliminate any basis for downgrade. The canonical perimeter-device role sets a CRITICAL floor that no friction argument can breach.

06 · Verification

Crowdsourced verification payload.

Run this from any Linux/macOS auditor workstation with curl and openssl installed. Usage: bash check_cve_2026_19490.sh <target_hostname_or_ip>. No special privileges required — it only sends safe, non-exploitative HTTP requests to the target's public HTTPS port.

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/usr/bin/env bash
# check_cve_2026_19490.sh — CVE-2026-19490 NetScaler SAML auth bypass detector
# Safe check: version fingerprint + SAML endpoint probe (no exploitation)
# Exit codes: 0=VULNERABLE, 1=PATCHED, 2=UNKNOWN

set -euo pipefail

TARGET="${1:?Usage: $0 <target_hostname_or_ip>}"
BASE="https://${TARGET}"
RESULT="UNKNOWN"

echo "[*] CVE-2026-19490 checker for NetScaler ADC/Gateway"
echo "[*] Target: ${TARGET}"
echo ""

# Step 1: Grab version from login page JavaScript
echo "[*] Step 1: Attempting version fingerprint..."
VER_RAW=$(curl -sk --max-time 10 "${BASE}/vpn/index.html" 2>/dev/null || true)

if [ -z "$VER_RAW" ]; then
  echo "[-] Could not reach ${BASE}/vpn/index.html"
  echo "UNKNOWN — target unreachable or not a NetScaler"
  exit 2
fi

# Try to extract build string
BUILD=$(echo "$VER_RAW" | grep -oP '(13\.1|14\.1)-[0-9]+\.[0-9]+' | head -1 || true)

if [ -n "$BUILD" ]; then
  echo "[+] Detected build: ${BUILD}"
  MAJOR=$(echo "$BUILD" | cut -d'-' -f1)
  MINOR=$(echo "$BUILD" | cut -d'-' -f2 | cut -d'.' -f1)
  PATCH=$(echo "$BUILD" | cut -d'.' -f2)

  if [ "$MAJOR" = "14.1" ]; then
    # Fixed at 14.1-73.32
    if [ "$MINOR" -gt 73 ] || ([ "$MINOR" -eq 73 ] && [ "$PATCH" -ge 32 ]); then
      echo "[+] Build ${BUILD} >= 14.1-73.32 — PATCHED"
      RESULT="PATCHED"
    else
      echo "[!] Build ${BUILD} < 14.1-73.32 — VULNERABLE"
      RESULT="VULNERABLE"
    fi
  elif [ "$MAJOR" = "13.1" ]; then
    # Fixed at 13.1-63.21
    if [ "$MINOR" -gt 63 ] || ([ "$MINOR" -eq 63 ] && [ "$PATCH" -ge 21 ]); then
      echo "[+] Build ${BUILD} >= 13.1-63.21 — PATCHED"
      RESULT="PATCHED"
    else
      echo "[!] Build ${BUILD} < 13.1-63.21 — VULNERABLE"
      RESULT="VULNERABLE"
    fi
  else
    echo "[?] Unrecognized major version: ${MAJOR}"
    RESULT="UNKNOWN"
  fi
else
  echo "[-] Could not extract build string from login page."
fi

# Step 2: Probe SAML redirect endpoint
echo ""
echo "[*] Step 2: Probing SAML redirect-binding endpoint..."
SAML_RESP=$(curl -sk --max-time 10 -o /dev/null -w "%{http_code}" "${BASE}/cgi/samlauth" 2>/dev/null || echo "000")
echo "[*] /cgi/samlauth returned HTTP ${SAML_RESP}"

if [ "$SAML_RESP" = "200" ] || [ "$SAML_RESP" = "302" ] || [ "$SAML_RESP" = "400" ]; then
  echo "[!] SAML endpoint is active — exploitable path exists"
  if [ "$RESULT" = "VULNERABLE" ]; then
    echo "[!!!] CONFIRMED: Version vulnerable AND SAML endpoint reachable"
  fi
elif [ "$SAML_RESP" = "403" ] || [ "$SAML_RESP" = "404" ]; then
  echo "[+] SAML endpoint not active (HTTP ${SAML_RESP}) — exploit path may not be reachable"
  if [ "$RESULT" = "VULNERABLE" ]; then
    echo "[*] Version is vulnerable but SAML endpoint not exposed — check SAML config"
  fi
else
  echo "[?] Unexpected response from SAML endpoint"
fi

echo ""
echo "========================================"
echo "RESULT: ${RESULT}"
echo "========================================"

case "$RESULT" in
  VULNERABLE) exit 0 ;;
  PATCHED)    exit 1 ;;
  *)          exit 2 ;;
esac