
Exploit pour CVE-2023-22518 dans Atlassian Confluence. Fournit un guide détaillé de la vulnérabilité, incluant la configuration de l'environnement, l'analyse de la cause racine via le diffing, et les étapes d'exploitation pour obtenir un accès administrateur.
CVE-2023-22518 in Confluence
CVE-2023-22518 : Cette vulnérabilité est décrite comme une « vulnérabilité d'autorisation incorrecte dans la base de données et le serveur de Confluence ». Elle affecte les versions sur site (On-premises) des produits Atlassian.
Configuration de l'environnement Utilisation de la version vulnérable 8.0.4 URL de téléchargement : https://product-downloads.atlassian.com/software/confluence/downloads/atlassian-confluence-8.0.4-x64.exe

Sélectionnez Installation d'essai, puis cliquez sur le lien pour obtenir une clé d'essai gratuite. Ensuite, configurez le cluster : choisissez non-cluster.

Ensuite, allez dans la configuration de la base de données -> Choisissez MySQL

Suivez les instructions :

Configurez la base de données, créez un utilisateur et un mot de passe pour la table
CREATE DATABASE securedb CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
CREATE USER 'admin123'@'localhost' IDENTIFIED BY 'supersecure';
GRANT ALL PRIVILEGES ON securedb.* TO 'admin123'@'localhost';
GRANT SUPER ON *.* TO 'your_username'@'your_host';
FLUSH PRIVILEGES;
Ensuite, éditez /etc/mysql/my.cnf. Ajoutez les lignes suivantes :
transaction-isolation = READ-COMMITTED
log_bin_trust_function_creators = 1

Ensuite, redémarrez MySQL et Confluence. Puis allez sur la page d'installation à localhost:8090 et utilisez la base de données créée pour remplir

Vérifiez que la connexion est réussie, cliquez sur Suivant. Ensuite, inscrivez-vous.

Débogage
*Diff Différenciez les deux fichiers jar des deux versions dans IntelliJ. Plus précisément, je compare les versions 8.0.4 et 7.19.16 Selon la description, différenciez le fichier confluence.jar des deux versions

La différence entre la version patchée et non patchée est @WebSudoRequired et @SystemAdminOnly WebSudoRequired est une fonctionnalité pour renforcer la sécurité des sessions administrateur. Lorsqu'on tente d'accéder à l'administration, le système demande de saisir à nouveau le mot de passe même si vous êtes déjà connecté. Cela ajoute une étape d'authentification supplémentaire pour garantir les droits d'accès administratif.
SystemAdminOnly : C'est une fonctionnalité qui limite les fonctions d'administration aux seuls comptes administrateurs. Cela garantit que seuls les comptes autorisés peuvent effectuer des opérations critiques et ayant un impact sur le système.
Placez un point d'arrêt sur validate() dans RestoreAction.class

La fonction qui enregistre le fichier téléchargé utilise getRestoreFileFromUpload

getExportDescriptor est utilisé pour décompresser et lire le contenu du fichier zip


Cependant, après le débogage, la cause racine de la vulnérabilité n'a pas encore été trouvée.
La cause décrite dans le CVE est une vulnérabilité d'autorisation. Cela nous amène à orienter notre attention vers les recherches sur les vulnérabilités du langage Java lors du processus de délégation des droits par les développeurs.
Redirigez l'attention vers le fichier struts.xml, ce fichier contient des informations sur les actions et le routage basé sur les espaces de noms ainsi que les intercepteurs.




On voit que l'espace de noms /json améliore les fonctionnalités de l'espace de noms /admin. Ainsi, les routes créées pour l'espace de noms /admin peuvent également être accessibles via l'espace de noms /json.
Dans le contexte de l'espace de noms /json, le processus de routage des requêtes implique de passer par une chaîne d'intercepteurs. L'un de ces intercepteurs, appelé WebSudoInterceptor, effectue une vérification basée sur l'URI de la requête.
Plus précisément, WebSudoInterceptor effectue les vérifications suivantes :
Si le chemin de la requête est /authenticate.action, il est ignoré. Si le chemin de la requête est /admin, il vérifie si l'attribut WebSudoNotRequired est vide ou non.
Si une requête est envoyée à '/json', alors la requête vers '/json/action' sera redirigée vers '/setup/action' et 'admin/action'. Dans ce CVE, le chemin vulnérable est '/json/setup-restore.action?synchronous=true'
Capturez la requête dans BurpSuite, GET /json/setup-restore.action . Cependant, on reçoit une réponse 'Method Not Allowed'. Essayez avec POST /json/setup-restore.action?synchronous=true et obtenez une réponse 200


Téléchargez le fichier xmlexport-200123123001.zip

et recevez la réponse

Maintenant, nous pouvons nous connecter avec le compte admin :admin

Et le résultat est le suivant
