Les équipements NetScaler ADC et NetScaler Gateway configurés en tant que fournisseur d’identité (IdP) SAML ou utilisant WS-Federation sont vulnérables à une sévère lecture hors limites de la mémoire (CWE-125).
Comme documenté par WatchTowr Labs et Hadrian, la vulnérabilité est déclenchée via une requête HTTP GET malveillante ciblant des points de terminaison d’authentification spécifiques. En exploitant une faille d’analyse (parsing) dans la chaîne de requête (query string), les attaquants peuvent forcer l’équipement à fuiter jusqu’à 65 Ko de mémoire contiguë du tas. Cette mémoire divulguée contient fréquemment des jetons NSSESSIONID actifs et hautement sensibles, permettant aux acteurs de la menace de contourner la MFA et de détourner des sessions VPN ou administratives existantes.
Le cœur de la vulnérabilité réside dans le moteur de traitement des paquets de NetScaler (nsppe), le démon en espace utilisateur hautement optimisé et propriétaire, responsable du traitement du trafic TCP/HTTP sur l’équipement.
Lorsqu’un équipement NetScaler est configuré comme IdP, il expose des points de terminaison tels que /saml/login et /wsfed/passive. Ces points d’accès attendent un paramètre de contexte, typiquement wctx, qui est utilisé pour maintenir l’état pendant le flux de redirection d’authentification.
Le parseur en code C de nsppe s’attend à ce que la chaîne de requête suive le formatage standard clé-valeur (ex: ?wctx=ContextData). Cependant, une faille critique existe dans la logique de vérification des limites lorsque le délimiteur = est intentionnellement omis (c’est-à-dire ?wctx suivi immédiatement de la fin de la chaîne ou d’une esperluette &).
Selon l’analyse binaire de WatchTowr :
Le parseur recherche la chaîne wctx.
Il tente de localiser le caractère = pour calculer la longueur de la charge utile.
Lorsque = est manquant, le calcul du pointeur mémoire échoue, entraînant un dépassement d’entier par le bas (integer underflow) ou un paramètre de longueur complètement erroné.
Le système alloue ensuite un tampon et effectue un memcpy() en utilisant cette valeur de longueur massive et corrompue, copiant efficacement des blocs adjacents de la mémoire du tas de nsppe dans le tampon de réponse.
La mémoire lue hors limites n’est pas simplement injectée dans le corps HTML ; elle est encodée de manière transparente en Base64 et renvoyée à l’attaquant au sein du cookie HTTP NSC_TASS (Telemetry/Assertion State) dans la réponse de redirection 302 Redirect. L’attaquant n’a plus qu’à décoder le cookie pour visualiser le vidage (dump) de mémoire brute.
3. Flux d’exploitation et préparation du tas (Heap Grooming)
L’exploitation de la CVE-2026-3055 est dangereusement triviale et ne nécessite aucune authentification préalable. Les acteurs de la menace avancés utilisent la préparation du tas (“Heap Grooming”) pour s’assurer que la mémoire divulguée contient des cibles de grande valeur plutôt que des données inutiles (junk data).
Identification de la cible : l’attaquant identifie un équipement NetScaler avec le composant SAML IdP activé (souvent vérifiable via la présence de portails de connexion spécifiques).
Pulvérisation du tas (Heap Spraying, optionnel) : l’attaquant peut envoyer de nombreuses requêtes d’authentification légitimes pour forcer l’allocation de jetons de session AAA (Authentification, Autorisation et Audit) dans des régions prévisibles du tas.
Déclenchement du bug : l’attaquant envoie la requête GET malformée : GET /wsfed/passive?wctx HTTP/1.1.
Extraction des données : l’équipement répond avec un cookie anormalement grand : Set-Cookie: NSC_TASS=[Chaine_Base64].
Détournement de session : l’attaquant décode la chaîne Base64, analyse le vidage de mémoire brute pour trouver des chaînes correspondant à NSSESSIONID=, et injecte ce cookie volé dans son propre navigateur pour contourner l’authentification.
Étant donné que la charge utile cible directement le démon nsppe et que l’équipement fonctionne comme une boîte noire, la forensique traditionnelle basée sur l’hôte est limitée. Les intervenants sur incident doivent s’appuyer massivement sur la télémétrie réseau et les journaux de l’équipement.
Journaux de l'équipement (ns.log)
Examinez /var/log/ns.log pour les requêtes HTTP ciblant /saml/login ou /wsfed/passive. Note cruciale : selon la configuration de journalisation, NetScaler peut supprimer les paramètres de requête malformés, rendant l’absence du = difficile à repérer nativement.
Journaux WAF et Reverse Proxy
Si le NetScaler se trouve derrière un WAF ou un CDN (comme Cloudflare), interrogez ces journaux de bordure. Recherchez des requêtes où l’URI contient wctx tout à la fin de la chaîne, ou suivi immédiatement par & (ex: wctx&otherparam=1).
Chasse à la phase post-exploitation (Détournement de session)
Trouver la tentative d’exploitation n’est que la première étape. Les analystes DFIR doivent déterminer si des sessions ont été détournées avec succès.
Recherchez des anomalies de “voyage impossible” (Impossible Travel) dans vos journaux AAA.
Identifiez les scénarios où un seul NSSESSIONID est soudainement utilisé par une adresse IP source ou un User-Agent radicalement différent sans événement de nouvelle connexion correspondant.
description: Détecte les requêtes HTTP GET malformées ciblant les points de terminaison SAML/WS-Fed sur Citrix NetScaler, en recherchant spécifiquement le paramètre wctx sans affectation de valeur, révélateur de la CVE-2026-3055.
logsource:
category: webserver
detection:
selection_endpoints:
c-uri|contains:
- '/saml/login'
- '/wsfed/passive'
selection_payload:
# Correspond à wctx à la fin de l'URL ou suivi directement par un autre paramètre
cs-uri-query|re: '(?i)(^|&)wctx(&|$)'
condition: selection_endpoints and selection_payload
level: critical
tags:
- attack.initial_access
- attack.t1190
- cve.2026-3055
hunt_netscaler_wctx_abuse.spl
# Requête Splunk pour identifier la chaîne de requête malformée dans les journaux de bordure
L’application d’un correctif sur l’équipement est à elle seule insuffisante pour sécuriser l’environnement s’il a été exposé. Étant donné que cette vulnérabilité divulgue des jetons de session actifs, les attaquants peuvent maintenir un accès persistant même après la mise à jour du firmware.
Mise à jour du firmware : mettez immédiatement à niveau tous les équipements NetScaler ADC et Gateway vers les versions corrigées fournies par l’éditeur.
Révocation des sessions (CRITIQUE) : vous devez impérativement terminer toutes les sessions en cours. Exécutez la commande suivante via la CLI NetScaler : kill aaa session all. Cela force tous les utilisateurs (et tout attaquant tapi dans l’ombre) à se réauthentifier, rendant inutiles les jetons NSSESSIONID volés.
Rotation des secrets : étant donné que la lecture hors limites peut divulguer tout ce qui réside dans le tas de nsppe, il est fortement recommandé de procéder à la rotation des certificats de signature SAML, des mots de passe de liaison LDAP (bind passwords) et des secrets partagés RADIUS associés configurés sur l’équipement.