Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
Ferramentas/GitHubGitHub/sergicortesabadia/cve-2026-26198-analysis
Análise de VulnerabilidadesAnálise de CódigoSegurança WebPapers e PesquisaAprendizado e Educação
GitHubsergicortesabadia/cve-2026-26198-analysis

CVE-2026-26198-analysis

Mergulho profundo em uma injeção SQL crítica no Ormar ORM do Python — reprodução, correção e testes

Ver Repositório
há 5 mesesAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

CVE-2026-26198 — Injeção de SQL no Ormar ORM

Uma análise aprofundada de uma vulnerabilidade crítica (CVSS 9.8) de injeção de SQL em um ORM assíncrono Python, com reprodução, análise e correção.

A Vulnerabilidade

Ormar é um mini ORM assíncrono popular para Python, comumente usado com FastAPI e Starlette. As versões 0.9.9 até 0.22.0 contêm uma vulnerabilidade de injeção de SQL nos métodos agregados min() e max().

A causa raiz é um bug de "implementação parcial": enquanto sum() e avg() validam que o parâmetro de coluna se refere a um campo numérico real, min() e max() ignoram essa verificação completamente e passam a entrada do usuário diretamente para sqlalchemy.text() — um sumidouro de SQL bruto.

Um atacante pode injetar uma subconsulta como o parâmetro "coluna":

root@kitploit:~
# Uso esperado
await Item.objects.max("price")  # → SELECT max(price) FROM items

# Payload de ataque
await Item.objects.max("(SELECT password FROM users LIMIT 1)")
# → SELECT max((SELECT password FROM users LIMIT 1)) FROM items
# Retorna a senha do administrador!

Fatos Rápidos

AtributoValor
ID CVECVE-2026-26198
Pontuação CVSS9.8 (Crítico)
CWECWE-89: Injeção de SQL
Afetadoormar 0.9.9 – 0.22.0
Corrigido emormar 0.23.0
Publicado24 de fevereiro de 2026
Autenticação necessária?Nenhuma — não autenticado

Estrutura do Projeto

root@kitploit:~
├── README.md               ← Você está aqui
├── vulnerable_app.py       ← Aplicação FastAPI mínima com o padrão vulnerável
├── exploit_demo.py         ← PoC seguro mostrando a injeção em ação
├── patched_app.py          ← A versão corrigida com validação de entrada
├── test_vulnerability.py   ← Testes provando que a vulnerabilidade existe e que a correção funciona
├── requirements.txt
└── analysis/
    └── root_cause.md       ← Análise detalhada do bug em nível de código

Executando a Demonstração

root@kitploit:~
git clone https://github.com/YOUR_USERNAME/CVE-2026-26198-analysis.git
cd CVE-2026-26198-analysis
python -m venv venv && source venv/bin/activate
pip install -r requirements.txt

# Execute os testes (nenhum banco de dados externo necessário — usa SQLite)
python -m pytest test_vulnerability.py -v

# Execute a demonstração interativa do exploit
python exploit_demo.py

A Correção

A correção valida que o parâmetro de coluna corresponde a um campo real no modelo antes de chegar a sqlalchemy.text(). Isso é feito por meio de uma abordagem de lista de permissões: apenas nomes de colunas que existem nas definições de campos do modelo são permitidos.

Consulte patched_app.py para a implementação e analysis/root_cause.md para a análise completa.

Principais Conclusões

  1. ORMs não são proteção automática contra injeção de SQL. Se um método de ORM aceita uma string bruta e a passa para uma cláusula de texto, é tão perigoso quanto escrever SQL bruto.
  2. Validação parcial é pior do que nenhuma validação. O fato de sum()/avg() serem validados, mas min()/max() não, criou uma falsa sensação de segurança.
  3. Use lista de permissões, não lista de bloqueios. A correção valida contra nomes de colunas conhecidos e seguros, em vez de tentar filtrar padrões maliciosos.

Referências

  • Aviso do GitHub (GHSA-xxh2-68g9-8jqr)
  • Entrada no NVD
  • Repositório do Ormar

Licença

MIT

Baixar ferramenta