
Exploit para CVE-2023-22518 en Atlassian Confluence. Proporciona un recorrido detallado de la vulnerabilidad, incluyendo configuración del entorno, análisis de causa raíz mediante diffing y pasos de explotación para obtener acceso de administrador.
CVE-2023-22518 en Confluence
CVE-2023-22518: Esta vulnerabilidad se describe como “una 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 Atlassian.
Configuración del entorno Usar 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

Seleccionar Trial Installation, luego hacer clic en el enlace para obtener una clave de prueba gratuita. Luego configurar el clúster: elegir non-cluster

Luego ir a la configuración de la base de datos -> Seleccionar MySQL

Seguir las instrucciones:
Configurar la base de datos, crear usuario y contraseña de la tabla
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 editar /etc/mysql/my.cnf. Agregar las siguientes líneas:
transaction-isolation = READ-COMMITTED
log_bin_trust_function_creators = 1

Luego reiniciar MySQL y Confluence. Luego ir a la página de configuración en localhost:8090 y usar la base de datos creada para rellenar

Check connection success, hacer clic en Next. Luego Sign up.

Depuración
*Diff Diff de los dos archivos jar de las dos versiones en IntelliJ. Específicamente, aquí difiero las versiones 8.0.4 y 7.19.16 Según la descripción, diff del archivo confluence.jar de las dos versiones

La diferencia entre la versión parcheada y la no parcheada es @WebSudoRequired y @SystemAdminOnly websudorequired es una función para mejorar la seguridad de las sesiones de administrador. Al intentar acceder a la administración, el sistema solicita volver a ingresar la contraseña incluso si ya has iniciado sesión. Añade un paso de autenticación adicional para garantizar los privilegios de acceso administrativo.
SystemAdminOnly: Es una función que limita la funcionalidad administrativa solo a cuentas de administrador. Esto ayuda a garantizar que solo las cuentas autorizadas puedan realizar operaciones importantes que afecten al sistema.
Establecer un punto de interrupción en validate() en RestoreAction.class

La función que guarda el archivo subido usa getRestoreFileFromUpload

getExportDescriptor se usa para descomprimir y leer el contenido del archivo zip


Sin embargo, después de la depuración, 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 durante el proceso de desarrollo de la autorización.
Redirigir 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 mejora 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 incluye pasar a través de una cadena de interceptores. Uno de estos interceptores, llamado WebSudoInterceptor, realiza una verificación basada en la URI de la solicitud.
Específicamente, WebSudoInterceptor realiza las siguientes comprobaciones:
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'
Capturar la solicitud con BurpSuite, GET /json/setup-restore.action. Sin embargo, se recibe una respuesta "Method Not Allowed". Probar con POST /json/setup-restore.action?synchronous=true y se recibe una respuesta 200


Subir el archivo xmlexport-200123123001.zip

y recibir respuesta

Ahora podemos iniciar sesión con la cuenta admin:admin

Y se obtiene el siguiente resultado
