FixVibe
Covered by FixVibecritical

Injeção de SQL: evitando acesso não autorizado ao banco de dados

A injeção de SQL (SQLi) é uma vulnerabilidade crítica em que os invasores interferem nas consultas de banco de dados de um aplicativo. Ao injetar sintaxe SQL maliciosa, os invasores podem ignorar a autenticação, visualizar dados confidenciais, como senhas e detalhes de cartão de crédito, ou até mesmo comprometer o servidor subjacente.

CWE-89

Impacto da injeção de SQL

A injeção de SQL (SQLi) permite que um invasor interfira nas consultas que um aplicativo faz em seu banco de dados [S1]. O impacto principal inclui acesso não autorizado a dados confidenciais, como senhas de usuários, detalhes de cartão de crédito e informações pessoais [S1].

Além do roubo de dados, os invasores muitas vezes podem modificar ou excluir registros do banco de dados, levando a alterações persistentes no comportamento do aplicativo ou à perda de dados [S1]. Em casos de alta gravidade, SQLi pode ser escalado para comprometer a infraestrutura de back-end, permitir ataques de negação de serviço ou fornecer um backdoor persistente nos sistemas da organização [S1][S2].

Causa raiz: manipulação de entrada insegura

A causa raiz da injeção SQL é a neutralização inadequada de elementos especiais usados em um comando SQL [S2]. Isso ocorre quando um aplicativo constrói consultas SQL concatenando entradas influenciadas externamente diretamente na cadeia de consulta [S1][S2].

Como a entrada não está devidamente isolada da estrutura da consulta, o interpretador do banco de dados pode executar partes da entrada do usuário como código SQL em vez de tratá-la como dados literais [S2]. Esta vulnerabilidade pode se manifestar em várias partes de uma consulta, incluindo instruções SELECT, valores INSERT ou instruções UPDATE [S1].

Correções e mitigações de concreto

Use consultas parametrizadas

A maneira mais eficaz de evitar a injeção de SQL é o uso de consultas parametrizadas, também conhecidas como instruções preparadas [S1]. Em vez de concatenar strings, os desenvolvedores devem usar mecanismos estruturados que imponham a separação de dados e código [S2].

Princípio do Menor Privilégio

Os aplicativos devem se conectar ao banco de dados usando os privilégios mais baixos necessários para suas tarefas [S2]. Uma conta de aplicação web não deve ter privilégios administrativos e deve estar restrita às tabelas ou operações específicas necessárias para sua função [S2].

Validação e codificação de entrada

Embora não seja um substituto para a parametrização, a validação de entrada fornece [S2] de defesa profunda. Os aplicativos devem usar uma estratégia de aceitação conhecida, validando se a entrada corresponde aos tipos, comprimentos e formatos esperados [S2].

Como FixVibe testa isso

FixVibe já cobre a injeção de SQL por meio do módulo scanner fechado active.sqli. As verificações ativas só são executadas após verificação e atestado de propriedade do domínio. A verificação rastreia endpoints GET de mesma origem com parâmetros de consulta, estabelece uma resposta de linha de base, procura anomalias booleanas específicas de SQL e relata apenas uma descoberta após a confirmação de tempo em vários comprimentos de atraso. As varreduras de repositório também ajudam a detectar a causa raiz antecipadamente por meio de code.web-app-risk-checklist-backfill, que sinaliza chamadas SQL brutas criadas com interpolação de modelo.