Threat Overview
CVE-2026-19490 is a critical authentication-bypass vulnerability affecting customer-managed NetScaler ADC and NetScaler Gateway under specific Gateway/AAA configurations. Citrix published fixes on August 19, 2026. The issue applies to appliances configured as Gateway or AAA virtual servers, with SAML-related requirements on affected 14.1 builds. Public researcher reporting later described exploitation attempts after disclosure and PoC availability. Citrix-managed cloud services were updated by Cloud Software Group.
References
- Citrix CTX696939 – August 19, 2026: https://support.citrix.com/external/article/CTX696939/netscaler-adc-and-netscaler-gateway-secu.html
Impacted Systems
- Vendor/product: NetScaler ADC and NetScaler Gateway.
- Affected: 14.1 before 14.1-73.32; 13.1 before 13.1-63.21; NetScaler ADC FIPS before 14.1-73.32 FIPS; 13.1 FIPS/NDcPP before 13.1-37.277.
- Deployment: customer-managed appliances; Secure Private Access Hybrid deployments using NetScaler instances are also affected.
- Required role: Gateway (SSL VPN, ICA Proxy, CVPN, RDP Proxy) or AAA virtual server; affected 14.1 configurations have SAML-action requirements documented by Citrix.
- Cloud-managed Citrix services are not customer patch targets because Cloud Software Group applied updates.
Why this matters
NetScaler is Internet-facing identity and remote-access infrastructure. Authentication bypass can provide access at the perimeter without normal credential validation.
Exploitation Status
Citrix confirms the vulnerability and fixed builds. Researcher reporting described exploitation attempts after disclosure; Citrix’s bulletin itself does not provide attacker IOCs.
What this hunt looks for
Available Microsoft Sentinel telemetry can be reviewed for new external sources, unusual SAML/login traffic, authentication/session anomalies, correlated outbound activity, and NetScaler Syslog instability where those logs are ingested.
Required logs
Required logs vary by hunt and are identified by the Sentinel tables referenced in each query below.
Hunt 1 – First-Pass: New External Sources Reaching NetScaler Gateway or AAA
let Baseline = CommonSecurityLog
| where TimeGenerated between (ago(30d) .. ago(7d))
| summarize by SourceIP, DestinationIP;
CommonSecurityLog
| where TimeGenerated >= ago(7d)
| where DestinationPort in (443,8443)
| join kind=leftanti Baseline on SourceIP, DestinationIP
| summarize Events=count(), FirstSeen=min(TimeGenerated), LastSeen=max(TimeGenerated), URLs=make_set(tostring(column_ifexists("RequestURL","")),30), Actions=make_set(DeviceAction,20) by SourceIP, DestinationIP
| sort by FirstSeen descHunt 2 – SAML Authentication Activity Against NetScaler
CommonSecurityLog
| where TimeGenerated >= ago(30d)
| extend Url=tostring(column_ifexists("RequestURL",""))
| where Url has_any ("saml","login","auth","vpn","gateway")
| summarize Requests=count(), FirstSeen=min(TimeGenerated), LastSeen=max(TimeGenerated), URLs=make_set(Url,50), Actions=make_set(DeviceAction,20) by SourceIP, DestinationHostName
| sort by LastSeen descHunt 3 – Repeated Authentication or Session Activity From Rare Sources
CommonSecurityLog
| where TimeGenerated >= ago(30d)
| extend Url=tostring(column_ifexists("RequestURL",""))
| where Url has_any ("saml","login","auth","vpn","gateway")
| summarize Requests=count(), UniqueURLs=dcount(Url), FirstSeen=min(TimeGenerated), LastSeen=max(TimeGenerated) by SourceIP, DestinationIP, bin(TimeGenerated,10m)
| where Requests >= 50
| sort by Requests descHunt 4 – NetScaler Syslog Authentication and Session Anomalies
Syslog
| where TimeGenerated >= ago(30d)
| where SyslogMessage has_any ("NetScaler","Citrix Gateway","AAA","SAML","SSLVPN")
| where SyslogMessage has_any ("login","authentication","session","token","denied","failed","success")
| project TimeGenerated, Computer, HostIP, ProcessName, SeverityLevel, SyslogMessage
| sort by TimeGenerated ascHunt 5 – Inbound Gateway Access Followed by Outbound Activity
let Inbound = CommonSecurityLog
| where TimeGenerated >= ago(30d)
| where DestinationPort in (443,8443)
| project InboundTime=TimeGenerated, ApplianceIP=DestinationIP, ExternalSource=SourceIP;
CommonSecurityLog
| where TimeGenerated >= ago(30d)
| join kind=inner Inbound on $left.SourceIP == $right.ApplianceIP
| where TimeGenerated between (InboundTime .. InboundTime + 15m)
| where DestinationIP != ExternalSource
| project InboundTime, TimeGenerated, ApplianceIP, ExternalSource, DestinationIP, DestinationPort, Protocol, DeviceAction
| sort by InboundTime ascHunt 6 – NetScaler Error, Crash, or Unexpected Restart Events
Syslog
| where TimeGenerated >= ago(30d)
| where SyslogMessage has_any ("NetScaler","Citrix Gateway","nsaaad","nsppe")
| where SyslogMessage has_any ("crash","segfault","core","restart","terminated","exception","error")
| project TimeGenerated, Computer, HostIP, ProcessName, SeverityLevel, SyslogMessage
| sort by TimeGenerated ascDetection Notes
- No reliable exploit-specific request signature is published in the Citrix bulletin.
- Gateway traffic is naturally high-volume, so scope to known appliance IPs and baselines.
- SAML and authentication logs are more useful than raw HTTPS volume.
- CommonSecurityLog mappings vary by connector.
- Missing appliance Syslog or reverse-proxy telemetry can prevent visibility into successful bypass activity.