
Detector + análisis de causa raíz para CVE-2026-72898 (SQLi no autenticado en Metabase a través de reset_password)
Inyección SQL no autenticada en Metabase a través de POST /api/session/reset_password.
CVSS 10.0, en el catálogo CISA KEV, explotada activamente en la naturaleza.
Un campo no declarado en el cuerpo de la solicitud de restablecimiento de contraseña llega a la
búsqueda de usuario en la base de datos de la aplicación como una estructura HoneySQL en lugar
de un identificador validado. Una clave de objeto JSON se convierte en una palabra clave de Clojure,
por lo que {"raw": "<SQL>"} se compila en la cláusula de HoneySQL y se emite — SQL arbitrario contra la base de datos de la aplicación de Metabase, sin
autenticación.
:rawEste repositorio contiene un detector (una herramienta de veredicto ciego basada en tiempo) y un análisis de causa raíz derivado del parche del proveedor. Está destinado a defensores que verifican su propia exposición y a investigadores de seguridad que estudian el fallo. No exfiltra datos ni proporciona un exploit de toma de control administrativo armado.
cve-2026-72898.py — detector con control de versión y cierre seguro (VULN / SAFE / UNTESTED)TECHNICAL.md — análisis completo de causa raíz a partir del diff del parche v0.63.2 → v0.63.15lab/docker-compose.yml — una instancia vulnerable y otra parcheada para reproducciónEl detector informa VULN contra una instancia afectada y SAFE contra una parcheada —
y UNTESTED (nunca un SAFE falso) cuando una solicitud es limitada, almacenada en caché o nunca
llega a la aplicación. También se proporciona una grabación como cast de asciinema.
| Rama | Vulnerable | Corregida |
|---|---|---|
| 0.58 / 1.58 | < 0.58.24 | 0.58.24 |
| 0.59 / 1.59 | < 0.59.21 | 0.59.21 |
| 0.60 / 1.60 | < 0.60.17 | 0.60.17 |
| 0.61 / 1.61 | < 0.61.11 | 0.61.11 |
| 0.62 / 1.62 | < 0.62.9 | 0.62.9 |
| 0.63 / 1.63 | < 0.63.5 | 0.63.5 |
Aviso: GHSA-vwf4-m7j8-wcjf. Si ejecuta una versión afectada, actualice ahora — esto se está explotando activamente en la naturaleza.
POST /api/session/reset_password HTTP/1.1
Content-Type: application/json
{"token":"1_00000000-0000-0000-0000-000000000000",
"password":"Placeholder1!",
"user-id":{"raw":"<ARBITRARY SQL>"}}
produce, en la base de datos de la aplicación:
SELECT id, ... FROM core_user WHERE id = (<ARBITRARY SQL>)
El fallo es ciego — el flujo de restablecimiento absorbe los errores SQL y devuelve un
400 {"errors":{"password":"Invalid reset token"}} idéntico en todos los casos — por lo que el
detector utiliza un oráculo de tiempo. Consulte TECHNICAL.md para el flujo de datos completo y el
diff del parche.
python3 cve-2026-72898.py https://metabase.example.com # BD de aplicación H2 (predeterminada)
python3 cve-2026-72898.py https://metabase.example.com --engine postgres # oráculo pg_sleep
python3 cve-2026-72898.py https://metabase.example.com --json --trials 5
Código de salida 0 = VULN, 1 = SAFE o UNTESTED.
Los veredictos son VULN / SAFE / UNTESTED — nunca "probablemente seguro". La herramienta:
--force lo anula deliberadamente;X-Forwarded-For por solicitud, porque el endpoint de restablecimiento limita a 10 intentos
y la respuesta de limitación es un 400 rápido que de otro modo imitaría un negativo;sum(x) sobre SYSTEM_RANGE) que el motor no puede optimizar, y
requiere que el retraso supere tanto un umbral absoluto como la dispersión temporal del propio control;UNTESTED, no SAFE.cd lab
docker compose up -d # 3300 = vulnerable v0.63.2, 3301 = parcheada v0.63.15
# espere ~90s para la inicialización de la BD en el primer arranque
python3 ../cve-2026-72898.py http://127.0.0.1:3300 # -> VULN
python3 ../cve-2026-72898.py http://127.0.0.1:3301 --force # -> SAFE
Verificado: v0.63.2 muestra un delta de más de 8 segundos que escala linealmente con el número de filas de la carga útil (5M→0.85s, 10M→1.96s, 20M→4.61s, 40M→7.97s); v0.63.15 no muestra diferencial.
Pruebe únicamente sistemas que le pertenezcan o para los que tenga autorización explícita de evaluación. El acceso no autorizado a sistemas informáticos es ilegal en la mayoría de las jurisdicciones. Esta herramienta detecta la vulnerabilidad con una sonda de tiempo benigna y, deliberadamente, no lee, modifica ni exfiltra datos.
MIT — consulte LICENSE.