CVE-2023-27524 Apache Superset Auth Bypass|附检测工具
2023-5-6 16:33:19 Author: 401SecNote(查看原文) 阅读量:23 收藏

点击蓝字 关注我们

漏洞描述

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文件中):

class SecureCookieSessionInterface(SessionInterface):"""The default session interface that stores sessions in signed cookiesthrough 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 sha1digest_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_serializersession_class = SecureCookieSession
def get_signing_serializer(self, app):if not app.secret_key:return Nonesigner_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.1CHANGE_ME_TO_A_COMPLEX_RANDOM_SECRET(version >= 1.4.1thisISaSECRET_1234(deployment templateYOUR_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

文中所涉及到的检测工具后台回复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/


文章来源: http://mp.weixin.qq.com/s?__biz=MzU4NzAyMDM4Mw==&mid=2247484101&idx=1&sn=bf5254d4dee6a3f4102a895c0e48208a&chksm=fdf323f5ca84aae3de6492dbf58c7e010bc4b1ee05ba38b59d070b4fda9adad697b50b07f492#rd
如有侵权请联系:admin#unsafe.sh