Workflow

NetScaler SAML Auth Bypass (CVE-2026-19490)

CVE-2026-19490 is an unauthenticated SAML authentication bypass in Citrix NetScaler ADC and Gateway. Version flag plus a non-intrusive safe-oracle confirm.

100%

Notes on this workflow

Confirm

Safe oracle: unsigned assertion with a wrong issuer over /cgi/samlauth. No session minted. 404 = no SAML action bound.

Detect

Fingerprints Citrix NetScaler ADC and Gateway. Version is best-effort — the build is not exposed over the web.

Report

Counts checked, product hits, affected, and confirmed configs.

Targets

Hosts, IPs, or URLs, one per line. Empty input falls back to example targets.

Overview

This workflow finds Citrix NetScaler ADC and Gateway and confirms CVE-2026-19490 with a non-intrusive safe oracle. CVE-2026-19490 is an unauthenticated authentication bypass in the SAML HTTP-Redirect binding at /cgi/samlauth. The check fingerprints the public page, then confirms every detected host by sending an unsigned assertion with a wrong issuer and reading the rejectUnsignedAssertion config from the error page. It mints no session and needs no credentials, so a fleet advisory becomes an evidenced list for exposure management.

The safe oracle is the detection, not a version flag. NetScaler does not expose its build over the web, so a version-range read is best-effort. The oracle runs on every detected host and reads the config directly, which also covers hosts whose version could not be read. This page is a standalone check.

Run it on a schedule when the estate changes. New hosts and delayed patch windows are the reason the same check is worth more the second week than the first.

Pipeline

  1. Read the target list. Hosts, URLs, or ranges, one per line, become the scope.
  2. Fingerprint each host as Citrix NetScaler ADC and Gateway from the public page, then attempt a best-effort build read from the root page.
  3. Confirm every detected host with the safe oracle. An unsigned assertion with a wrong issuer is sent over the redirect binding, and the error page reveals the rejectUnsignedAssertion config without any session risk.
  4. Collect the per-host rows and emit the summary counts.

Inputs

  • Target list. Hostnames, IP addresses, CIDR ranges, or URLs, one per line. Set it in the targets node, or bind a text file. Point it at scope you are authorised to test. The check only sends read-only GET requests.

Outputs

  • results.jsonl. One row per host: URL, whether Citrix NetScaler ADC and Gateway was detected, the best-effort build read, and the affected flag.
  • confirms.jsonl. One row per detected host: the safe-oracle verdict and the rejectUnsignedAssertion config it revealed.
  • summary.json. Counts across the list: targets, product hits, affected, and confirmed configs.

Integrations

  • HTTP. Read-only GET to the product root and /cgi/samlauth. The confirm sends an unsigned assertion with a wrong issuer, only on hosts already in range. No login, no session, no exploit payload.

Sample output

The records below are illustrative and do not come from a real run. They show one Citrix NetScaler ADC and Gateway host whose build could not be read, one patched host, and one host that is not the product.

target_urlproduct_detectedversionaffectederror
https://vpn-a.example.comtruenullnullversion_unknown
https://vpn-b.example.orgtrue14.1-73.32falsenull
https://shop.example.netfalsenullnullnot_product
target_urlsaml_endpointredirect_bindingverdictconfigerror
https://vpn-a.example.comtrueactivevulnerable_configdefaultnull
https://vpn-b.example.orgfalsenullnullnullsaml_not_configured
{"cve": "CVE-2026-19490", "total_targets": 3, "product_hits": 2, "affected": 0, "not_affected": 1, "version_unknown": 1, "errors": 1, "confirmed_vulnerable_config": 1, "confirmed_strict": 0, "saml_not_configured": 1}

FAQ

Which Citrix NetScaler ADC and Gateway builds does this flag?

14.1 before 14.1-73.32, 13.1 before 13.1-63.21, and 13.1 FIPS/NDcPP before 13.1-37.277. The version flag is best-effort, because NetScaler does not expose its build over the web. The safe oracle is the primary signal and does not depend on the version.

Why is the confirm a safe oracle instead of a full exploit?

The safe oracle sends an unsigned assertion with a deliberately wrong issuer. Both configs fail without creating a session, and the error page reveals the rejectUnsignedAssertion setting. It proves the vulnerable config with zero session risk, so it is safe to run against third-party targets.

Does a flagged host mean CVE-2026-19490 was exploited?

No. A flagged row is patch lag against the range table. The confirm reveals the config state. It does not mint a session or reach past the login.

Is this check safe on production?

Yes. It sends read-only GET requests. The confirm never logs in and never builds a session. It is the non-intrusive oracle from the CVE-2026-19490 research, not the exploit path.

Does the check need credentials?

No. It fingerprints the public page and reads the version the way an external scanner would. The confirm uses a wrong-issuer assertion, so it needs no IdP configuration from you.

Get a personalized demo

See Trickest in Action

A 30-minute walkthrough. We map the platform to your stack and answer pricing and deployment questions for your environment.