
Contrôle d'accès cassé côté serveur dans Confluence - CVE-2023-22515
Atlassian a été informé d'une possible vulnérabilité qui pourrait être exploitée et compromettre l'environnement via un accès administratif. Le 4 octobre 2023, Atlassian a publié un avis de sécurité concernant CVE-2023-22515, qui a obtenu un score CVE de 10,0. La vulnérabilité a été introduite dans la version 8.0.0 de Confluence Server et Data Center et est présente dans les versions <8.3.3, <8.4.3, <8.5.2.
Un attaquant peut exploiter la vulnérabilité pour créer un compte supplémentaire dans Confluence avec des privilèges administratifs complets. L'attaquant n'a besoin d'aucune information préalable pour exploiter la vulnérabilité. On pense que la vulnérabilité permet d'autres vecteurs d'attaque inconnus et doit être corrigée dès que possible.
Avec cette vulnérabilité, l'attaquant peut revenir à l'étape de configuration de Confluence, parvenant à créer un nouvel utilisateur avec un accès administratif. Tout cela est possible car Confluence est construit à l'aide du framework Apache Struts, qui dépend du package XWork. XWork permet de définir des Actions sous forme d'une classe Java. Chaque Action peut être invoquée via une URL, et la classe Java correspondante gère la requête, fait ce que l'Action exige et émet une réponse.
Ce problème se produit principalement à cause d'une action de classe, où nous pouvons invoquer des attributs via une URL
L'exploration a lieu dans l'action ServerInfoAction, où nous pouvons manipuler les getters/setters de la classe et réinitialiser la configuration.
Si vous analysez le code de la classe ServerInfoAction, vous verrez qu'elle étend la classe ConfluenceActionSupport. Ce faisant, elle hérite également de toutes ses méthodes. L'une de ces méthodes est un getter qui renvoie un objet BootstrapStatusProvider :
public class ConfluenceActionSupport extends ActionSupport implements LocaleProvider, WebInterface, MessageHolderAware {
public BootstrapStatusProvider getBootstrapStatusProvider() {
if (this.bootstrapStatusProvider == null)
this.bootstrapStatusProvider = BootstrapStatusProviderImpl.getInstance();
return this.bootstrapStatusProvider;
}
}
Nous nous intéressons à la classe BootstrapStatusProvider car elle possède une autre méthode getter que nous pouvons utiliser pour récupérer un objet ApplicationConfiguration :
public class BootstrapStatusProviderImpl implements BootstrapStatusProvider, BootstrapManagerInternal {
public ApplicationConfiguration getApplicationConfig() {
return this.delegate.getApplicationConfig();
}
}
Cet objet contient la configuration de l'application, y compris un attribut qui indique à Confluence si la configuration initiale est terminée. Cet attribut peut être modifié en utilisant un setter dans la classe ApplicationConfig :
public class ApplicationConfig implements ApplicationConfiguration {
public synchronized void setSetupComplete(boolean setupComplete) {
this.setupComplete = setupComplete;
}
}
Si nous pouvons appeler setSetupComplete(false), nous pouvons réinitialiser le processus de configuration, et nous pouvons le faire en utilisant les méthodes getters/setters comme ci-dessous ;
http://10.10.227.86:8090/server-info.action?bootstrapStatusProvider.applicationConfig.setupComplete=false
Cette URL appellera toutes les méthodes mentionnées ci-dessus, arrivant à la méthode cible responsable de la réinitialisation de la configuration.
getBootstrapStatusProvider().getApplicationConfig().setSetupComplete(false)
Ci-dessous, nous avons un exemple de serveur avec une version vulnérable de Confluence.
Essayons de redémarrer le processus de configuration en utilisant l'appel de méthode comme expliqué ci-dessus ;
http://atlassian.poc:8090/server-info.action?bootstrapStatusProvider.applicationConfig.setupComplete=false
Après avoir défini le paramètre setupcomplete sur false, nous recevrons le retour success. Cela signifie que la tentative de modification du paramètre a réussi.
Essayons de créer un nouveau compte en accédant à l'URL de configuration, que nous avons tenté de réinitialiser.
http://atlassian.poc:8090/setup/setupadministrator-start.action
Nous avons pu réinitialiser le processus de configuration et créer un nouvel utilisateur avec un accès administratif.
La vulnérabilité a été corrigée dans les versions 8.3.3, 8.4.3 et 8.5.2. Les branches de version plus récentes devraient également être sûres.
Pour plus de détails, Atlassian a publié des informations sur cette vulnérabilité sur son site web (En savoir plus - Atlassian).