
Exploit-Analyse zu CVE-2023-22518 für Atlassian Confluence Server, die Setup, JAR-Diffing, Root Cause und nicht autorisierte Wiederherstellung zur Wiedererlangung des Admin-Zugriffs behandelt.
Exploit-CVE-2023-22518 CVE-2023-22518 in Confluence
CVE-2023-22518 : Diese Schwachstelle wird als „Schwachstelle bei der falschen Autorisierung in der Datenbank und dem Server von Confluence“ beschrieben. Der Fehler betrifft die On-Premises-Versionen der Atlassian-Produkte.
Richten Sie die Umgebung ein. Verwenden Sie die betroffene Version 8.0.4. Download-URL : https://product-downloads.atlassian.com/software/confluence/downloads/atlassian-confluence-8.0.4-x64.exe

Wählen Sie Trial Installation, klicken Sie dann auf den Link, um den Free-Trial-Key zu erhalten. Richten Sie anschließend den Cluster ein : wählen Sie non-cluster

Dann weiter zum Datenbank-Setup -> MySQL auswählen

Folgen Sie der Anleitung :
Download the MySQL driver
Drop the .jar file in /home/lily/atlassian/confluence/confluence/WEB-INF/lib
Restart Confluence and continue the setup process.
Datenbank konfigurieren, Benutzer und Passwort-Tabelle erstellen
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;
Danach edit /etc/mysql/my.cnf bearbeiten. Fügen Sie die folgenden Zeilen hinzu :
transaction-isolation = READ-COMMITTED
log_bin_trust_function_creators = 1

Starten Sie danach MySQL und Confluence neu. Rufen Sie dann die Installationsseite unter localhost:8090 auf und verwenden Sie die zuvor erstellte Datenbank.

Verbindung erfolgreich prüfen, auf Next klicken. Danach Sign up.

** Diff der beiden Jar-Dateien der zwei Versionen in IntelliJ **

@WebSudoRequired und @SystemAdminOnly. websudorequired ist eine Funktion zur Erhöhung der Sicherheit von Administrator-Sitzungen. Wenn man versucht, auf den Admin-Bereich zuzugreifen, fordert das System zur Eingabe des Passworts auf, auch wenn man bereits angemeldet ist. Es wird ein zusätzlicher Authentifizierungsschritt hinzugefügt, um den Verwaltungszugriff sicherzustellen.SystemAdminOnly : Eine Funktion, die die Verwaltungsfunktionen auf Administratorkonten beschränkt. Dadurch wird sichergestellt, dass nur autorisierte Konten wichtige und systemrelevante Vorgänge ausführen können.
Setzen Sie einen Breakpoint bei validate() in RestoreAction.class

Die Funktion zum Speichern der hochgeladenen Datei verwendet getRestoreFileFromUpload

GetExportDescriptor wird verwendet, um die ZIP-Datei zu entpacken und deren Inhalt zu lesen


Nach dem Debuggen wurde die Grundursache der Schwachstelle jedoch noch nicht gefunden
Die in der CVE beschriebene Ursache ist eine Autorisierungsschwachstelle. Dies lenkt unsere Aufmerksamkeit auf Forschungsarbeiten zu Java-Sprachschwachstellen, die während der Berechtigungsvergabe durch Entwickler auftreten.
Richten Sie die Aufmerksamkeit auf die Datei struts.xml. Diese Datei enthält Informationen über Aktionen und das Routing basierend auf Namespaces sowie Interceptoren.



Wir sehen, dass der Namespace /json die Funktionalität des Namespace /admin erweitert. Daher können die für den Namespace /admin erstellten Routen auch über den Namespace /json aufgerufen werden.
Im Kontext des Namespace /json durchläuft der Anfrage-Routingprozess eine Reihe von Interceptoren. Einer dieser Interceptoren, genannt WebSudoInterceptor, führt eine Prüfung anhand des Request-URI durch.
Konkret führt WebSudoInterceptor die folgenden Prüfschritte aus:
Wenn der Anforderungspfad /authenticate.action ist, wird er ignoriert. Wenn der Anforderungspfad /admin ist, wird geprüft, ob das Attribut WebSudoNotRequired leer ist.
Wenn eine Anfrage an '/json' gesendet wird, wird die Anfrage an '/json/action' an '/setup/action' und 'admin/action' weitergeleitet. In dieser CVE ist der anfällige Pfad / 'json/setup-restore.action?synchronous=true'.
Fangen Sie die Anfrage mit Burp Suite ab, GET /json/setup-restore.action. Sie erhalten jedoch eine "Method Not Allowed response". Versuchen Sie es mit POST /json/setup-restore.action?synchronous=true und erhalten Sie eine 200-Antwort.


Datei xmlexport-200123123001.zip hochladen

Senden und Antwort empfangen

Jetzt können wir uns mit account admin :admin anmelden

Und das Ergebnis ist wie folgt
