
Exécution de code à distance sans authentification sur Confluence via injection OGNL (CVE-2022-26134)
Confluence Pre-Auth Remote Code Execution via OGNL Injection (CVE-2022-26134)
Le 30 mai 2022, une organisation nommée Volexity a identifié une vulnérabilité RCE non authentifiée (score de 9,8 selon le NIST) dans les éditions Confluence Server et Data Center d'Atlassian (https://www.atlassian.com/software/confluence).
Confluence est un cadre collaboratif de documentation et de gestion de projet pour les équipes. Confluence aide à suivre l'état d'avancement des projets en offrant un espace de travail centralisé pour les membres.
Les versions suivantes de Confluence sont vulnérables à cette CVE :
Vous pouvez consulter l'entrée NIST pour CVE-2022-26134 ici (https://nvd.nist.gov/vuln/detail/CVE-2022-26134).
Cette CVE exploite une vulnérabilité dans le langage d'expression OGNL (Object-Graph Navigation Language) pour Java. OGNL est utilisé pour obtenir et définir les propriétés d'objets Java, entre autres.
Par exemple, OGNL est utilisé pour lier des éléments front-end tels que des zones de texte à des objets back-end et peut être utilisé dans des applications web basées sur Java comme Confluence. Nous pouvons voir comment OGNL est utilisé dans la capture d'écran ci-dessous. Des valeurs sont saisies dans un formulaire web, où ces valeurs seront stockées dans des objets de l'application.
Exploitation Nous pouvons abuser du fait qu'OGNL peut être modifié ; nous pouvons créer une charge utile pour tester et vérifier les exploits.
Afin d'exploiter cette vulnérabilité dans OGNL, nous devons faire une requête HTTP GET et placer notre charge utile dans l'URI. Par exemple, nous pouvons demander à l'environnement d'exécution Java d'exécuter une commande comme créer un fichier sur le serveur : "${@java.lang.Runtime@getRuntime().exec("touch /tmp/thm/")}/".
Cela devra être encodé en URL. Vous pouvez utiliser ce site web pour vous aider à encoder vos charges utiles en URL (notez que votre charge utile curl devra se terminer par un / final et non $2F). Commande : user@host~ curl -v http://<target_ip>:8090/%24%7B%40java.lang.Runtime%40getRuntime%28%29.exec%28%22touch%20/tmp/thm%22%29%7D/ Maintenant, vérifiez que la commande ci-dessus s'est exécutée avec succès en exécutant la commande "ls /tmp" dans la commande ci-dessus.
Il existe quelques PoC fonctionnels, je vais démontrer le PoC de Samy Younsi (Mwqda) écrit en Python et hébergé sur GitHub (https://github.com/h3v0x/CVE-2022-26134).
Détection
Fichiers journaux Confluence est un serveur Apache Tomcat dont les journaux se trouvent dans /opt/atlassian/confluence/logs. Vous pouvez utiliser des commandes comme grep pour rechercher les requêtes HTTP GET de charges utiles qui utilisent l'environnement d'exécution Java pour exécuter des commandes. Par exemple :
grep -R "/%24%7B%40java.lang.Runtime%40getRuntime%28%29.exec%28%22" dans catalina.out
YARA Si Yara est installé sur le serveur exécutant Confluence, Volexity (les découvreurs de la vulnérabilité) a créé la règle Yara à utiliser, fournie dans ce dépôt ainsi que sur le lien suivant (https://github.com/volexity/threat-intel/blob/main/2022/2022-06-02%20Active%20Exploitation%20Of%20Confluence%200-day/indicators/yara.yar).
Correctif Atlassian a publié un avis pour ses produits affectés par cette CVE, que vous pouvez lire ici (https://confluence.atlassian.com/doc/confluence-security-advisory-2022-06-02-1130377146.html). Pour résoudre le problème, vous devez mettre à niveau votre version de Confluence. La liste suggérée au moment de la publication est :
N'oubliez pas qu'OGNL est un langage d'expression pour les applications web basées sur Java, donc cette vulnérabilité s'appliquera également à d'autres applications web exécutant les mêmes classes que Confluence !
Matériel de lecture supplémentaire :