Apache-Superset身份认证绕过漏洞(CVE-2023-27524)原理分析
2023-04-27 12:54:00

0x00、前言

Apache-Superset身份认证绕过漏洞(CVE-2023-27524)复现与分析,和前端时间的nacos认证绕过性质一样,都是硬编码SECRET_KEY导致的cookie伪造,不同的是nacos采用jwt加密,superset采用flask-session加密。

0x01、漏洞描述

Apache Superset是一种用于数据探索和数据可视化的开源软件应用程序,能够处理 PB 级数据。它具有快速、轻量、直观的特点,任何用户都可以轻松地上手探索他们的数据。
由于Apache Superset存在不安全的默认配置,未根据安装说明更改默认SECRET_KEY 的系统受此漏洞影响,未经身份认证的远程攻击者利用此漏洞可以访问未经授权的资源或执行恶意代码。

0x02、漏洞范围

Apache Superset <= 2.0.1

0x03、环境搭建

这里直接docker启动的存在漏洞的版本环境,步骤如下:

//拉取漏洞版本镜像:
docker pull apache/superset:2.0.1
//运行镜像:
docker run -d -p 8080:8088 --name superset apache/superset
//创建用户:输入用户名密码即可
docker exec -it superset superset fab create-admin
//更新漏洞环境数据库
docker exec -it superset superset db upgrade
//初始化环境
docker exec -it superset superset init

如果运行起来发现访问不到,重启下doker(命令:systemctl restart docker),再运行superset即可(命令docker start superset,superset为上面运行镜像启的–name的名字)

访问到即可

0x04、漏洞复现

使用flask-session-cookie-manager工具:https://github.com/noraj/flask-session-cookie-manager
使用默认SECRET_KEY=CHANGE_ME_TO_A_COMPLEX_RANDOM_SECRET,加密字段”{'_user_id': 1, 'user_id': 1}“(测试发现仅伪造加密字段{'user_id': 1}也可以实现认证绕过),伪造session发包即可


漏洞原作者也发布了利用工具:
https://github.com/horizon3ai/CVE-2023-27524/tree/main

0x05、原理分析

官方使用了默认硬编码密钥进行flask-session构造


通过工具解码cookie来验证是否使用默认硬编码SECRET_KEY=CHANGE_ME_TO_A_COMPLEX_RANDOM_SECRET进行加解密

对首页进行刷新,cookie信息为csrf信息

对身份认证登录数据进行校验

用户名密码错误的情况:

用户密码正确的情况:

相比之下多了_id字段和user_id字段

主要判断字段为user_id字段,原作者构造的{'_user_id': 1, 'user_id': 1},测试只构造{'user_id': 1}字段用默认Key进行加密认证也能实现绕过

当user_id不存在时,即认证失败

因此使用SECRET_KEY=CHANGE_ME_TO_A_COMPLEX_RANDOM_SECRET加密{'user_id': 1}字段即可绕过认证


0x06、漏洞修复

官方发布修复版本:2.1.0
官方地址:https://www.apache.org/dist/superset/2.1.0
github地址:https://github.com/apache/superset/releases

修复方式:

  • 删除默认SECRET_KEY=CHANGE_ME_TO_A_COMPLEX_RANDOM_SECRET值
  • 从环境变量中SUPERSET_SECRET_KEY值获取SECRET_KEY
  • 如果依旧使用默认SECRET_KEY=CHANGE_ME_TO_A_COMPLEX_RANDOM_SECRET,如果不是运行在调试模式下,则会抛出由于SECRET_KEY不安全而无法启动


0x07、参考链接

https://github.com/apache/superset/pull/23186/files/9edf0c49f78dc533019bb11800e4c89cfabe0719
https://github.com/horizon3ai/CVE-2023-27524/
https://www.horizon3.ai/cve-2023-27524-insecure-default-configuration-in-apache-superset-leads-to-remote-code-execution/
https://github.com/noraj/flask-session-cookie-manager