
Análisis del exploit CVE-2023-22518 para Atlassian Confluence Server: configuración, diffing de JAR, causa raíz y restauración no autorizada para recuperar el acceso de administrador.
Exploit-CVE-2023-22518 CVE-2023-22518 en Confluence
CVE-2023-22518 : Esta vulnerabilidad se describe como “vulnerabilidad de autorización incorrecta en la base de datos y el servidor de Confluence”. El fallo afecta a las versiones On-premises de los productos de Atlassian.
Configurar el entorno. Utilice la versión vulnerable 8.0.4. URL de descarga: https://product-downloads.atlassian.com/software/confluence/downloads/atlassian-confluence-8.0.4-x64.exe

Seleccione Trial Installation, luego haga clic en el enlace para obtener la clave de prueba gratuita. Después configure el clúster: elija non-cluster

Después vaya a configurar la base de datos -> Elija MySQL

Siga las instrucciones:
Download the MySQL driver
Drop the .jar file in /home/lily/atlassian/confluence/confluence/WEB-INF/lib
Restart Confluence and continue the setup process.
Configure la base de datos, cree el usuario y la tabla de contraseñas.
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;
Luego edit /etc/mysql/my.cnf . Agregue las siguientes líneas:
transaction-isolation = READ-COMMITTED
log_bin_trust_function_creators = 1

Después reinicie MySQL y Confluence. Luego entre a la página de instalación en localhost:8090 y complete los campos con la base de datos creada.

Compruebe que la conexión es correcta, haga clic en Siguiente. Después regístrese.

** Diff de los archivos jar de las dos versiones en IntelliJ **

SystemAdminOnly : Es una función que limita las funciones administrativas solo a las cuentas de administrador. Esto ayuda a garantizar que solo las cuentas autorizadas puedan realizar operaciones importantes que afectan al sistema.
Coloque un punto de interrupción en validate() en RestoreAction.class.

La función guarda el archivo subido mediante getRestoreFileFromUpload.

GetExportDescriptor se utiliza para descomprimir y leer el contenido del archivo zip.


Sin embargo, después de depurar, aún no se ha encontrado la causa raíz de la vulnerabilidad.
La causa descrita en el CVE es una vulnerabilidad de autorización. Esto nos lleva a dirigir la atención a las investigaciones sobre vulnerabilidades del lenguaje Java en el proceso de asignación de permisos por parte de los desarrolladores.
Redirigimos la atención al archivo struts.xml. Este archivo contiene información sobre las acciones y el enrutamiento basado en espacios de nombres, así como los interceptores.



Vemos que el espacio de nombres /json amplía la funcionalidad del espacio de nombres /admin. Por lo tanto, las rutas creadas para el espacio de nombres /admin también se pueden acceder a través del espacio de nombres /json.
En el contexto del espacio de nombres /json, el proceso de enrutamiento de solicitudes implica pasar por una cadena de interceptores. Uno de estos interceptores, llamado WebSudoInterceptor, realiza comprobaciones basadas en el URI de la solicitud.
Específicamente, WebSudoInterceptor realiza los siguientes pasos de comprobación:
Si la ruta de la solicitud es /authenticate.action, se omite. Si la ruta de la solicitud es /admin, comprueba si el atributo WebSudoNotRequired está vacío.
Si se envía una solicitud a '/json', entonces la solicitud a '/json/action' se redirige a '/setup/action' y 'admin/action'. En este CVE, la ruta vulnerable es '/json/setup-restore.action?synchronous=true'
Captura la solicitud con Burp Suite: GET /json/setup-restore.action. Sin embargo, se recibe una respuesta "Method Not Allowed". Prueba con POST /json/setup-restore.action?synchronous=true y se obtiene una respuesta 200.


Sube el archivo xmlexport-200123123001.zip

Envía y recibe la respuesta

Ahora podemos iniciar sesión con account admin :admin

Y el resultado es el siguiente
