
Technical analysis and proof of concept for CVE-2026-59827, a critical unsafe Java deserialization vulnerability in Metabase leading to remote code execution.
Severidad: Crítica (CVSS 9.9)
CVE: CVE-2026-59827
Aviso: GHSA-w95f-x9v9-wv36
Reportado por: Matheus Gutierre (@Gutierre0x80)
Publicado: 30 de junio de 2026
Un usuario autenticado con acceso a consultas SQL nativas en una base de datos H2 puede ejecutar código Java arbitrario en el servidor Metabase mediante la deserialización insegura de objetos Java devueltos por consultas SELECT CAST(X'...' AS OTHER).
La instalación predeterminada de Metabase incluye una base de datos de muestra H2, lo que hace que esta vulnerabilidad sea explotable en todas las implementaciones predeterminadas.
pip install requestsexploit.py:Asegúrese de que todos los requisitos previos estén instalados y disponibles en PATH:
# Install Python requests library
pip install requests
# Verify Java is available (OpenJDK 11+)
java -version
# Verify Python 3.7+
python3 --version
Luego ejecute el exploit desde el directorio poc/:
cd poc/
python3 exploit.py <target_url> <username> <password> <command>
El script valida que clojure-1.12.3.jar y VarChainPayload.class existan en el directorio de trabajo antes de la ejecución.
python3 exploit.py <target_url> <username> <password> <command>
python3 exploit.py http://127.0.0.1:3000 [email protected] Admin1234! "id > /tmp/pwned.txt"
El comando se ejecuta en el contexto del proceso de Metabase (normalmente el usuario metabase en Docker).
El tipo de columna OTHER de H2 deserializa objetos Java utilizando un ObjectInputStream simple sin filtrado JEP-290. Esto permite la instanciación arbitraria de clases.
El payload utiliza una cadena de gadgets basada en las clases serializables de Clojure (clojure.core$apply, clojure.lang.Var$Serialized y PersistentList) combinadas con PriorityQueue de Java para desencadenar la ejecución de código mediante clojure.core/eval.
Consulte writeup/analysis.md para obtener el análisis técnico completo.
| Argumento | Descripción | Ejemplo |
|---|
target_url | URL de la instancia de Metabase | http://127.0.0.1:3000 |
username | Usuario autenticado (admin o con acceso a consultas nativas) | [email protected] |
password | Contraseña del usuario | SecurePassword123! |
command | Comando de shell a ejecutar | id o whoami |