
Technical analysis and proof of concept for CVE-2026-59827, a critical unsafe Java deserialization vulnerability in Metabase leading to remote code execution.
Sévérité: Critique (CVSS 9.9)
CVE: CVE-2026-59827
Avis de sécurité: GHSA-w95f-x9v9-wv36
Signaleur: Matheus Gutierre (@Gutierre0x80)
Publié: 30 juin 2026
Un utilisateur authentifié ayant accès aux requêtes SQL natives sur une base de données H2 peut exécuter du code Java arbitraire sur le serveur Metabase via une désérialisation non sécurisée d'objets Java renvoyés par des requêtes SELECT CAST(X'...' AS OTHER).
L'installation par défaut de Metabase inclut une base de données d'exemple H2, ce qui rend cette vulnérabilité exploitable sur tous les déploiements par défaut.
pip install requestsexploit.py:Assurez-vous que tous les prérequis sont installés et disponibles dans le PATH:
# Install Python requests library
pip install requests
# Verify Java is available (OpenJDK 11+)
java -version
# Verify Python 3.7+
python3 --version
Exécutez ensuite l'exploit depuis le répertoire poc/:
cd poc/
python3 exploit.py <target_url> <username> <password> <command>
Le script vérifie que clojure-1.12.3.jar et VarChainPayload.class existent dans le répertoire de travail avant l'exécution.
python3 exploit.py <target_url> <username> <password> <command>
python3 exploit.py http://127.0.0.1:3000 [email protected] Admin1234! "id > /tmp/pwned.txt"
La commande est exécutée dans le contexte du processus Metabase (généralement l'utilisateur metabase dans Docker).
Le type de colonne OTHER dans H2 désérialise les objets Java à l'aide d'un ObjectInputStream brut sans filtrage JEP-290. Cela permet l'instanciation arbitraire de classes.
La charge utile utilise une chaîne de gadgets basée sur les classes sérialisables de Clojure (clojure.core$apply, clojure.lang.Var$Serialized, et PersistentList) combinée avec PriorityQueue de Java pour déclencher l'exécution de code via clojure.core/eval.
Voir writeup/analysis.md pour l'analyse technique complète.
| Argument | Description | Exemple |
|---|
target_url | URL de l'instance Metabase | http://127.0.0.1:3000 |
username | Utilisateur authentifié (administrateur ou disposant d'un accès aux requêtes natives) | [email protected] |
password | Mot de passe de l'utilisateur | SecurePassword123! |
command | Commande shell à exécuter | id ou whoami |