Citrix NetScaler Authentication Bypass

CVE-2026-19490 · CWE-288 Authentication Bypass Using an Alternate Path · CVSS v4.0 9.3 Critical
Threat
CVE-2026-19490
Severity
EXPLOITED ITW · CISA KEV
Type
Auth Bypass / Edge Appliance
Access
Unauthenticated, Network
Version
v0.1 (Draft)
Author
HuntPack
Confidence
High (mechanism/exploitation) · Medium (telemetry) · Low (webshell IOC — unconfirmed)
01

Executive Summary

CVE-2026-19490 lets an unauthenticated remote attacker mint an anonymous, cryptographically-valid NetScaler session on any Gateway (SSL VPN / ICA Proxy / CVPN / RDP Proxy) or AAA virtual server that has SAML configured (or, on older builds, any Gateway/AAA vserver regardless of SAML). The bug is a single-instruction defect in NetScaler's SAML RelayState deserialization path: the decoded length of an attacker-controlled blob is carried forward as an internal error code and used to select which internal code branch runs next. The attacker's objective is straightforward — reach that anonymous "post-login" branch, then ride the appliance's own trust position. On a Gateway virtual server this yields a real NSC_AAAC session cookie that becomes an HTTP(S) proxy into the internal network through the clientless VPN path; if the global -defaultAuthorizationAction is left at the (non-default-in-practice) ALLOW setting, that proxy reaches internal web apps, other appliances' management interfaces, and the appliance's own NITRO configuration API — and default/reused management credentials turn that into root on the box via a one-line crontab addition.

The single highest-value defensive angle is also the simplest: patch to 14.1-73.32 / 13.1-63.21 (or the FIPS/NDcPP equivalents) immediately — there is no vendor-published workaround, and CISA added this vulnerability to the KEV catalog on 2026-09-09 with a 2026-09-12 remediation due date. Where immediate patching is impossible, set set vpn parameter -defaultAuthorizationAction DENY to bound the SSRF blast radius, and treat every SAML-configured Gateway/AAA vserver as internet-reachable and in scope for emergency hardening regardless of network diagram assumptions. This CVE is unrelated in root cause to the previously-published CVE-2026-8451 and CVE-2026-8452 NetScaler packs in this library — do not conflate scope or reuse those queries as coverage for this bug.

Defender priority: PATCH NOW. Exploitation has been observed in the wild since at least 2026-09-03 (one day after public PoC release) and CISA KEV lists a due date of 2026-09-12 — if this pack is being read after that date, treat every affected appliance as a suspected-compromise candidate requiring forensic triage per CISA's Forensics Triage Requirements guidance, not just a patch target.
02

Source Review & Web Hunter Notes

Eight sources were fetched directly (live pages, not search-engine summaries) and saved as verbatim plain-text snapshots in Citrix-NetScaler-CVE-2026-19490-Hunt-sources/. A ninth, higher-profile claim repeated across multiple secondary aggregator summaries — a PHP webshell at /var/vpn/theme/x.php and /var/vpn/theme/z.php — could not be corroborated in any of the eight fetched sources and is carried in this pack strictly as an unconfirmed/reported indicator (see Section 4).

#SourceTierTypeContributedAccess Date
1Citrix Security Bulletin CTX696939T1Vendor primaryCVSS, CWE, affected/fixed versions, precondition strings, acknowledgment2026-09-13
2Rapid7 ETR BlogT1Vendor/researcher primaryDisclosure timeline, KEV cross-reference, precondition strings2026-09-13
3CISA KEV Catalog Alert (2026-09-09)T1Government primaryKEV addition date, BOD 26-04 applicability2026-09-13
4NVD CVE-2026-19490T1Government primaryCVSS vector, CWE, CPE ranges, KEV due date (2026-09-12)2026-09-13
5CCB Belgium AdvisoryT1Government CSIRT primaryVersion-specific SAML precondition table, exploitation timeline confirmation2026-09-13
6Previdian Vulnerability IntelligenceT3Commercial sensor telemetry (cited by CCB)Exploitation telemetry: 56 attempts / 12 IPs / 6 countries, PoC repo reference2026-09-13
7Bishop Fox Technical AnalysisT3Researcher technical writeupRoot-cause mechanism, impact decision tree, safe detection method, log/behavioral signatures2026-09-13
8Security Arsenal Detection GuideT3Researcher/vendor blogGeneric webshell-directory Sigma pattern, triage script, hardening checklist2026-09-13

Decisions & cross-reference notes

  • Exploitation telemetry conflict: an earlier working assumption cited "~10 exploitation attempts from 6 unique source IPs across Australia, Germany, Japan, and the US" attributed to Rapid7. The live Rapid7 ETR post (source #2) contains no attempt counts, IP counts, or geography at all. The verified figures shipped in this pack — 56 attempts, 12 unique attacker IPs, 6 countries (AU/DE/JP/RO/TW/US), 2026-09-03 to 2026-09-09 — come from Previdian (source #6), which is independently referenced by name in the CCB Belgium government advisory (source #5), raising confidence from low to medium.
  • Webshell path/filenames — UNCONFIRMED: a claim of PHP webshells at /var/vpn/theme/x.php and /var/vpn/theme/z.php recurs across search-engine-generated summaries, but none of the eight sources actually fetched (including the CCB advisory and Bishop Fox's deep technical writeup, neither of which mentions any webshell at all) contain that path or those filenames. Security Arsenal (source #8) gives only generic guidance to check /netscaler/ns_gui/, /var/vpn/, and /netscaler/portal/ for any .php/.pl/.py/.sh file — a general edge-appliance persistence pattern, not a citation of this specific path. This indicator ships in Section 4 and Section 10 labeled UNCONFIRMED, not as a verified atomic IOC.
  • Companion CVE-2026-19489: patched in the same bulletin (CTX696939) — a memory-overflow DoS requiring SIP ALG enabled on an LSN group. No evidence found of in-the-wild exploitation of -19489; mentioned here for completeness only. Hunt focus stays on -19490's confirmed exploitation per scope.
  • Related-but-distinct packs: CVE-2026-8451 and CVE-2026-8452 are separate, previously-published NetScaler CVEs in this library with different root causes (pre-auth RCE class per watchTowr's public research, not this SAML/RelayState auth-bypass). No IOC or query overlap was found or assumed between them and this pack.
03

Hunt Brief & Attack Chain

HYPOTHESIS: If CVE-2026-19490 is being exploited against our NetScaler Gateway/AAA infrastructure, we should see POST requests to /cgi/samlauth with anomalous RelayState lengths, anonymous SSL VPN clientless-mode login log lines with no corresponding real authentication event, and — if the internal proxy path was reached — inbound connections from the NetScaler's own IP address to internal management interfaces that it has no legitimate reason to contact.

StepAttacker ActionAppliance/Network BehaviorPrecondition
1Recon / config-precondition checkProbe for SAML action + Gateway/AAA vserver presenceNone — externally observable via /cgi/samlauth response
2Send crafted SAML POST, RelayState = base64(ctx= + N junk bytes)Appliance dispatches on decoded length NSAML action configured (newer builds) or any Gateway/AAA vserver (older builds)
3aN = 18 or 21Packet engine crashes/restarts (~45s outage); 3 crashes in ~90s can force a full rebootAny vulnerable, reachable vserver
3bN = 11 or 16Anonymous session created ("created session for anonymous")Same as above
4Session type checkAAA vserver → dead-end anonymous session (no cookie). Gateway vserver → real NSC_AAAC cookie, SSL VPN login logged for user "anonymous" in clientless mode, redirect to /cgi/setclient?cvpnGateway (vpn vserver) required for step 5+
5Drive session as HTTP(S) proxyClientless VPN path proxies requests into the internal network-defaultAuthorizationAction = ALLOW (session skips per-vserver policy)
6Enumerate/target internal hosts, incl. NITRO API and peer appliance admin UIsOutbound-from-NetScaler-perspective, inbound-to-internal-host connections from the NetScaler's IPFlat/under-segmented internal network
7Authenticate to NITRO with default/reused/phished credsConfig read/write via NITRO through the proxied channelWeak or reused NetScaler admin credentials
8Append one-shot crontab line via NITRO file interfaceRoot command execution within ~1 minute via cronCredentialed NITRO access from step 7
9 (reported, unconfirmed)Drop PHP webshell for durable accessNew script file in a web-served appliance directoryRoot/file-write access; exact path/filenames not independently confirmed — see Sections 2 & 4
04

Consolidated IOC Table

This CVE is an authentication-bypass logic bug, not malware with published hashes/C2 infrastructure. No atomic hash, IP, or domain indicators have been published by any source reviewed. The table below is behavioral/configuration indicators plus one explicitly unconfirmed reported artifact.

TypeValue / PatternConfidenceActionContext / Source
Config stringadd authentication samlAction.*HighhuntPrecondition indicator — Citrix bulletin CTX696939 [#1]
Config stringadd authentication vserver .* / add vpn vserver .*HighhuntPrecondition indicator — CTX696939 [#1]
HTTP behaviorPOST /cgi/samlauth → HTTP 500, internal error 43524HighdetectUnpatched-build signature (safe 20-byte-RelayState probe) — Bishop Fox [#7]
HTTP behaviorPOST /cgi/samlauth → HTTP 200, "Malformed Assertion"HighenrichPatched-build response — Bishop Fox [#7]; NOT itself malicious, used to confirm patch state
Log stringSSL VPN login for user "anonymous" (clientless mode)HighdetectPost-bypass session indicator — Bishop Fox [#7]
HTTP path/cgi/setclient?cvpn redirect immediately after anonymous loginHighdetectGateway post-login redirect chain — Bishop Fox [#7]
Session artifactNSC_AAAC cookie issued to an unauthenticated requestMediumenrichLegitimate cookie name reused in the bypass — context only, not a standalone block — Bishop Fox [#7]
Aggregate telemetry56 exploitation attempts / 12 unique attacker IPs / 6 countries (AU, DE, JP, RO, TW, US), 2026-09-03 to 2026-09-09MediumpivotPrevidian sensor telemetry [#6], cited by CCB [#5]; raw IPs not published
PoC referenceGitHub repo TarPeg007/CVE-2026-19490 (created 2026-09-02)MediumpivotPublic PoC existence noted, NOT fetched or reproduced — Previdian [#6]
File path/name — UNCONFIRMED/var/vpn/theme/x.php, /var/vpn/theme/z.php (PHP webshell, reportedly executes OS commands via a GET parameter)Low / Unconfirmedhunt (manual verification only)Repeated in secondary aggregator summaries; NOT found in any of the 8 sources actually fetched (see Section 2). Do not treat as a confirmed compromise indicator.
05

Affected Surface & Telemetry Matrix

SurfaceAffected / Vulnerable RangeTelemetry AvailablePriorityGap
NetScaler ADC/Gateway 14.1Before 14.1-73.32None native (FreeBSD appliance, no Falcon sensor) — syslog/CEF forwarding onlyCriticalNo EDR visibility on the appliance itself; depends entirely on log forwarding being configured
NetScaler ADC/Gateway 13.1Before 13.1-63.21Same as aboveCriticalSame as above
NetScaler ADC FIPSBefore 14.1-73.32 FIPSSame as aboveCriticalSame as above
NetScaler ADC FIPS/NDcPP 13.1Before 13.1-37.277Same as aboveCriticalSame as above
Secure Private Access Hybrid (customer-managed NetScaler instances)Same version rangesSame as aboveCriticalEasy to overlook in inventory — explicitly called out in CTX696939
Internal hosts reachable via clientless-VPN SSRF (jump hosts, other appliances, NITRO-adjacent management planes)N/A — downstream blast radiusFalcon-native (ProcessRollup2, NetworkConnectIP4/NetworkReceiveAcceptIP4) if Falcon sensor is deployed thereHighCoverage depends entirely on where Falcon sensors happen to sit relative to the SSRF's reach
NetScaler 12.1 / 13.0End-of-life — no fix availableN/ACriticalMigration is the only remediation per Bishop Fox [#7]; cannot be patched
06

ATT&CK Mapping

TacticTechniqueBehaviorQuery / Control
Initial AccessT1190 — Exploit Public-Facing ApplicationCrafted SAML RelayState against /cgi/samlauth to reach the deserialization bugQ1, Q8
ImpactT1499.004 — Endpoint DoS: Application or System ExploitationCrash-length RelayState (18/21) repeatedly sent to force packet-engine restarts/rebootQ2
Command and Control / Lateral MovementT1090.001 — Proxy: Internal ProxyAnonymous Gateway session used as an SSRF proxy into the internal networkQ3, Q4
Persistence / Privilege EscalationT1053.003 — Scheduled Task/Job: CronOne-shot crontab line appended via NITRO file interface, executed as rootQ5
PersistenceT1505.003 — Server Software Component: Web Shell (UNCONFIRMED)Reported PHP webshell in a web-served appliance directoryQ6 (low confidence, manual verification required)
Credential Access / Initial Access (internal pivot)T1078.001 — Valid Accounts: Default AccountsNITRO login via the proxied SSRF channel using default/reused/phished management credentialsQ7
07

Native Audit-Log Hunts

Non-CQL checks to run directly against the appliance or its exported config/logs — these do not require Falcon telemetry.

  1. Precondition inventory (per Citrix bulletin CTX696939): on each appliance, run show ns runningConfig | grep -i saml and separately grep the running config for add authentication vserver .* and add vpn vserver .*. Any appliance matching one or more is in scope regardless of internet-exposure assumptions.
  2. Safe external patch-state check: Bishop Fox published an open-source, non-destructive verifier (github.com/BishopFox/CVE-2026-19490-check, not reproduced here) that sends one SAML POST with RelayState decoded to exactly 20 bytes and reads the response: HTTP 500 / internal error 43524 = unpatched; HTTP 200 / "Malformed Assertion" = patched. Safe to run against production — it never touches the crash-length (18/21) or session-creating (11/16) branches.
  3. Appliance-side triage: find /netscaler/ns_gui /var/vpn /netscaler/portal -type f \( -name "*.php" -o -name "*.pl" -o -name "*.py" -o -name "*.sh" \) — flags any script file in a web-served directory, including but not limited to the unconfirmed x.php/z.php claim (Section 4). Cross-reference every hit against a documented, ticketed customization before treating it as benign.
  4. Shell/AAA log review (30+ days retroactive): tail -200 /var/log/shell.log, tail -100 /var/log/bash.log, and grep -iE "login|authentication" /var/log/ns.log — look specifically for authentication log entries with no preceding legitimate login flow, and any shell command not tied to a known change ticket.
  5. Config-integrity diff: compare current ns.conf against the last known-good backup; unauthorized vserver bindings, added routes, or new responder/rewrite policies are classic persistence moves on compromised NetScaler appliances.
08

CrowdStrike LogScale CQL Hunt Queries

Pick your tenant's cloud first — every "Open in Falcon" button below uses this selection.

NetScaler ADC/Gateway is a FreeBSD-based appliance and does not run a Falcon sensor. Queries Q1, Q2, Q3, Q7, and Q8 target NetScaler AAA/access logs forwarded via a syslog/CEF connector into Falcon Next-Gen SIEM — their field names are illustrative snake_case NG-SIEM parser fields and must be validated against a real sample row from your own syslog connector before deployment (fields are parser-prefixed per tenant, same caveat as SaaS/IdP ingest). Queries Q4, Q5, and Q6 are Falcon-native and run against downstream endpoints with actual sensor coverage (jump hosts, log collectors, management workstations) that the SSRF pivot could reach.

Q1 · SAML RelayState Auth-Bypass Probe/Exploitation Signature
CONF MEDIUMFP LOWCOST LOW

Looks for: POST requests to /cgi/samlauth returning either the unpatched-build error signature (500/43524) or the patched-build response (200/Malformed Assertion), grouped by source IP. FP: your own vulnerability scanners or Bishop Fox's safe probe will match by design — see TUNING.

// HUNT: NetScaler SAML RelayState Auth-Bypass Probe/Exploitation (CVE-2026-19490)
// MITRE: T1190 - Exploit Public-Facing Application
// CONF: medium
// FP: low
// COST: low
// REQUIRES: NetScaler AAA/access logs (ns.log or equivalent) forwarded via syslog/CEF into Falcon Next-Gen SIEM. Field names are illustrative snake_case NG-SIEM parser fields -- validate against a real sample forwarded row for your connector before deploying.
// FALSE POSITIVES: Vulnerability scanners and Bishop-Fox-style safe patch-state probes intentionally send this exact 20-byte-RelayState request to CHECK for the bug -- expected and benign from your own team's infrastructure.
// TUNING: Exclude src_ip values belonging to your own vulnerability-management/scanning subnets before alerting; a single hit from an unrecognized external src_ip against /cgi/samlauth warrants review, high volume from one src_ip is the stronger signal.
// LOOKBACK: 14d

http_path = "/cgi/samlauth"
| http_method = "POST"
| (http_status = "500" and message = *43524*) or (http_status = "200" and message like "*Malformed Assertion*")
| groupBy([src_ip, ns_hostname, http_status], function=[count(as=Hits), collect(message)], limit=500)
| sort(Hits, order=desc)
Q2 · Packet-Engine Crash Sweep via Crafted RelayState Length
CONF MEDIUMFP MEDIUMCOST LOW

Looks for: repeated HTTP 500 responses from /cgi/samlauth from the same source, consistent with an attacker sweeping crash-inducing RelayState lengths (18/21) to force a DoS. FP: aggressive authorized scanning — see TUNING.

// HUNT: NetScaler Packet-Engine Crash Sweep via Crafted RelayState Length (CVE-2026-19490)
// MITRE: T1499.004 - Endpoint Denial of Service: Application or System Exploitation
// CONF: medium
// FP: medium
// COST: low
// REQUIRES: NetScaler AAA/access logs forwarded via syslog/CEF into Falcon Next-Gen SIEM, plus appliance restart/uptime telemetry if available. Field names are illustrative snake_case NG-SIEM parser fields -- validate against a real sample row for your connector.
// FALSE POSITIVES: Aggressive but authorized vulnerability scanners or the Bishop-Fox-style safe detection tool can generate repeated 500-class responses against /cgi/samlauth during sanctioned testing windows.
// TUNING: Exclude src_ip ranges belonging to your own scanning/testing infrastructure and any documented patch-verification window before alerting; escalate immediately if the appliance also logged an unplanned packet-engine restart in the same window.
// LOOKBACK: 7d

http_path = "/cgi/samlauth"
| http_method = "POST"
| http_status = "500"
| groupBy([src_ip, ns_hostname], function=[count(as=Hits)], limit=500)
| test(Hits >= 3)
| sort(Hits, order=desc)
Q3 · Anonymous SSLVPN Session to Clientless-Proxy Pivot
CONF HIGHFP LOWCOST LOW

Looks for: the documented post-bypass log signature — an "anonymous" SSL VPN clientless-mode login immediately followed by the /cgi/setclient?cvpn redirect. This combination should not occur absent the bug or a deliberate guest-access configuration.

// HUNT: NetScaler Anonymous SSLVPN Session to Clientless-Proxy Pivot (CVE-2026-19490)
// MITRE: T1090.001 - Proxy: Internal Proxy
// CONF: high
// FP: low
// COST: low
// REQUIRES: NetScaler AAA/access logs (ns.log) forwarded via syslog/CEF into Falcon Next-Gen SIEM. Validate the exact log-line wording against a real sample from your NetScaler build/version -- the "anonymous" clientless-mode login string is documented on unpatched builds per Bishop Fox's technical analysis.
// FALSE POSITIVES: None expected -- a genuine anonymous/unauthenticated SSL VPN clientless login is not a normal outcome of standard NetScaler operation absent this bug or a deliberate guest-access configuration.
// LOOKBACK: 30d

message like "*SSLVPN LOGIN*"
| message like "*anonymous*"
| (http_path = "/cgi/setclient*" or http_path like "*cvpn*")
| groupBy([src_ip, ns_hostname], function=[count(as=Hits), collect(message)], limit=500)
| sort(Hits, order=desc)
Q4 · Inbound Connections From NetScaler IP to Internal Management Ports
CONF MEDIUMFP MEDIUMCOST LOW

Looks for: Falcon-covered internal hosts accepting a connection FROM the NetScaler appliance's own IP on a management-plane port (NITRO/admin UI), consistent with the documented SSRF pivot. Substitute your NetScaler's NSIP/VIP before running. FP: legitimate health-check/LDAP/RADIUS traffic — see TUNING.

// HUNT: Inbound Connections From NetScaler Appliance IP to Internal Management Ports (Possible SSRF Pivot, CVE-2026-19490)
// MITRE: T1090.001 - Proxy: Internal Proxy
// CONF: medium
// FP: medium
// COST: low
// REQUIRES: Falcon sensor coverage on the internal Windows/Linux/management hosts a compromised NetScaler's clientless-VPN proxy could reach. NetScaler itself runs no Falcon sensor (FreeBSD appliance).
// FALSE POSITIVES: The NetScaler appliance legitimately talks to internal hosts for load-balancing health checks, LDAP/RADIUS auth backends, and monitoring -- baseline your NetScaler's normal internal talk-to list before alerting.
// TUNING: Exclude RemoteAddressIP4/LocalPort pairs matching your NetScaler's documented health-check/LDAP/RADIUS backend list; escalate on connections to NITRO API ports or other appliances' management UIs that fall outside that baseline.
// LOOKBACK: 14d

#event_simpleName = NetworkReceiveAcceptIP4
| RemoteAddressIP4 = "REPLACE_WITH_NETSCALER_NSIP_OR_VIP"
| in(LocalPort, values=[443, 3008, 3009, 3010, 3011, 4433, 8443])
| table([@timestamp, ComputerName, UserName, RemoteAddressIP4, LocalPort, LocalAddressIP4, aid])
| sort(@timestamp, order=desc)
Q5 · Root Cron Persistence Following Suspicious NITRO Activity
CONF MEDIUMFP MEDIUMCOST LOW

Looks for: crontab modification on any Falcon-covered Linux host in the NITRO/config-management chain, matching the documented "append one-shot crontab line → root in ~1 minute" persistence step. FP: legitimate CM tooling — see TUNING.

// HUNT: Root Cron Persistence Following Suspicious NITRO/API Configuration Activity (CVE-2026-19490)
// MITRE: T1053.003 - Scheduled Task/Job: Cron
// CONF: medium
// FP: medium
// COST: low
// REQUIRES: Falcon sensor coverage (Linux) on any jump host, log collector, or management workstation from which NetScaler NITRO API sessions are proxied. NetScaler's own FreeBSD OS runs no Falcon sensor -- this hunt covers the credentialed pivot Bishop Fox documented, which requires a Falcon-covered Linux host somewhere in the chain to be directly observable.
// FALSE POSITIVES: Legitimate configuration-management tools (Ansible, Puppet, Chef, cron-based backup jobs) routinely modify crontab entries.
// TUNING: Exclude ParentBaseFileName values matching your approved CM/orchestration tooling (e.g. ansible-playbook, puppet, chef-client) and any documented maintenance window before alerting.
// LOOKBACK: 14d

#event_simpleName = /ProcessRollup2|SyntheticProcessRollup2/
| CommandLine = /crontab/i
| FileName = /^(crontab|sh|bash)$/i
| table([@timestamp, ComputerName, UserName, ParentBaseFileName, FileName, CommandLine, aid])
| sort(@timestamp, order=desc)
Q6 · Reported (UNCONFIRMED) NetScaler Webshell Basenames
CONF LOWFP HIGHCOST LOW

Looks for: files or processes named exactly x.php or z.php on any Falcon-covered Linux host that mirrors/processes NetScaler web content. This indicator is UNCONFIRMED — see Sections 2 and 4 before acting on any hit. FP: extremely high — any unrelated file with these common names will match; treat every hit as a manual-verification lead only.

// HUNT: Reported (UNCONFIRMED) NetScaler Webshell Basenames on Monitored Hosts (CVE-2026-19490)
// MITRE: T1505.003 - Server Software Component: Web Shell
// CONF: low
// FP: high
// COST: low
// REQUIRES: Falcon sensor coverage (Linux) on any host that mirrors, syncs, or processes NetScaler web-served content -- the NetScaler appliance itself runs no Falcon sensor. IMPORTANT: the path/filenames here are UNCONFIRMED -- multiple secondary sources repeat a claim of PHP webshells named x.php / z.php in a NetScaler theme directory, but this could NOT be independently verified against the Citrix bulletin, the CCB Belgium advisory, the Rapid7 ETR post, or Bishop Fox's technical writeup (none of which mention any webshell). Treat any hit as a lead requiring manual appliance-side verification, never as a confirmed compromise indicator on its own. See Section 2 for full provenance notes.
// FALSE POSITIVES: Any legitimately named x.php/z.php file unrelated to this threat; generic script files from approved deployment/customization tooling.
// TUNING: Exclude paths matching documented, change-ticketed NetScaler theme/portal customizations before alerting; require manual appliance-side verification (e.g. find /var/vpn -name "*.php") before treating any hit as confirmed compromise.
// LOOKBACK: 30d

#event_simpleName = /ProcessRollup2|SyntheticProcessRollup2|NewExecutableWritten/
| FileName = /^[xz]\.php$/i
| table([@timestamp, ComputerName, UserName, FileName, ImageFileName, CommandLine, aid])
| sort(@timestamp, order=desc)
Q7 · NetScaler Config Changes via NITRO Outside Change Window
CONF MEDIUMFP MEDIUMCOST LOW

Looks for: configuration-changing log lines (new vservers, auth objects, saved config, new local users) that don't align with a known change window — consistent with credentialed NITRO abuse after the SSRF pivot. FP: legitimate admin activity — see TUNING.

// HUNT: NetScaler Configuration Changes via NITRO Outside Change Window (Possible Default/Reused-Credential Abuse, CVE-2026-19490)
// MITRE: T1078.001 - Valid Accounts: Default Accounts
// CONF: medium
// FP: medium
// COST: low
// REQUIRES: NetScaler audit/config logs (ns.log "save ns config" / "add vpn vserver" / "add authentication" / "add system user" lines) forwarded via syslog/CEF into Falcon Next-Gen SIEM. Field names are illustrative snake_case NG-SIEM parser fields -- validate against a real sample row for your connector.
// FALSE POSITIVES: Scheduled/ticketed maintenance windows, legitimate NetScaler admin configuration changes, HA sync operations.
// TUNING: Exclude admin_user values belonging to named, ticketed change-management sessions and your documented maintenance windows before alerting.
// LOOKBACK: 30d

message like "*save ns config*" or message like "*add vpn vserver*" or message like "*add authentication*" or message like "*add system user*"
| groupBy([src_ip, ns_hostname, admin_user], function=[count(as=Hits), collect(message)], limit=500)
| sort(Hits, order=desc)
Q8 · Distributed Scanning of NetScaler SAML/AAA Endpoints (Pre-Exploitation Recon)
CONF MEDIUMFP MEDIUMCOST MEDIUM

Looks for: a single source hitting SAML/AAA/logon-related paths at high volume — the recon pattern documented ahead of the 2026-09-03 exploitation wave. FP: authorized vulnerability scanning — see TUNING.

// HUNT: Distributed Scanning of NetScaler SAML/AAA Endpoints (Pre-Exploitation Recon, CVE-2026-19490)
// MITRE: T1190 - Exploit Public-Facing Application
// CONF: medium
// FP: medium
// COST: medium
// REQUIRES: NetScaler access logs forwarded via syslog/CEF into Falcon Next-Gen SIEM. Field names are illustrative snake_case NG-SIEM parser fields -- validate against a real sample row for your connector.
// FALSE POSITIVES: Authorized external/internal vulnerability scanning (InsightVM, Qualys, Nessus, Bishop Fox's public detection tool) will match this pattern by design.
// TUNING: Exclude src_ip ranges belonging to your own or a contracted vulnerability-management vendor's scanning infrastructure before alerting.
// LOOKBACK: 7d

in(http_path, values=["/cgi/samlauth", "/cgi/login", "/vpn/index.html", "/logon/LogonPoint"])
| groupBy([src_ip], function=[count(as=Hits)], limit=500)
| test(Hits >= 20)
| sort(Hits, order=desc)
09

Custom IOA Recommendations

Custom IOAs apply to Falcon-covered endpoints in the blast radius (jump hosts, log collectors, management workstations) — not to the NetScaler appliance itself, which cannot run a Falcon sensor.

Custom IOA: Unexpected Egress From NetScaler-Adjacent Management Host

Rule Group: Network / Edge-Appliance Pivot Defense  ·  Rule Type: Network Connection  ·  Action: Detect  ·  Severity: Medium  ·  MITRE: T1090.001

Detection Logic: Flag outbound connections from a host in the NetScaler management/jump-host sensor group to a destination outside an allowlisted internal range and outside DNS/NTP/licensing ports, immediately following an inbound connection from the NetScaler's own NSIP/VIP.

Description: Approximates Security Arsenal's "suspicious outbound connection from NetScaler appliance to rare external host" Sigma concept for the Falcon-covered side of the chain (the appliance itself has no sensor).

FP Tuning Notes: Baseline the management host's normal talk-to list (patch mirrors, monitoring, backup targets) for at least 14 days before enabling; exclude those first.

Recommended Validation: From an isolated canary host in the same sensor group, initiate a benign outbound connection to a non-allowlisted internal test address after simulating an inbound connection from a test NetScaler IP; confirm the rule fires in Detect mode before considering Block.

Custom IOA: Crontab Write by Non-CM Process

Rule Group: Linux Persistence  ·  Rule Type: Process Creation  ·  Action: Detect  ·  Severity: High  ·  MITRE: T1053.003

Detection Logic: Image Filename: .*/(crontab)$  ·  Parent Image Filename: NOT matching your approved CM/orchestration tooling list (ansible, puppet, chef, cron-package-manager hooks).

Description: Catches the documented "NITRO file interface appends a one-shot crontab line, cron runs it as root within ~1 minute" persistence step on any Falcon-covered Linux host in the NITRO-access chain.

FP Tuning Notes: Exclude your CM tooling's parent process names; run in Detect mode for 14+ days and measure FP rate before any promotion discussion.

Recommended Validation: On an isolated test VM, run crontab -l | { cat; echo "* * * * * /bin/true"; } | crontab - from a shell that is NOT your CM tool's parent process, confirm the rule fires, then remove the test entry.

10

Machine-Readable IOC Appendix

Falcon IOC Management CSVbulk import
type,value,action,severity,expiration,description,tags
filename,REPLACE_WITH_CONFIRMED_WEBSHELL_FILENAME,detect,high,2026-12-12,Reported (UNCONFIRMED) NetScaler webshell filename -- not independently verified against any fetched primary source; confirm on the appliance before treating as an indicator,campaign:CitrixNetScalerAuthBypass
sha256,REPLACE_WITH_SHA256_IF_WEBSHELL_RECOVERED,prevent,critical,2027-09-12,Hash of any webshell/script recovered during appliance-side triage -- no atomic hash has been published for this CVE,campaign:CitrixNetScalerAuthBypass
ipv4,REPLACE_WITH_CONFIRMED_ATTACKER_IP,detect,medium,2026-10-12,Attacker source IP from your own NetScaler AAA/access log review -- no atomic attacker IPs have been publicly disclosed for this CVE (Previdian reports aggregate counts only),campaign:CitrixNetScalerAuthBypass
Behavioral Signatureslog/HTTP patterns
# Confirmed behavioral signatures (Bishop Fox technical analysis; Citrix CTX696939)
HTTP path:        /cgi/samlauth  (POST)
Unpatched signal:  HTTP 500, internal error 43524, on a RelayState decoding to 20 bytes
Patched signal:    HTTP 200, "Malformed Assertion", on the same 20-byte probe
Session log line:  SSL VPN login for user "anonymous" (clientless mode)
Redirect chain:    /cgi/setclient?cvpn immediately following the anonymous login
Session cookie:    NSC_AAAC issued to a request with no preceding authentication event
Crash lengths:     RelayState decoding to 18 or 21 bytes -> packet engine restart (~45s outage)
Anon-session len:  RelayState decoding to 11 or 16 bytes -> "created session for anonymous"
Vulnerable-Config Audit Stringsverbatim from CTX696939
# Run against `show ns runningConfig` on every appliance in inventory
add authentication samlAction.*
add authentication vserver .*
add vpn vserver .*
# Companion CVE-2026-19489 precondition (SIP ALG / LSN) -- lower priority, no ITW exploitation observed
add lsn group.*sipalg.*
Pivot / Context Referencesnot fetched or reproduced
# Public PoC repository (existence noted only -- NOT fetched, NOT reproduced)
github.com/TarPeg007/CVE-2026-19490

# Safe, vendor-independent patch-state verification tool (NOT reproduced here)
github.com/BishopFox/CVE-2026-19490-check

# Exploitation telemetry snapshot (Previdian, 2026-09-03 to 2026-09-09)
Attempts observed:        56
Unique attacker IPs:      12
Attacker countries:       AU, DE, JP, RO, TW, US
Public PoC published:     2026-09-02
First observed exploit:   2026-09-03
Added to CISA KEV:        2026-09-09 (due 2026-09-12)
11

Detection Validation Gates

GateStatus / Requirement
Telemetry readyNetScaler AAA/access logs forwarding to Falcon NG-SIEM via syslog/CEF connector; field names validated against a real sample row (Q1, Q2, Q3, Q7, Q8 depend on this)
Falcon endpoint coverage confirmedSensor deployed and healthy on every jump host / log collector / management workstation reachable from the NetScaler's SSRF path (Q4, Q5, Q6 depend on this)
Benign baseline captured14-day baseline of the NetScaler's normal internal talk-to list (health checks, LDAP/RADIUS) captured before enabling Q4/Custom IOA in anything beyond Detect
Positive testBishop Fox's safe 20-byte-RelayState probe run against a lab/test NetScaler confirms Q1 and Q3's log patterns actually appear in your specific syslog pipeline before relying on them operationally
Promotion reviewAll queries ship as hunt/detect only. No IOA in this pack should be promoted to Block before 14+ days in Detect with a measured FP rate <5%, per threat-hunter-v2 prevention-promotion guidance

Queries must be run manually in Falcon LogScale; this pack cannot execute them. "Expected Findings" in Section 16 describes what a positive result looks like so the analyst knows what to look for.

12

Hardening — Tiered

TTP: CVE-2026-19490 authentication bypass  ·  MITRE Technique: T1190  ·  Primary Mitigations: M1051, M1042, M1032, M1030, M1029, M1018

Immediate (this week)
  • Patch to 14.1-73.32 / 13.1-63.21 (or 14.1-73.32 FIPS / 13.1-37.277 FIPS-NDcPP) on every appliance, both nodes of any HA pair. Framework: MITRE M1051 (Update Software); vendor advisory CTX696939 [#1]. There is no vendor-published workaround — patching is the only fix.
  • Set the global authorization bound: set vpn parameter -defaultAuthorizationAction DENY. This does not close the bug but bounds the SSRF blast radius on any appliance that cannot be patched immediately. Framework: MITRE M1042 (Disable or Remove Feature or Program); ⚠ vendor/researcher best-practice (Bishop Fox [#7]), no formal CIS/DISA benchmark exists for NetScaler at time of writing.
  • Inventory every NetScaler in scope using the config-audit strings in Section 10, including forgotten/DR/cloud-marketplace instances and Secure Private Access Hybrid deployments explicitly called out in CTX696939.
Near-term (1–4 weeks)
  • Enforce TACACS+/RADIUS-backed admin authentication with MFA on the NetScaler management plane so appliance compromise doesn't expose static local admin credentials. Framework: MITRE M1032 (Multi-factor Authentication); ⚠ vendor best-practice (Security Arsenal [#8]), no formal benchmark cited.
  • Restrict the NSIP/management interface to a dedicated management VLAN with ACLs; verify the NSIP is never internet-reachable (show ns runningConfig review). Framework: MITRE M1030 (Network Segmentation).
  • Forward all appliance logs off-box — access, AAA, audit, and shell logs — via syslog/CEF with 90+ days hot retention; appliance-local logs are attacker-editable. Framework: MITRE M1029 (Remote Data Storage); ⚠ vendor best-practice (Security Arsenal [#8]).
Strategic / structural (1–3 months)
  • Rotate all NetScaler-resident admin credentials and certificates/keys if any pre-patch probing or exploitation is found in retroactive log review, given NetScaler compromises historically lead to credential theft and session hijacking downstream. Framework: MITRE M1018 (User Account Management).
  • Migrate any 12.1/13.0 NetScaler instances to a supported branch — no fix is coming for EOL trains per Bishop Fox [#7].
  • Default-deny appliance egress, allowlisting only licensing, NTP, and DNS; NetScaler has no legitimate business initiating arbitrary outbound connections. Framework: MITRE M1042.
  • Add edge-appliance CVEs (NetScaler, and comparable perimeter Gateway/VPN products) to an emergency patch SLA equivalent to a CISA KEV entry, even before one is formally issued — perimeter access-broker appliances see disproportionately fast weaponization.

What to verify after deployment

  • show ns runningConfig | grep -i saml and re-run the config-audit strings (Section 10) after patching to confirm precondition strings still map to a patched build version.
  • Bishop Fox's safe 20-byte-RelayState probe should now return HTTP 200 / "Malformed Assertion" on every scoped virtual server.
  • Re-run Q1 and Q3 (Section 8) for 7 days post-patch — a continued anonymous-session log line after patching indicates the patch did not take on that node.
13

Deployable Playbooks

MITRE: T1190 → M1051, M1042  ·  Estimated deploy time: 1–3 hours per HA pair (patch download/stage/reboot dependent)  ·  Prerequisites: Console/SSH access to each NetScaler appliance, current firmware image staged  ·  Reboot required: Yes, for the firmware upgrade step

Step 1 — Inventory and precondition check

What it does: Confirms which appliances are in scope before touching anything. Why it works: CTX696939's own precondition strings are authoritative for what's exploitable per build.

# Run on each NetScaler appliance shell
show ns version
show ns runningConfig | grep -i saml
show ns runningConfig | grep -E "add authentication vserver|add vpn vserver"

Verify: Record build number and whether SAML/Gateway/AAA config is present for each appliance; cross-reference against the fixed-version table in Section 5.

Step 2 — Apply the vendor patch

What it does: Closes the deserialization-length bug at its root (a single instruction change per Bishop Fox's binary diff). Why it works: MITRE M1051 — Update Software.

# Standard Citrix firmware upgrade process -- obtain the exact fixed build
# for your release train from the official bulletin before upgrading:
# https://support.citrix.com  (search: CTX696939)
# Minimum fixed builds: 14.1-73.32 / 13.1-63.21 / 14.1-73.32 FIPS / 13.1-37.277 FIPS-NDcPP
# Patch BOTH nodes of any HA pair -- an unpatched secondary is fully exposed
# the moment it takes over.

Verify: show ns version reflects the fixed build on both HA nodes; re-run Bishop Fox's safe probe (Section 7, item 2) and confirm HTTP 200 / "Malformed Assertion" on every scoped vserver.

Step 3 — Bound the blast radius (compensating control, pre- or post-patch)

What it does: Prevents an anonymous Gateway session from being used as an SSRF proxy into the internal network. Why it works: MITRE M1042 — Disable or Remove Feature or Program.

# NetScaler CLI
set vpn parameter -defaultAuthorizationAction DENY
save ns config

Verify: show vpn parameter should report defaultAuthorizationAction: DENY.

Step 4 — Harden the management plane

What it does: Removes reliance on static local admin credentials that a successful SSRF-to-NITRO pivot could otherwise abuse. Why it works: MITRE M1032 — Multi-factor Authentication.

# NetScaler CLI -- configure TACACS+ or RADIUS-backed admin auth
# (exact server/shared-secret values are environment-specific; consult
# your NetScaler administration guide for the "add authentication
# tacacsAction" / "add authentication radiusAction" syntax for your
# firmware version before applying in production)
show system user
# Confirm no unexpected local accounts exist beyond documented break-glass admin(s)

Verify: show system user shows only documented accounts; admin logins now route through TACACS+/RADIUS in the AAA logs.


Deploying via your RMM

The steps above are raw NetScaler CLI. To wrap them for fleet-wide execution (change-ticket linkage, staged rollout across HA pairs, compliance writeback), hand them to your RMM/orchestration tooling and ask for a deployable package.

14

Containment Runbook

PhaseActionsOwnerEvidence to Preserve
1. TriageRun the config-precondition audit (Section 10) across the full NetScaler inventory; run Bishop Fox's safe probe to establish current patch state per applianceNetwork/Security EngineeringProbe results, build versions, precondition-match list
2. Retroactive huntRun Q1, Q2, Q3, Q7, Q8 against 30+ days of NetScaler log history; run the appliance-side triage script (Section 7, item 3) on every applianceThreat Hunting / SOCQuery results, appliance shell/AAA log excerpts, any script-file findings
3. ContainApply -defaultAuthorizationAction DENY immediately on any appliance not yet patched; isolate any appliance with confirmed anonymous-session or webshell-lead findings from the network (do NOT simply reboot — volatile evidence matters)Incident Responsens.conf backup, memory capture if feasible, isolation timestamp
4. EradicatePatch to the fixed build; if any indicator was confirmed, treat as full compromise — rotate all NetScaler-resident credentials/certificates, rebuild from known-good config rather than trusting an in-place cleanIncident Response + Network EngineeringNew credential/cert inventory, rebuild change record
5. Recover & monitorRe-run Bishop Fox's safe probe and Q1/Q3 for 7 days post-patch; confirm TACACS+/MFA and log-forwarding hardening (Section 12) are in place before closing the incidentSOCPost-patch probe results, 7-day query re-run output
6. ReportDocument whether pre-patch exploitation was found; patching alone does not remediate historic compromise per CCB Belgium guidance [#5]IR LeadFinal incident report, KEV/BOD 26-04 compliance record if FCEB
15

Detection Coverage Map

MITRE TechniqueTechnique NameCQL QueryCustom IOAIOC BlockCoverage
T1190Exploit Public-Facing Application✓ Q1, Q8Good
T1499.004Endpoint DoS: App/System Exploitation✓ Q2Partial
T1090.001Proxy: Internal Proxy✓ Q3, Q4✓ IOA-1Good
T1053.003Scheduled Task/Job: Cron✓ Q5✓ IOA-2Good
T1505.003Server Software Component: Web Shell✓ Q6 (low confidence)REPLACE_WITH_ placeholder onlyPartial — indicator unconfirmed
T1078.001Valid Accounts: Default Accounts✓ Q7Partial
T1611-adjacent (NITRO config read/write via SSRF)Not independently mapped — appliance-config-API abuse via a proxied channel is closest to T1090.001 / T1078.001 aboveCovered by Q4/Q7 aboveGAP — no dedicated NITRO-audit-log query; native check in Section 7 is the primary control

Coverage Summary: 6 of 6 mapped techniques have at least partial detection coverage; 8 CQL queries and 2 Custom IOA recommendations shipped. The clearest priority gap is native NITRO API audit-log ingestion into Falcon — today that control lives only as a manual native hunt (Section 7) because NetScaler's NITRO audit trail is not commonly forwarded in a structured way; if your syslog connector exposes NITRO API call logs, extend Q7 to key on the specific API session/user field rather than only config-changing keywords.

All five Detection Validation Gates from Section 11 apply before any of the above move beyond hunt/Detect mode.

16

Hunt Summary Ticket

TITLE:      Citrix NetScaler CVE-2026-19490 Authentication Bypass -- Hunt & Hardening
SEVERITY:   CRITICAL (CVSS v4.0 9.3) -- CISA KEV 2026-09-09, due 2026-09-12 -- exploited ITW since 2026-09-03
SCOPE:      NetScaler ADC/Gateway 14.1 < 73.32, 13.1 < 63.21 (+ FIPS/NDcPP equivalents) configured as
            Gateway (SSL VPN/ICA Proxy/CVPN/RDP Proxy) or AAA vserver; includes Secure Private Access
            Hybrid customer-managed instances
HYPOTHESIS: If exploited, expect POST /cgi/samlauth with anomalous RelayState lengths, "anonymous"
            SSLVPN clientless-mode logins with no real auth event, and (if defaultAuthorizationAction=
            ALLOW) inbound connections from the NetScaler's own IP to internal management interfaces
QUERIES:    Q1-Q8 (Section 8) -- run in Falcon LogScale manually; this pack cannot execute them
DO FIRST:   1) Inventory + precondition audit (Section 10 config strings) on every NetScaler appliance
            2) Run Bishop Fox's safe 20-byte-RelayState probe against each to establish current patch state
            3) Patch to 14.1-73.32 / 13.1-63.21+ ; if immediate patch is impossible, set
               `set vpn parameter -defaultAuthorizationAction DENY` as an interim compensating control
FINDINGS:   [Populate after queries are run -- see Section 11 "Expected Findings" guidance. Claude/this
            pipeline does not execute queries; do not treat this field as pre-filled evidence.]
GAPS:       - Webshell path/filenames (/var/vpn/theme/x.php, z.php) are UNCONFIRMED -- see Sections 2 and 4
            - No dedicated structured NITRO audit-log query; native manual check only (Section 7)
            - Exploitation telemetry (56 attempts/12 IPs/6 countries) sourced from Previdian (T3), not a
              T1 primary -- treat as Medium confidence context, not a definitive attacker count
ACTIONS:    Immediate: patch + defaultAuthorizationAction=DENY (Section 12, Immediate tier)
            Pending approval: TACACS+/MFA rollout, management VLAN/ACL restriction, log-forwarding buildout
OWNER:      [Assign per your on-call/IR rotation]
VERSION:    v0.1 -- 2026-09-12
17

Changelog

v0.12026-09-12Initial draft. Full pipeline run (web-hunter-v2 → threat-hunter-v2 → crowdstrike-logscale-v3 → alert-builder-v2 → threat-hardening-v2 → review-v2). 8 sources fetched and snapshotted; 8 CQL queries; 2 Custom IOA recommendations; webshell path/filenames shipped as unconfirmed per provenance gate.
18

References

TierSourceUsed ForAccess Date
T1Citrix Security Bulletin CTX696939CVSS/CWE, affected/fixed versions, precondition strings, acknowledgment2026-09-13
T1Rapid7 ETR BlogDisclosure timeline, KEV cross-reference2026-09-13
T1CISA KEV Catalog AlertKEV addition confirmation, BOD 26-042026-09-13
T1NVD CVE-2026-19490CVSS vector, CWE, KEV due date2026-09-13
T1CCB Belgium AdvisoryVersion-specific SAML precondition table, exploitation timeline2026-09-13
T3Previdian Vulnerability IntelligenceExploitation telemetry, PoC repo reference2026-09-13
T3Bishop Fox Technical AnalysisRoot-cause mechanism, safe detection method, behavioral signatures2026-09-13
T3Security Arsenal Detection GuideGeneric webshell-directory pattern, triage script, hardening checklist2026-09-13

Related-but-distinct prior library coverage: CVE-2026-8451 and CVE-2026-8452 (separate NetScaler CVEs, different root cause — not merged into this pack's scope).

Generated: 2026-09-12 · HuntPack v0.1 · Citrix NetScaler CVE-2026-19490