NetScaler : une commande cachée dans les journaux et un tampon DTLS débordé
CVE-2026-88771 et -88772 sont exploitées sur NetScaler. Analyse du retour des logs vers un shell et du débordement lors du réassemblage DTLS.
Avis Citrix du 27 septembre 2026. Deux failles de NetScaler ADC et Gateway, CVE-2026-88771 et CVE-2026-88772, permettaient chacune une exécution de code à distance sans authentification et ont été observées en exploitation. Elles n’ont pourtant pas la même racine. La première fait entrer des données contrôlées par un client dans une commande shell via un journal ; la seconde copie une chaîne de buffers DTLS trop grande dans un tampon fixe. Les analyses de correctif de watchTowr permettent de suivre les deux mécanismes au-delà des descriptions CVE.
CVE-2026-88771 : le journal n’est pas une source fiable
NetScaler écrit des informations issues de requêtes HTTP dans ses logs, notamment des valeurs de connexion. Un script Perl de maintenance, ns_monuploadd_err.pl, recherchait ensuite des messages de panne pitboss pour retrouver le nom d’un fichier core du moteur de paquets nsppe. Dans l’ancienne version, il extrayait un fragment du log par une suite grep, sed et awk, puis réinjectait le résultat dans une autre commande shell construite sous forme de chaîne.
La première transformation ne faisait que produire du texte. Le danger se matérialisait au second usage : une valeur supposée être un nom de fichier devenait une partie de find ... -name <valeur>... exécutée par le shell. Si des métacaractères contrôlés par l’attaquant survivaient à l’extraction, le shell les interprétait comme une nouvelle instruction. Le diff et la démonstration watchTowr montrent précisément cette transition. La donnée hostile a changé de statut deux fois : d’abord requête HTTP vers log, puis log vers commande privilégiée.
Le PoC du laboratoire provoque l’écriture d’une entrée ressemblant au message recherché au moyen d’un champ de connexion, puis observe qu’une commande de vérification s’exécute avec l’identité root. Le script de maintenance ne s’exécute pas nécessairement à l’instant de la requête : watchTowr précise qu’il peut falloir attendre son passage. Ce délai ne protège pas la machine ; il complique seulement l’association temporelle entre la requête malveillante et son effet. Le chercheur note aussi que d’autres champs HTTP consignés dans les logs peuvent constituer la source, ce qui rend une règle limitée à un seul endpoint fragile.
Le correctif resserre l’extraction sur un nom de moteur et un identifiant de processus numériques, puis appelle find en lui passant des arguments distincts, sans reconstruire une ligne à interpréter par /bin/sh. Les deux changements comptent : valider un fragment aide, mais supprimer la réinterprétation par le shell ferme la frontière de confiance la plus dangereuse.
CVE-2026-88772 : taille logique et taille réelle divergent
La deuxième faille se trouve dans le traitement DTLS, TLS sur UDP. Un message de handshake peut arriver en fragments. Chaque fragment annonce la taille du message complet, son offset et sa longueur utile. Le moteur conserve aussi les octets reçus dans une chaîne de buffers NSB. watchTowr a comparé les builds 14.1-73.30 et 14.1-73.37 et constaté qu’avant correction, une fonction recopiait toute la chaîne NSB dans un tampon temporaire fixe de 35 840 octets sans vérifier sa taille cumulée.
La démonstration en laboratoire manipule la différence entre « un fragment apporte un octet utile au handshake » et « son buffer réseau conserve presque tout le record ». Une série de fragments peut satisfaire la logique de réassemblage d’un message court tout en accumulant environ 174 Ko de données dans la chaîne à copier. La copie de cette chaîne dépasse alors largement le tampon de 35 840 octets. La cause est une comptabilité discordante entre la longueur logique reconstruite et la quantité réelle d’octets que la fonction suivante copie.
Le correctif maintient un compteur d’espace restant, compare la taille de chaque NSB avant memcpy, puis décrémente le compteur après chaque copie. Cette structure rend le contrôle local à l’opération dangereuse. Citrix classe l’effet en RCE ou déni de service ; une corruption mémoire reproductible établit la primitive, tandis qu’une chaîne d’exécution de code dépend de l’état mémoire et de l’exploitation concrète. Le laboratoire publie une démonstration du débordement ; nous n’en déduisons pas que toute requête DTLS provoque une prise de contrôle fiable.
Conditions, recherche et réponse
Selon Citrix, CVE-2026-88771 concerne les déploiements ADC et Gateway dans leur configuration par défaut ; CVE-2026-88772 exige DTLS, activé par défaut sur les serveurs virtuels VPN tant qu’il n’est pas explicitement désactivé. Le même avis contient six autres CVE, mais Citrix ne confirme l’exploitation active que des deux RCE étudiées ici. Un inventaire doit donc confronter build, rôle et configuration, sans traiter toutes les huit entrées comme une campagne unique démontrée.
Pour retrouver les deux bugs dans un audit autorisé, les démarches diffèrent. Le premier demande de suivre les données d’une requête jusqu’au log, puis tous les consommateurs de ce log qui lancent des commandes. Le second demande un test différentiel des records DTLS fragmentés, la mesure séparée de la taille logique du handshake et de la somme des buffers réellement recopiés, puis l’examen du contrôle ajouté autour de memcpy. Les PoC et analyses de watchTowr sont des preuves de mécanisme sur les versions testées, pas une garantie d’absence de préconditions dans tout déploiement.
Citrix recommande les builds corrigés 14.1-73.37 ou 13.1-64.23 selon la branche, ainsi qu’une recherche de compromission pour les appliances exposées. L’enjeu est de ne pas confondre « le paquet malveillant ne fonctionne plus » avec « la machine n’a jamais exécuté une commande avant la mise à jour ». Les logs sont précisément à la fois une source possible de l’attaque et une source d’enquête ; une copie externe et intègre des journaux est donc particulièrement utile.
Sources principales : bulletin Citrix, analyse et PoC de CVE-2026-88771, analyse et PoC de CVE-2026-88772.
#rootzero
Une question sur votre exposition ?
Écrivez-nous. Une personne de l’équipe technique vous répond, sources à l’appui.