CVE-2023-27524 Apache Superset Auth Bypass|附检测工具

漏洞描述

Apache Superset是一个开源数据可视化和探索工具。Apache Superset 版本(包括 2.0.1)中的会话验证攻击。没有根据安装说明更改默认配置的SECRET_KEY的安装允许攻击者验证和访问未经授权的资源。这不会影响更改了SECRET_KEY配置默认值的Superset管理员。

漏洞影响

受影响版本
Apache Superset <= 2.0.1
不受影响版本
Apache Superset >= 2.1.0

CVSS 评分
在这里插入图片描述

漏洞复现

在网络应用中session被称为“会话控制”,Session对象存储特定用户会话所需的属性及配置信息。简单来说session就是浏览器与服务器交互的门禁,通过session可以验证访问者的身份信息,大多数的session是保存在服务器端的,但是也有少部分保存在客户端的session,比如下面要说的flask框架。
Apache Superset是基于python中的flask web框架编写的,flask是一个python轻量级web框架,它的session存储在客户端的cookie字段中。为了防止session篡改,flask进行了如下的处理(代码存放在flask模块中sessions.py文件中):

"""The default session interface that stores sessions in signed cookies
through the :mod:`itsdangerous` module.
"""

#: the salt that should be applied on top of the secret key for the
#: signing of cookie based sessions.
salt = "cookie-session"
#: the hash function to use for the signature. The default is sha1
digest_method = staticmethod(hashlib.sha1)
#: the name of the itsdangerous supported key derivation. The default
#: is hmac.
key_derivation = "hmac"
#: A python serializer for the payload. The default is a compact
#: JSON derived serializer with support for some extra Python types
#: such as datetime objects or tuples.
serializer = session_json_serializer
session_class = SecureCookieSession

def get_signing_serializer(self, app):
if not app.secret_key:
return None
signer_kwargs = dict(
key_derivation=self.key_derivation, digest_method=self.digest_method
)
return URLSafeTimedSerializer(
app.secret_key,
salt=self.salt,
serializer=self.serializer,
signer_kwargs=signer_kwargs,
)
……
……

seesion通过序列化对键以及键值进行进行序列化,通过hmacsha1进行签名,最终生成一串如下字符串:

eyJjc3JmX3Rva2VuIjoiNzY2ZGY1ZDJlNDAyYjg2NWY1ZmM4NjBlYTBkMjUzY2Y3YzE2YjIwNiIsImxvY2FsZSI6ImVuIn0.ZFXM4g.t0nkAofl_yo0bvR2ObbFVWpW5FE

通过’.'隔开的3段内容,第一段其实就是base64 encode后的内容,但去掉了填充用的等号,若decode失败,自己需要补上1-3个等号补全。中间内容为时间戳,在flask中时间戳若超过31天则视为无效。最后一段则是安全签名,将sessiondata,时间戳,和flask的secretkey通过sha1运算的结果。服务端每次收到cookie后,会将cookie中前两段取出和secretkey做sha1运算,若结果与cookie第三段不一致则视为无效。
Session生成的具体流程为:json->zlib->base64后的源字符串.时间戳.hmac签名信息。
该漏洞的本质是SECRET_KEY的泄露。Flask-unsign工具可以爆破会话中的session是否是由弱签名SECRET_KEY加密生成的。
在这里插入图片描述
在这里插入图片描述
该漏洞作者在2021年就在Superset配置指南
(https://superset.apache.org/docs/installation/configuring-superset/)中发现了默认的SECRET_KEY:
\x02\x01thisismyscretkey\x01\x02\e\y\y\h,现在已经换成了YOUR_OWN_RANDOM_GENERATED_SECRET_KEY。
在这里插入图片描述
更多key:
在这里插入图片描述
在这里插入图片描述
收集了一下(有更多欢迎留言补充):

\x02\x01thisismyscretkey\x01\x02\\e\\y\\y\\h(version < 1.4.1)
CHANGE_ME_TO_A_COMPLEX_RANDOM_SECRET(version >= 1.4.1)
thisISaSECRET_1234(deployment template)
YOUR_OWN_RANDOM_GENERATED_SECRET_KEY(documentation)
TEST_NON_DEV_SECRET(docker compose)
CHANGE_ME_SECRET_KEY

可以将上述key添加到flask-unsign字典中进行爆破使用,位置(执行flask-unsign-wordlist.exe命令可查看):

D:\python39\lib\site-packages\flask_unsign_wordlist\wordlists\all.txt

攻击者可以利用爆破出来的key伪造一个user_id值设置为1的会话cookie,以管理员身份登录。在浏览器的本地存储中设置伪造的会话 cookie 并刷新页面允许攻击者以管理员身份访问应用程序。SQL Lab接口允许攻击者对连接的数据库运行任意SQL语句。根据数据库用户权限,攻击者可以查询、修改和删除数据库中的任何数据,以及在数据库服务器上执行远程代码。
在这里插入图片描述
在这里插入图片描述
也可以使用生成的session访问/api/v1/database/1来验证漏洞是否存在。
在这里插入图片描述
在这里插入图片描述

漏洞修复

官方升级

目前官方已发布安全版本修复此漏洞,建议受影响的用户及时升级防护:
https://downloads.apache.org/superset/

其他防护措施

若用户无法对产品进行升级,可参考以下链接,通过修改SECRET_KEY的默认值来规避该漏洞:
https://superset.apache.org/docs/installation/configuring-superset/#secret_key-rotation

文中所涉及到的检测工具关注vx公众号401SecNote后台回复 CVE-2023-27524 获取。

在这里插入图片描述
注:文章所涉及的技术内容仅供参考,利用本文所提供的信息造成的直接或间接后果和损失,均由使用者自行承担。本文所提供的工具仅用于学习,禁止用于其他非法用途!使用该工具造成的一切后果均由使用者自行承担。如涉及侵权请联系后台进行删除。

参考链接:
https://blog.csdn.net/weixin_44140395/article/details/120602953
https://blog.csdn.net/weixin_41790086/article/details/107554397
https://www.horizon3.ai/cve-2023-27524-insecure-default-configuration-in-apache-superset-leads-to-remote-code-execution/
https://github.com/projectdiscovery/nuclei-templates/pull/7125/commits/9e38e8cffb068786bb87d5629cb468960968ff81
http://blog.nsfocus.net/apache-supersetcve-2023-27524/

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北境L

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值