
Análise técnica e prova de conceito para CVE-2026-59827, uma vulnerabilidade crítica de desserialização insegura em Java no Metabase que leva à execução remota de código.
Gravidade: Crítica (CVSS 9.9)
CVE: CVE-2026-59827
Aviso: GHSA-w95f-x9v9-wv36
Relator: Matheus Gutierre (@Gutierre0x80)
Publicado: 30 de junho de 2026
Um usuário autenticado com acesso a consultas SQL nativas em um banco de dados H2 pode executar código Java arbitrário no servidor Metabase por meio da desserialização insegura de objetos Java retornados por consultas SELECT CAST(X'...' AS OTHER).
A instalação padrão do Metabase inclui um banco de dados de exemplo H2, tornando esta vulnerabilidade explorável em todas as implantações padrão.
pip install requestsexploit.py:Certifique-se de que todos os pré-requisitos estejam instalados e disponíveis no PATH:
# Install Python requests library
pip install requests
# Verify Java is available (OpenJDK 11+)
java -version
# Verify Python 3.7+
python3 --version
Em seguida, execute o exploit a partir do diretório poc/:
cd poc/
python3 exploit.py <target_url> <username> <password> <command>
O script valida se clojure-1.12.3.jar e VarChainPayload.class existem no diretório de trabalho antes da execução.
python3 exploit.py <target_url> <username> <password> <command>
| Argumento | Descrição | Exemplo |
|---|---|---|
target_url | URL da instância do Metabase | http://127.0.0.1:3000 |
username | Usuário autenticado (admin ou com acesso a consultas nativas) | [email protected] |
password | Senha do usuário | SecurePassword123! |
command | Comando de shell a executar | id ou whoami |
python3 exploit.py http://127.0.0.1:3000 [email protected] Admin1234! "id > /tmp/pwned.txt"
O comando é executado no contexto do processo do Metabase (normalmente o usuário metabase no Docker).
O tipo de coluna OTHER do H2 desserializa objetos Java usando um ObjectInputStream puro, sem filtragem JEP-290. Isso permite a instanciação arbitrária de classes.
O payload usa uma cadeia de gadgets baseada nas classes serializáveis do Clojure (clojure.core$apply, clojure.lang.Var$Serialized e PersistentList), combinadas com PriorityQueue do Java para acionar a execução de código via clojure.core/eval.
Consulte writeup/analysis.md para obter a análise técnica completa.