
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.
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.confso.debor.sigfiles run as PHP. The.sigvariant usesAliasMatch ^/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/shand reboots with/netscaler/nsshutdown -R, or restarts httpd directly. - Shells read Base64 commands from the
HTTP_NSC_LDAPorHTTP_NSC_CLIENTTYPEheaders 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/.uxdportand 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_FAILUREwithClientVersion DTLSv1.0andReason "Handshake failure-Internal Error". /var/log/messages:NSPPE-<##> exit with orphan ringsandpitboss ... 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.confdoes 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
Related in Threat Intel
Reverse Engineering the Six Stages of MacSync Stealer and RAT
AI-Coded Malware | Analyzing Vibe-Coded AD Enumeration | Huntress
