Rapport CTI technique du 2 octobre 2026
Résumé exécutif
Deux vulnérabilités critiques de Citrix NetScaler ADC et NetScaler Gateway sont exploitées comme zero-days depuis au moins début septembre 2026. CVE-2026-88771 est une faille de validation d'entrée qui aboutit à une exécution de commande sans authentification sur toute configuration. CVE-2026-88772 est une corruption mémoire dans le moteur de paquets, atteignable avant authentification sur les appliances où DTLS est actif, c'est à dire par défaut sur les serveurs virtuels VPN. Citrix a confirmé l'exploitation le 27 septembre et publié des correctifs pour huit failles. La CISA a inscrit les deux au catalogue KEV.
Le point que doivent retenir les équipes défensives : plusieurs cabinets indépendants (Mandiant et Google Threat Intelligence Group, LevelBlue, watchTowr) décrivent une post-exploitation conçue pour survivre à la mise à jour. Création d'un compte administrateur discret dans la configuration, webshells PHP déguisés en ressources statiques, modification de /bin/sh et vol de la configuration complète de l'appliance. Appliquer le correctif ne suffit donc pas. Toute appliance exposée durant septembre doit faire l'objet d'une chasse et d'une rotation complète des secrets.
Chronologie
| Date | Événement |
|---|---|
| Début septembre 2026 | Exploitation de CVE-2026-88772 observée rétroactivement par Mandiant |
| 15 septembre 2026 | Fin de maintenance de la branche NetScaler 13.1 |
| 26 septembre 2026 | watchTowr signale des rumeurs crédibles de RCE NetScaler, des administrateurs coupent leurs appliances |
| 27 septembre 2026 | Bulletin Citrix CTX697096, exploitation confirmée, correctifs pour 8 CVE |
| 29 septembre 2026 | Exploitation de masse de CVE-2026-88771 après diffusion d'un PoC |
| 30 septembre 2026 | Rapports Mandiant/GTIG (WHIPSHOT, SLAPSHOT) et ajout au KEV CISA |
| 1er octobre 2026 | LevelBlue THOR publie les artefacts de post-exploitation observés chez plusieurs clients |
Fiche vulnérabilité (format fiche CTI)
CVE-2026-88771 | CVSS v4 9,5 | NetScaler ADC et Gateway, toutes configurations
Validation d'entrée insuffisante conduisant à l'exécution de commandes sans authentification. Aucune fonctionnalité particulière requise, la configuration par défaut est concernée. LevelBlue a relevé des événements d'authentification dont les champs portaient des variantes des chaînes pitboss et NSPPE, marqueurs de l'activité. PoC disponible : oui, diffusé publiquement le 29 septembre selon Help Net Security, d'où une bascule vers l'exploitation opportuniste. Patch : 14.1-73.37, 13.1-64.23 et équivalents FIPS/NDcPP.
CVE-2026-88772 | CVSS v4 9,5 | NetScaler avec DTLS actif (défaut sur les serveurs virtuels VPN)
Débordement mémoire dans le Netscaler Packet Processing Engine lors de la négociation DTLS, avant authentification. D'après GTIG, l'exploitation réussie laisse deux traces corrélées dans les journaux : un échec de poignée de main SSL en DTLSv1.0 avec le motif « Handshake failure-Internal Error », suivi d'un arrêt du processus NSPPE que le chien de garde ne parvient pas à relancer. PoC disponible : pas de code d'exploitation public complet, mais watchTowr a diffusé une analyse et un générateur d'artefacts de détection. Patch : mêmes versions. Mitigation temporaire : désactiver DTLS et bloquer l'UDP/443 entrant, ce qui ne couvre pas CVE-2026-88771.
Les builds 14.1-73.32 et 13.1-63.21, qui corrigeaient CVE-2026-19490 en août, restent dans la plage vulnérable.
Diagramme de la chaîne d'attaque

Trajet d'intrusion à travers les périmètres, d'une appliance exposée vers les données internes. Sources : Citrix CTX697096, Mandiant/GTIG, LevelBlue THOR, watchTowr.
Analyse technique
Étape 1 : accès initial sans authentification
Les deux failles donnent un pied dans la place avant toute authentification. CVE-2026-88772 vise le chemin DTLS sur UDP et aboutit, selon GTIG, à une exécution avec les privilèges root sur le FreeBSD sous-jacent. CVE-2026-88771 passe par le traitement des données d'authentification et aboutit à l'exécution de commandes. Dans les deux cas, l'appliance exposée sur Internet est le point d'entrée, sans credentials.
Étape 2 : installation du webshell déguisé
La première action observée est le dépôt d'un webshell. Mandiant décrit une modification du fichier httpd.conf d'Apache pour que des extensions inattendues (fichiers .deb ou .sig) soient traitées comme du PHP. Une redirection fait ensuite servir un faux fichier .ico par le shell caché. Le webshell PHP WHIPSHOT lit ses commandes dans des en-têtes HTTP successifs encodés en base64, désactive son propre reporting d'erreurs et répond systématiquement par un code 404 pour ne rien laisser paraître dans les journaux du serveur web.
Étape 3 : persistance et compte superutilisateur
LevelBlue a observé un script Perl de seconde étape qui modifie /flash/nsconfig/ns.conf pour créer un compte local nommé sec_monitor doté du rôle superuser. En parallèle, les permissions de /bin/sh sont passées en setuid root pour que les commandes lancées via le shell conservent les privilèges. L'attaquant dispose alors d'un accès administrateur qui subsiste après redémarrage et qui n'est pas retiré par une simple mise à jour firmware.
Étape 4 : vol de configuration et pivot interne
Le même script archive le répertoire /flash/nsconfig et l'exfiltre vers un serveur distant, puis supprime l'archive et s'efface. La configuration d'un NetScaler contient des secrets de liaison LDAP, RADIUS, des certificats et des clés. L'outil Python SLAPSHOT ouvre ensuite un tunnel TCP depuis la passerelle vers le réseau interne, ce qui permet la reconnaissance et la recherche d'identifiants au-delà de la bordure. SLAPSHOT ferme les sessions inactives après 15 minutes et se supprime après 10 minutes sans activité, effaçant ses fichiers de port et de verrou.
Étape 5 : pourquoi le patch ne suffit pas
Mandiant insiste : mettre à jour vers une version corrigée n'évince pas un attaquant déjà installé et ne traite pas le risque lié aux identifiants volés. Le compte sec_monitor, le /bin/sh setuid, les webshells et les secrets exfiltrés survivent à l'upgrade. Les organisations doivent considérer toute appliance exposée pendant la fenêtre d'exploitation comme potentiellement compromise et faire tourner les secrets après, et non avant, l'application du correctif.
Indicateurs de compromission
| Type | Valeur |
|---|---|
| Compte malveillant | sec_monitor (rôle superuser dans ns.conf) |
| Fichier (webshell) | /var/netscaler/logon/LogonPoint/.local_journal |
| Artefact SLAPSHOT | /tmp/.uxdport, /tmp/.uxdlock |
| Journal | SSL_HANDSHAKE_FAILURE en DTLSv1.0, motif « Handshake failure-Internal Error » corrélé à un crash NSPPE |
| Journal | Événements d'authentification contenant les chaînes pitboss ou NSPPE |
| URL de récupération | 64.94.85[.]67:443/update_c08937.pl |
| URL de récupération | 31.56.197[.]72:9090/lula |
| URL de récupération | 23.27.143[.]20:9000/main.py |
| IPv4 (reverse shell) | 45.141.21[.]130 |
| Altération système | /bin/sh en setuid root ; httpd.conf traitant .deb/.sig comme PHP |
MITRE ATT&CK
Mandiant n'a pas publié de matrice ATT&CK formelle pour cette campagne. Le tableau ci-dessous est notre lecture technique des artefacts rapportés.
| Tactique | Technique | ID | Justification |
|---|---|---|---|
| Initial Access | Exploit Public-Facing Application | T1190 | Exploitation pré-auth de CVE-2026-88771 et CVE-2026-88772 |
| Execution | Command and Scripting Interpreter | T1059 | Charges Perl et Python de seconde étape |
| Persistence | Server Software Component: Web Shell | T1505.003 | WHIPSHOT et webshell PHP déguisé |
| Persistence | Create Account: Local Account | T1136.001 | Compte sec_monitor en superuser |
| Privilege Escalation | Setuid and Setgid | T1548.001 | /bin/sh passé en setuid root |
| Defense Evasion | Masquerading: Match Legitimate Name | T1036.005 | Webshell mappé sur des URL de ressources CSS/ICO |
| Defense Evasion | Indicator Removal: File Deletion | T1070.004 | SLAPSHOT et script Perl s'autosuppriment |
| Collection | Data from Configuration Repository | T1602 | Exfiltration de /flash/nsconfig |
| Command and Control | Protocol Tunneling | T1572 | Tunnel TCP SLAPSHOT vers le réseau interne |
Remédiation : checklist opérationnelle
- Mettre à jour vers 14.1-73.37, 13.1-64.23 ou les équivalents FIPS/NDcPP sans délai. Si l'upgrade immédiat est impossible, désactiver DTLS et bloquer l'UDP/443 entrant pour couvrir CVE-2026-88772 (ne protège pas de CVE-2026-88771).
- Avant de patcher, préserver les preuves : instantané de la VPX, journaux distants (syslog, NetScaler Console), bundle de support, core dump du moteur de paquets.
- Chasser les IOC : compte sec_monitor dans ns.conf, /bin/sh setuid, entrées anormales dans httpd.conf (.deb/.sig traités comme PHP), fichiers /tmp/.uxdport et /tmp/.uxdlock, webshell .local_journal.
- Corréler dans les journaux les échecs de poignée de main DTLSv1.0 « Handshake failure-Internal Error » avec les crashs NSPPE, et les événements d'authentification portant pitboss ou NSPPE.
- Bloquer et rechercher tout trafic vers 64.94.85[.]67, 31.56.197[.]72, 23.27.143[.]20 et 45.141.21[.]130 depuis début septembre.
- Après le patch, faire tourner tous les secrets manipulés par l'appliance : comptes admin, clés SSH, certificats TLS, identifiants LDAP et RADIUS.
- Retirer définitivement l'interface de gestion d'Internet.
- Exécuter les scripts de vérification du NCSC-NL sur appliance en service et sur images, en tenant compte de leurs limites.
Sources
- Citrix, bulletin CTX697096
- The Hacker News, Two Unpatched Citrix NetScaler RCE Zero-Days Under Active Exploitation
- The Hacker News, NetScaler Post-Exploitation Payload Creates Superuser
- Help Net Security, Suspected state-sponsored hackers exploited NetScaler zero-day (CVE-2026-88772)
- Security Affairs, WHIPSHOT and SLAPSHOT: the tools behind an active Citrix NetScaler campaign
- MITRE ATT&CK T1190
- MITRE ATT&CK T1572