Skip to content

Back to the catalog

Defending Against Active Exploitation of Citrix NetScaler ADC and Gateway Appliances
cloud.google.comwriteup

Defending Against Active Exploitation of Citrix NetScaler ADC and Gateway Appliances

Mandiant and GTIG report on exploitation of the Citrix NetScaler ADC and Gateway zero-day CVE-2026-88772, active since early September 2026, alongside CVE-2026-88771. It covers the DTLS-triggered NSPPE crash, httpd.conf persistence via .deb and .sig handlers, SUID /bin/sh, and the WHIPSHOT web shell and SLAPSHOT tunneler. It gives hunting commands, log artifacts, YARA rules, patched builds and containment steps.

TL;DR Details a NetScaler zero-day campaign with WHIPSHOT and SLAPSHOT malware, plus hunting queries, YARA rules and remediation steps.
Document

What it is

Mandiant and Google Threat Intelligence Group (GTIG) report in-the-wild exploitation of CVE-2026-88772, a pre-authentication zero-day in Citrix NetScaler ADC and Gateway. Activity has run since at least early September 2026 and was identified in late September. Victims likely include government, financial services, technology, education, and legal and professional services organizations in North America and Europe. Citrix also discloses active exploitation of a second zero-day, CVE-2026-88771.

How it works

The NSPPE (packet processing engine) parses DTLS records during the pre-auth handshake. GTIG has no exploit code, but telemetry suggests malformed or fragmented record headers corrupt the heap and give root shellcode execution on the underlying FreeBSD.

Persistence then works as follows:

  • The installer web shell edits /etc/httpd.conf so .deb or .sig files run as PHP. The .sig variant uses AliasMatch ^/vpn/media/(.+).ico$ to map icon requests to /var/netscaler/gui/vpn/scripts/linux/$1.sig.
  • Web requests run unprivileged, so it runs chmod u+s /bin/sh and reboots with /netscaler/nsshutdown -R, or restarts httpd directly.
  • Shells read Base64 commands from the HTTP_NSC_LDAP or HTTP_NSC_CLIENTTYPE headers and return fake 404s. They scrub their path from /etc/crontab.
  • WHIPSHOT (PHP) relays over loopback to SLAPSHOT (Python), which writes its port to /tmp/.uxdport and takes a lock on /tmp/.uxdlock. SLAPSHOT forwards arbitrary TCP into the internal network and exits after 10 minutes idle (UXD_IDLE_EXIT). In one intrusion the actor used it for internal reconnaissance and credential theft.
flowchart LR
    A[UDP/443 DTLS malformed record] --> B[NSPPE heap corruption, root shell]
    B --> C[httpd.conf edit + SUID /bin/sh + reboot]
    C --> D[WHIPSHOT via fake .ico/.deb request]
    D --> E[SLAPSHOT loopback tunnel]
    E --> F[Internal recon, credential theft]

Preconditions / Affected

NetScaler ADC and Gateway appliances on builds below the fixed releases. The DTLS and UDP/443 path is specific to CVE-2026-88772. The page does not say how CVE-2026-88771 is triggered.

What to do

Patch (Mandiant's recommended option) to 14.1-73.37 or later on the 14.1 track, or 13.1-64.23 or later of 13.1. FIPS and NDcPP builds exist. If a build is missing from the portal, open a Severity 1 case with Citrix.

Hunt first, with these checks:

grep -En -i "application/x-httpd-php|php_flag|AliasMatch" /etc/httpd.conf
ls -l /bin/sh
ls -la /tmp/.uxdport* /tmp/.uxdlock
ps aux | grep -E "python.*(\.uxd|uxdport|uxdlock|base64)"
grep -E -i "\.(deb|sig|rpm|tgz|sh|so|dat|ico|png|html)" /var/log/httperror*
grep -E "/vpn/media/|/vpn/scripts/|/vpn/theme/" /var/log/httpaccess.log* | awk '$9 ~ /200|404/ && $10 > 5000'

A -rwsr-xr-x root-owned /bin/sh means compromise. The page also gives file and grep -rlE "<\?php|eval\(|base64_decode\(|shell_exec\(" sweeps of the client plug-in directories, which should hold only binaries and archives. Citrix publishes an IOC Scanner in its security advisory dashboard.

Log signatures of exploitation:

  • Syslog: SSL_HANDSHAKE_FAILURE with ClientVersion DTLSv1.0 and Reason "Handshake failure-Internal Error".
  • /var/log/messages: NSPPE-<##> exit with orphan rings and pitboss ... NOT restarting NSPPE. A DTLS failure followed within minutes by an NSPPE crash on the same appliance is a high-priority signal.

/var/log/messages is not in standard ns.log forwarding, so confirm the SIEM receives it, plus httpaccess.log and httperror*.

If the page's compromise indicators match:

  • Isolate the node and stop HA configuration sync until both nodes are checked, so a modified httpd.conf does not replicate.
  • Restrict egress, and block outbound TCP/25.
  • Snapshot VPX memory before rebooting.
  • Rotate credentials after patching: admin and local accounts, SSH keys, TLS keys, LDAP bind, RADIUS, TACACS, SNMP and NITRO credentials.
  • Revoke active sessions (Citrix CTX584227) and review StoreFront, Delivery Controllers and Windows logs.

If patching must wait, disable DTLS where not needed and block inbound UDP/443 on an upstream firewall, since local ACLs act only after traffic reaches nsppe.

The page includes four YARA rules (WHIPSHOT, SLAPSHOT, httpd.conf tampering, NSC-header web shells), a persistence-script rule, and Google SecOps rule names. IOCs are in a GTI Collection for registered users.

Caveats

The DTLS and UDP/443 controls do not mitigate CVE-2026-88771, so only a fixed build covers both. Blocking UDP/443 or IP allow-listing may be impractical for large remote workforces. The initial-access mechanism is inferred from telemetry, not exploit code. Reboot-based persistence means a snapshot should precede any restart. Hunting artifacts can be scrubbed, so check the error logs, which may keep entries when access logs are altered.

Organisations named here

  • NSPPE
  • pitboss
  • SUID

CVEs named here

  • CVE-2026-88771
  • CVE-2026-88772

Technologies named here

  • Citrix NetScaler ADC
  • Citrix NetScaler gateway
  • YARA
  • Google Security Operations
  • Citrix NetScaler
  • PHP
  • Python
  • Apache
  • VPN
  • Mandiant
  • Web shell
  • Citrix CTX584227
  • Citrix IOC Scanner
  • grep, file, ls and ps
  • GTI Collection
  • Mandiant hardening guidance for vSphere
  • NetScaler 13.1 track (fixed in 13.1-64.23 and later)
  • NetScaler 14.1-FIPS and 13.1-FIPS/NDcPP deployments (specific patched builds available)
  • NetScaler 14.1 track (fixed in 14.1-73.37 and later)
  • NetScaler Packet Processing Engine (NSPPE) on FreeBSD
  • NetScaler VPX virtual appliances (VMware vSphere and other hypervisors)
  • sockstat

Techniques named here

  • Command delivery via custom HTTP headers
  • Egress monitoring and default-deny outbound rules
  • File integrity and configuration monitoring
  • Icon aliasing with AliasMatch
  • In-memory Python execution with nohup
  • Log and crontab scrubbing
  • Loopback IPC tunneling
  • Spoofed HTTP 404 responses
  • SUID shell privilege persistence
  • Web shell persistence via httpd.conf handler masquerading

Threat actors named here

  • WHIPSHOT
  • SLAPSHOT
  • nginstaller web shell variants: lightweight PHP installer web shells staged as .deb and .sig files, using the HTTP_NSC_LDAP and HTTP_NSC_CLIENTTYPE headers