Explication de la vulnérabilité CVE-2019-19781 impactant les systèmes Citrix NetScaler

Après avoir annoncé l’existence d’une vulnérabilité critique permettant une exécution de code arbitraire par un attaquant non authentifié sur Citrix Application Delivery Controller et Citrix Gateway, une vague de panique a saisi les 80 000 entreprises utilisant ces technologies.

Ce bulletin vous est partagé gratuitement par le CERT-XMCO dans le cadre de son service de Veille. Découvrez en détail ce service sur xmco.fr et testez-le gratuitement et sans engagement sur leportail.xmco.fr.

Aucun correctif n’est encore disponible, mais il semble possible de limiter le risque. Même si aujourd’hui, aucun exploit n’est connu publiquement, des scans à la recherche de systèmes Citrix vulnérables ont déjà été détectés.

Une appliance est configurée pour avoir une adresse IP d’administration et une adresse IP virtuelle associée à des passerelles HTTPS. Les requêtes adressées à cette adresse virtuelle sont traitées par le NetScaler Packet Processing Engine (NSPPE) qui redirige la plupart des requêtes vers la page de login du VPN plutôt que de les adresser directement à Apache. Cependant, le traitement des requêtes par ce NSPPE contient une erreur. En effet, lorsque le NSPPE reçoit une requête pour GET /vpn/index.html, il est censé renvoyer cette requête à Apache qui la traite. Cependant, en effectuant la requête GET /vpn/../vpns/ (qui n’est pas assainie), Apache transforme la route en GET /vpns/ et traite cette dernière requête normalement.

Ce répertoire /vpns/ est intéressant, car il contient du code Perl. En particulier, un fichier semble être écrit à partir d’un en-tête (qui n’est pas assaini) de la requête reçue. Il devient ainsi possible d’écrire un fichier .xml sur le serveur et de le charger. Cependant, le passage de l’écriture d’un fichier .xml au déploiement d’un webshell n’est pas encore clair.

Pour savoir si un système est vulnérable, il suffit d’exécuter la ligne de commande suivante en remplaçant le champ $TARGET par l’IP du système Citrix :
curl -vk –path-as-is https://$TARGET/vpn/../vpns/ 2>&1 | grep “You don’t have permission to access /vpns/” >/dev/null && echo “VULNERABLE: $TARGET” || echo “MITIGATED: $TARGET”

La solution de contournement recommandée consiste à mettre en place une politique de réponse spécifique à des requêtes impliquant la route /vpns/ :
add responder policy ctx267027
"HTTP.REQ.URL.DECODE_USING_TEXT_MODE.CONTAINS(”/vpns/”) && (!CLIENT.SSLVPN.IS_SSLVPN || HTTP.REQ.URL.DECODE_USING_TEXT_MODE.CONTAINS(”/../”))” respondwith403

Selon un test réalisé sur Shodan, plus de 60 000 adresses IP publiques semblent concernées et 21 jours après la publication de la solution de contournement, seul un tiers de ces systèmes l’ont appliquée. Il est donc urgent de limiter ce risque, en attendant le correctif de sécurité.


Références

Citrix NetScaler CVE-2019-19781: What You Need to Know

Référence XMCO

CXN-2020-0089

Arthur Gautier

Découvrir d'autres articles