本文介绍: 简单来说session就是浏览器服务器交互门禁通过session可以验证访问者的身份信息,大多数的session保存服务器端的,但是也有少部分存在客户端session比如下面要说的flask框架。Apache Superset基于python中的flask web框架编写的,flask一个python轻量级web框架,它的session存储客户端的cookie字段中。注:文章所涉及的技术内容仅供参考利用本文所提供的信息造成的直接或间接后果和损失,均由使用者自行承担。

漏洞描述

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:
x02x01thisismyscretkeyx01x02eyyh,现在已经换成了YOUR_OWN_RANDOM_GENERATED_SECRET_KEY。
在这里插入图片描述
更多key:
在这里插入图片描述
在这里插入图片描述
收集了一下(有更多欢迎留言补充):

x02x01thisismyscretkeyx01x02\e\y\y\hversion < 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:python39libsite-packagesflask_unsign_wordlistwordlistsall.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-insecuredefault-configuration-in-apachesupersetleads-to-remotecodeexecution/
https://github.com/projectdiscovery/nuclei-templates/pull/7125/commits/9e38e8cffb068786bb87d5629cb468960968ff81
http://blog.nsfocus.net/apache-supersetcve-2023-27524/

原文地址:https://blog.csdn.net/dust_hk/article/details/130554857

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_31702.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注