← Back to Feed CACHED · 2026-10-15 16:52:02 · CACHE_KEY CVE-2026-107406
CVE-2026-107406 · CWE-119 · Disclosed 2026-10-08

NetScaler ADC/Gateway Pre-Authentication Remote Code Execution via SAML Memory Overflow

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

Someone left the castle gate's lock mechanism exposed, and an attacker just needs to whisper the right SAML incantation to walk in as root

CVE-2026-107406 is a heap buffer overflow in the SAML authentication processing of Citrix NetScaler ADC and NetScaler Gateway. When an appliance is configured as a SAML Service Provider (SP) or Identity Provider (IdP), a crafted SAML request with oversized signature or attribute elements overflows fixed-size buffers in the packet engine (nsppe), corrupting adjacent heap metadata and function pointers. This achieves unauthenticated remote code execution with root privileges — or, at minimum, a denial-of-service crash. All builds before 14.1-73.46 and 13.1-64.29 are affected, with older builds (pre-14.1-73.37, pre-13.1-64.23) vulnerable in both SP *and* IdP configurations, while intermediate builds (14.1-73.37–73.41, 13.1-64.23–64.28) are vulnerable only in IdP mode. FIPS and NDcPP variants track the same ranges. End-of-life branches (12.1, 13.0) receive no patch at all.

No vendor CVSS baseline was provided by the submitter, but Citrix's own bulletin assigns CVSS v4.0 9.5 with AC:H — acknowledging that heap exploitation requires some precision. Our assessment lands at CRITICAL / 9.4 because the attack-complexity friction is substantially offset by (a) a public Python PoC (ctroy999/CVE-2026-107406) demonstrating reliable pre-auth root shells, (b) 21,000–42,000 internet-facing NetScaler instances tracked by Shadowserver and Censys, (c) Feedly threat-intel reporting exploitation activity observed via infosec.exchange as of October 13, 2026, and (d) Poppelgaard's advisory noting Citrix has 'observed targeted attacks on unmitigated appliances.' NetScaler is a canonical network-edge appliance — the blast radius of a compromised appliance is perimeter breach, credential theft from the SAML authentication plane, and direct internal-network pivot. The CRITICAL floor holds.

"Pre-auth RCE on your perimeter gateway via a crafted SAML request. PoC is public. Patch now."
02 · The Attack Path

5 steps from start to impact.

STEP 01

Identify internet-facing NetScaler

The attacker scans for NetScaler ADC/Gateway login panels using Shodan, Censys, or FOFA. NetScaler's default HTTP response headers (NS-Cache, Citrix-TransactionId) and the /vpn/index.html login page fingerprint make discovery trivial. Shadowserver currently tracks ~21,000 exposed ADC instances and ~2,300 Gateway instances; Censys reports ~42,000 total.
Conditions required:
  • Internet-connected NetScaler instance with HTTPS listener
Where this breaks in practice:
  • None — mass scanning is automated and the fingerprint is well-known
Detection/coverage: Shodan/Censys/FOFA dorks; Shadowserver honeypot feeds; CyCognito ASM platform identifies NetScaler in attack-surface inventories
STEP 02

Probe for SAML endpoint

The attacker sends a SAML AuthnRequest or accesses the IdP metadata URL (/saml/login, /cgi/samlauth, or the configured SP consumer endpoint). A valid SAML error response confirms the appliance has SAML authentication configured. CyCognito research found ~30% of observed NetScaler assets present authentication login panels suggesting SAML is active.
Conditions required:
  • NetScaler configured as SAML SP or SAML IdP
Where this breaks in practice:
  • Non-SAML deployments (pure load-balancing, non-SAML VPN) are not reachable — this is the primary attack-surface reducer
  • External scanners cannot confirm SAML config with certainty, only infer from response behavior
Detection/coverage: WAF rules inspecting SAML POST/Redirect bindings to NetScaler virtual servers; anomalous SAML metadata requests in access logs
STEP 03

Send crafted SAML payload

Using the public PoC (ctroy999/CVE-2026-107406), the attacker sends a SAML request containing oversized XML signature and attribute elements that exceed the fixed-size heap buffer allocated by the packet engine's SAML parser. The PoC supports batch targeting (--list targets.txt) and operates in check, exploit, or DoS modes. No authentication is required — the overflow occurs during pre-auth SAML processing.
Conditions required:
  • Network reachability to the SAML endpoint on port 443
  • No WAF or IPS rule blocking oversized SAML payloads
Where this breaks in practice:
  • AC:H in CVSS reflects that heap layout must be favorable for code execution vs. crash — but the PoC demonstrates reliable exploitation
  • Some next-gen WAFs may block abnormally large SAML XML payloads, though most default rulesets do not inspect SAML content depth
Detection/coverage: IDS/IPS signatures for oversized SAML <samlp:AuthnRequest> or <saml:Assertion> elements; Suricata rule SID for CVE-2026-107406 if published; packet-engine crash logs (nsppe core dumps)
STEP 04

Achieve root-level code execution

The heap overflow corrupts adjacent metadata and function pointers in the packet engine process. The attacker's payload redirects execution flow to shellcode or ROP gadgets, achieving arbitrary command execution as root on the FreeBSD-based NetScaler OS. The PoC's -c flag demonstrates direct command execution (-c 'id; uname -a'). Root on a NetScaler means full control of the appliance's configuration, TLS private keys, session cookies, and network routing.
Conditions required:
  • Successful heap overflow with favorable heap layout
Where this breaks in practice:
  • ASLR and heap randomization on modern NetScaler builds may reduce first-attempt reliability, but the PoC accounts for this
  • Crash-before-exploit attempts produce nsppe restarts that are detectable
Detection/coverage: Unexpected nsppe process restarts; nsaaad (auth daemon) crashes in /var/nslog/; new files in /nsconfig/.slap/ or /var/tmp/.ux/; unexpected cron entries or admin accounts in ns.conf
STEP 05

Pivot to internal network

With root access on the perimeter appliance, the attacker harvests SAML signing keys, LDAP bind credentials stored in ns.conf, active session cookies, and TLS certificates. They can inject webshells for persistent access, modify routing to intercept traffic, or use the appliance's internal-facing interfaces to reach backend servers directly. Historical NetScaler compromises (CVE-2023-3519, CVE-2023-4966 'Citrix Bleed') demonstrate that attackers immediately pivot to AD reconnaissance, credential harvesting, and ransomware staging.
Conditions required:
  • Persistent root access on the NetScaler appliance
  • Internal network segments reachable from the appliance's management or backend interfaces
Where this breaks in practice:
  • Network microsegmentation may limit lateral movement from the NetScaler VLAN
  • EDR on internal hosts may detect post-exploitation tools deployed from the appliance
Detection/coverage: NetFlow anomalies from NetScaler management IPs; LDAP queries from the appliance to unexpected DCs; IoC sweep using Poppelgaard's checker tool (132 attacker IPs, 18 C2 domains)
03 · Compensating Control

1
CRITICAL 9.4→IGNORE 0.0
SEVERITY REDUCED
Upgrade to 14.1-73.46 or 13.1-64.29 immediately — This is the only complete remediation. No workaround exists. Per the noisgate mitigation SLA for CRITICAL, deploy within 3 days (by 2026-10-19). Prioritize appliances with confirmed SAML configuration first, then all remaining NetScaler instances. Note: the Oct 3 patch (14.1-73.41) is itself vulnerable — do not assume prior patching is sufficient. Run show ns version on every appliance and compare against fixed build numbers.
2
CRITICAL 9.4→HIGH 7.5
SEVERITY REDUCED
Deploy WAF/IPS rules to block oversized SAML payloads — If patching cannot be completed within 3 days, deploy a WAF rule upstream of the NetScaler that inspects and blocks SAML AuthnRequest and Response XML payloads exceeding normal size thresholds (e.g., >64KB). This is an imperfect stop-gap — it may break legitimate large SAML assertions from some IdPs, and a sophisticated attacker may craft payloads below the threshold. Deploy within 24 hours as a bridge to patching.
3
CRITICAL 9.4→IGNORE 0.0
SEVERITY REDUCED
Disable SAML authentication on affected appliances — If the appliance's SAML SP or IdP configuration is not business-critical, remove the samlAction or samlIdPProfile configuration entries entirely. This eliminates the vulnerable code path. This breaks SSO for users authenticating via SAML — assess business impact before executing. Non-SAML authentication methods (LDAP, RADIUS, local) remain functional. Restores the appliance to a non-vulnerable state for this specific CVE.
4
CRITICAL 9.4→MEDIUM 5.5
SEVERITY REDUCED
Restrict SAML endpoint access by source IP — If SAML authentication is only consumed by known IdPs or SPs, apply a NetScaler responder policy or upstream firewall rule restricting access to the SAML virtual server to only trusted source IPs (e.g., your IdP's egress addresses). This dramatically reduces the attack surface from 'the entire internet' to 'a handful of trusted IPs.' Does not protect against a compromised IdP.
5
CRITICAL 9.4→CRITICAL 9.4
Run Poppelgaard's IoC checker on all NetScaler appliances — Execute the netscaler-ctx697096-checker tool on every appliance to detect existing compromise indicators — webshells, persistence mechanisms, attacker IPs, and config modifications. This does not prevent exploitation but identifies appliances that may already be compromised. Run before and after patching. The tool checks 132 known attacker IPs and 18 C2 domains.
What doesn't work
  • Generic rate-limiting on the SAML endpoint — the exploit requires only a single crafted request, not a flood. Rate limiting will not prevent exploitation.
  • NetScaler's built-in AppFirewall (without SAML-specific signatures) — the default AppFirewall profile does not inspect SAML XML payload depth for buffer-overflow patterns. Custom signatures would need to be authored and are not provided by Citrix.
  • TLS client certificate authentication on the VPN vserver — the SAML processing occurs before client-cert validation in the authentication pipeline, so the overflow is triggered before the mTLS check.
  • Network segmentation behind the NetScaler — this limits post-exploitation lateral movement but does nothing to prevent the initial compromise of the appliance itself. The attacker still gets root on your perimeter gateway.
04 · Intelligence Metadata

The supporting signals.

In-the-Wild StatusFeedly threat intel reports exploitation activity observed via infosec.exchange as of October 13, 2026. Poppelgaard's advisory notes Citrix has 'observed targeted attacks on unmitigated appliances.' Not yet on CISA KEV, but CISA issued a Sept 27 alert for related NetScaler zero-days. CISA has documented 27 actively exploited Citrix flaws since Nov 2021, including 7 weaponized in ransomware.
Proof-of-ConceptPublic PoC available: ctroy999/CVE-2026-107406 on GitHub — Python exploit with check/exploit/DoS modes, pre-auth root RCE, batch targeting. Also indexed on Sploitus. A second repo techupdate24/citrix-netscaler-rce-cve-2026-107406 was noted by Feedly. No entry found on pocindex.io at time of analysis.
EPSS0.471% (0.00471) — relatively low percentile, but EPSS historically underweights edge-appliance vulns in the first two weeks after disclosure. Expect rapid increase given public PoC and exploitation reports.
KEV StatusNot listed as of 2026-10-16. Given the exploitation reports and CISA's pattern with NetScaler CVEs, KEV addition is likely imminent.
CVSS VectorCVSS v4.0: 9.5 — AV:N/AC:H/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:L. Network-reachable, no privileges, no user interaction. AC:H reflects heap exploitation complexity. Subsequent-system impact is high across C/I/A — reflecting the appliance's gateway role.
Affected Versions14.1 branch: all builds before 73.46 (SP+IdP for <73.37; IdP-only for 73.37–73.41). 13.1 branch: all builds before 64.29 (SP+IdP for <64.23; IdP-only for 64.23–64.28). FIPS/NDcPP: corresponding ranges. EOL branches (12.1, 13.0): vulnerable, no patch available.
Fixed Versions14.1-73.46, 13.1-64.29, 14.1-73.46 FIPS, 13.1-37.283 FIPS/NDcPP. ⚠️ The Oct 3 patch (14.1-73.41 for CVE-2026-88779) falls *within* the affected range — organizations who patched Oct 3 must patch again.
Internet ExposureShadowserver: ~21,000 ADC + ~2,300 Gateway instances internet-facing. Censys: ~42,000 total. Unit 42 Cortex Xpanse: ~50,277 potentially vulnerable. CyCognito: top sectors — Industrials (26.2%), Financials (11.2%), Healthcare (10.3%).
Disclosure Date2026-10-08 via Citrix security bulletin CTX697191.
Reporting / CreditsNot publicly attributed to a named researcher. Citrix coordinated disclosure. Community tooling by Thomas Poppelgaard (netscaler-ctx697096-checker) covers IoC sweep for this CVE alongside CVE-2026-88771–88779.

Sources.

  1. Citrix Security Bulletin CTX697191
  2. BleepingComputer — Citrix warns admins to patch new NetScaler RCE flaw immediately
  3. CyCognito — Emerging Threat: CVE-2026-107406 NetScaler RCE via SAML
  4. Poppelgaard — CVE-2026-88771 through CVE-2026-107406 NetScaler Guide
  5. Thomas Poppelgaard — netscaler-ctx697096-checker (IoC tool)
  6. ctroy999/CVE-2026-107406 — Public PoC Exploit
  7. Forkast — Oct 3 Fix Sits Inside Oct 8 Affected Range
  8. CISA Alert — Critical Zero-Day Vulnerabilities in Citrix NetScaler
05 · The Call

Final Verdict
= UNCHANGED to CRITICAL (9.4/10)

Why this verdict

  • Pre-auth, unauthenticated, network-reachable RCE: The attack requires zero credentials, zero user interaction, and hits the SAML endpoint on port 443 — the same port that must be open for the appliance to function. This is the most dangerous attack posture possible for a perimeter device.
  • Public weaponized PoC with root execution: The ctroy999/CVE-2026-107406 repository provides a turnkey Python exploit with batch-targeting, check/exploit/DoS modes, and direct command execution as root. This collapses the skill barrier from 'heap exploitation researcher' to 'script runner.'
  • Role multiplier — NetScaler is a canonical network-edge appliance: NetScaler ADC/Gateway is *definitionally* a perimeter device. 100% of its installed base occupies the high-value network-edge role — it IS the VPN gateway, the SAML authentication plane, the load balancer sitting between attackers and internal networks. A compromised NetScaler yields TLS private keys, LDAP bind credentials, SAML signing keys, active session tokens, and a direct network path to backend infrastructure. The blast radius is perimeter breach → credential harvest → domain compromise → fleet-scale impact. Per the deployment-role floor rule, the verdict floor is CRITICAL because the affected component is canonically a high-value-role component and ≥10% of installs occupy that role by definition (it's 100%).
  • Massive internet exposure: 21,000–50,000 internet-facing instances across critical sectors (financial, healthcare, industrial). This is not a theoretical attack surface — it is actively enumerable.
  • Exploitation signals already emerging: Feedly cites exploitation activity via infosec.exchange as of Oct 13. Poppelgaard's advisory references Citrix observing 'targeted attacks on unmitigated appliances.' Historical precedent: every major NetScaler CVE (CVE-2023-3519, CVE-2023-4966, CVE-2026-88771) was mass-exploited within days of disclosure.
  • No workaround exists: Citrix provides no mitigation short of upgrading or fully disabling SAML authentication — which breaks SSO for the entire user population.
  • AC:H provides only marginal friction: The CVSS vector includes AC:H for heap exploitation complexity, but the public PoC demonstrates reliable exploitation, reducing this to a theoretical rather than practical barrier. We deduct 0.1 from a hypothetical 9.5 baseline for this residual uncertainty rather than treating it as a meaningful downgrade.

Why not higher?

A 10.0 would require trivially reliable exploitation with no preconditions. The SAML configuration prerequisite means non-SAML NetScaler deployments (pure load-balancing, non-SAML VPN) are not vulnerable, and the heap overflow's AC:H classification means some attempts may crash the service rather than achieve code execution. These factors prevent a maximum score, though they are narrow constraints given the public PoC's demonstrated reliability.

Why not lower?

Downgrading below CRITICAL would require evidence that the high-value-role blast radius is limited — but NetScaler is *the* perimeter gateway by definition. Every instance is internet-facing, handling authentication, and bridging external-to-internal networks. The SAML prerequisite affects perhaps 30–70% of deployments (CyCognito estimates ~30% show auth panels; many more have SAML configured but not externally fingerprinted). Even at the conservative 30% estimate, that's 6,000–15,000 directly exploitable internet-facing appliances across critical infrastructure sectors. A public PoC, emerging exploitation, and no available workaround make any verdict below CRITICAL indefensible for this component class.

06 · Verification

Crowdsourced verification payload.

Run this script directly on each NetScaler appliance via SSH or console as nsroot (or any account with shell access). Invoke with: bash /tmp/check_cve_2026_107406.sh. The script checks the running firmware build and SAML configuration to determine vulnerability status. No network access or external dependencies required.

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/bin/bash
# CVE-2026-107406 Vulnerability Checker for NetScaler ADC/Gateway
# Run on the NetScaler appliance as nsroot via SSH
# Output: VULNERABLE / PATCHED / UNKNOWN

set -euo pipefail

RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'

echo "=== CVE-2026-107406 Check ==="
echo "Checking NetScaler build version and SAML configuration..."
echo ""

# Get version info
VERSION_OUTPUT=$(nsapimgr_wr.sh -ys call=ns_get_version 2>/dev/null || cat /var/nsinstall/build_version 2>/dev/null || echo "UNKNOWN")

# Try to parse major.minor-build format
if echo "$VERSION_OUTPUT" | grep -qoE '[0-9]+\.[0-9]+-[0-9]+\.[0-9]+'; then
  BUILD_STRING=$(echo "$VERSION_OUTPUT" | grep -oE '[0-9]+\.[0-9]+-[0-9]+\.[0-9]+' | head -1)
  MAJOR_MINOR=$(echo "$BUILD_STRING" | cut -d'-' -f1)
  BUILD_NUM=$(echo "$BUILD_STRING" | cut -d'-' -f2)
  echo "Detected build: $BUILD_STRING"
else
  echo -e "${YELLOW}UNKNOWN — Could not parse NetScaler version. Verify manually with 'show ns version'.${NC}"
  exit 2
fi

# Check SAML configuration
SAML_SP=false
SAML_IDP=false
NSCONF="/nsconfig/ns.conf"

if [ -f "$NSCONF" ]; then
  if grep -q 'add authentication samlAction' "$NSCONF" 2>/dev/null; then
    SAML_SP=true
    echo "SAML Service Provider (SP): CONFIGURED"
  fi
  if grep -q 'add authentication samlIdPProfile' "$NSCONF" 2>/dev/null; then
    SAML_IDP=true
    echo "SAML Identity Provider (IdP): CONFIGURED"
  fi
  if [ "$SAML_SP" = false ] && [ "$SAML_IDP" = false ]; then
    echo "SAML configuration: NOT FOUND"
    echo ""
    echo -e "${GREEN}PATCHED — No SAML SP or IdP configuration detected. This appliance is not affected by CVE-2026-107406.${NC}"
    exit 0
  fi
else
  echo -e "${YELLOW}WARNING: Cannot read $NSCONF — assuming SAML may be configured.${NC}"
  SAML_SP=true
  SAML_IDP=true
fi

echo ""

# Version comparison logic
compare_build() {
  local major_minor="$1"
  local build="$2"
  local fix_build="$3"
  # Compare build numbers as floating point
  echo "$build $fix_build" | awk '{if ($1 >= $2) print "FIXED"; else print "VULN"}'
}

case "$MAJOR_MINOR" in
  14.1)
    RESULT=$(compare_build "14.1" "$BUILD_NUM" "73.46")
    if [ "$RESULT" = "FIXED" ]; then
      echo -e "${GREEN}PATCHED — Build $BUILD_STRING is at or above the fixed version 14.1-73.46.${NC}"
      exit 0
    else
      # Check if in IdP-only range (73.37-73.41) or older (SP+IdP)
      IN_IDP_RANGE=$(echo "$BUILD_NUM" | awk '{if ($1 >= 73.37 && $1 <= 73.41) print "YES"; else print "NO"}')
      if [ "$IN_IDP_RANGE" = "YES" ]; then
        if [ "$SAML_IDP" = true ]; then
          echo -e "${RED}VULNERABLE — Build $BUILD_STRING is in the 73.37-73.41 range with SAML IdP configured. Upgrade to 14.1-73.46+.${NC}"
          exit 1
        else
          echo -e "${GREEN}PATCHED — Build $BUILD_STRING is in the IdP-only vulnerable range but no SAML IdP is configured.${NC}"
          exit 0
        fi
      else
        echo -e "${RED}VULNERABLE — Build $BUILD_STRING is below 14.1-73.37 with SAML configured (SP and/or IdP). Upgrade to 14.1-73.46+.${NC}"
        exit 1
      fi
    fi
    ;;
  13.1)
    RESULT=$(compare_build "13.1" "$BUILD_NUM" "64.29")
    if [ "$RESULT" = "FIXED" ]; then
      echo -e "${GREEN}PATCHED — Build $BUILD_STRING is at or above the fixed version 13.1-64.29.${NC}"
      exit 0
    else
      IN_IDP_RANGE=$(echo "$BUILD_NUM" | awk '{if ($1 >= 64.23 && $1 <= 64.28) print "YES"; else print "NO"}')
      if [ "$IN_IDP_RANGE" = "YES" ]; then
        if [ "$SAML_IDP" = true ]; then
          echo -e "${RED}VULNERABLE — Build $BUILD_STRING is in the 64.23-64.28 range with SAML IdP configured. Upgrade to 13.1-64.29+.${NC}"
          exit 1
        else
          echo -e "${GREEN}PATCHED — Build $BUILD_STRING is in the IdP-only vulnerable range but no SAML IdP is configured.${NC}"
          exit 0
        fi
      else
        echo -e "${RED}VULNERABLE — Build $BUILD_STRING is below 13.1-64.23 with SAML configured (SP and/or IdP). Upgrade to 13.1-64.29+.${NC}"
        exit 1
      fi
    fi
    ;;
  12.1|13.0)
    echo -e "${RED}VULNERABLE — Build $BUILD_STRING is END-OF-LIFE with no patch available. Migrate to a supported branch immediately.${NC}"
    exit 1
    ;;
  *)
    echo -e "${YELLOW}UNKNOWN — Unrecognized NetScaler version $MAJOR_MINOR. Verify manually.${NC}"
    exit 2
    ;;
esac