
CVE-2023-22518 in Confluence
CVE-2023-22518 : Diese Schwachstelle wird als „Schwachstelle aufgrund falscher Autorisierung in der Datenbank und auf dem Server von Confluence“ beschrieben. Der Fehler betrifft die On-Premises-Versionen der Atlassian-Produkte.
Umgebung einrichten Verwenden Sie die anfällige 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. Danach den Cluster einrichten: Non-Cluster auswählen.

Danach zur Datenbank-Einrichtung gehen -> MySQL auswählen.

Befolgen Sie die Anleitung:
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 /etc/mysql/my.cnf bearbeiten. Die folgenden Zeilen hinzufügen:
transaction-isolation = READ-COMMITTED
log_bin_trust_function_creators = 1

Danach MySQL und Confluence neu starten. Dann die Einrichtungsseite unter localhost:8090 aufrufen und die erstellte Datenbank eintragen.

Prüfen, ob die Verbindung erfolgreich ist, auf Next klicken. Danach Sign up.

Debug
*Diff Vergleichen Sie die beiden Jar-Dateien der 2 Versionen in IntelliJ per diff. Konkret habe ich hier die Versionen 8.0.4 und 7.19.16 per diff verglichen. Laut Beschreibung die confluence.jar-Dateien der beiden Versionen per diff miteinander vergleichen.

Der Unterschied zwischen der gepatchten und der ungepatchten Version sind @WebSudoRequired und @SystemAdminOnly. websudorequired ist eine Funktion, die die Sicherheit von Administrator-Sitzungen erhöht. Beim Versuch, auf den Admin-Bereich zuzugreifen, fordert das System zur erneuten Eingabe des Passworts auf, auch wenn man bereits angemeldet ist. Es wird ein zusätzlicher Authentifizierungsschritt hinzugefügt, um den administrativen Zugriff abzusichern.
SystemAdminOnly : Eine Funktion, 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 in validate() in RestoreAction.class.

Die Funktion, die die hochgeladene Datei speichert, erfolgt über getRestoreFileFromUpload.

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


Allerdings konnte nach dem Debuggen die Grundursache der Schwachstelle noch nicht gefunden werden.
Die in der CVE beschriebene Ursache ist eine Schwachstelle in der Autorisierung. Dies führt dazu, dass wir unsere Aufmerksamkeit auf Forschungsarbeiten zu Schwachstellen der Programmiersprache Java richten, die während der Berechtigungsvergabe durch Entwickler entstehen.
Wir richten unsere Aufmerksamkeit auf die Datei struts.xml. Diese Datei enthält Informationen über Aktionen und das Routing basierend auf Namespaces sowie über Interceptors.




Wir sehen, dass der Namespace /json die Funktionen 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 Routingprozess einer Anfrage eine Kette von Interceptors. Einer dieser Interceptors, WebSudoInterceptor genannt, führt eine Prüfung anhand der Request-URI durch.
Konkret führt WebSudoInterceptor die folgenden Prüfungen durch:
Wenn der Anforderungspfad /authenticate.action ist, wird er übersprungen. Wenn der Anforderungspfad /admin ist, prüft er, 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. Allerdings wird eine „Method Not Allowed“-Antwort empfangen. Versuchen Sie es mit POST /json/setup-restore.action?synchronous=true und erhalten Sie eine 200-Antwort.


Laden Sie die Datei xmlexport-200123123001.zip hoch

und empfangen Sie die Antwort.

Jetzt können wir uns mit dem Konto admin:admin anmelden.

Und wir erhalten folgendes Ergebnis.
