← Base de Vulnerabilidades
Injection A03:2021-Injection CVSS 9.1

SQL Injection (SQLi)

SQL Injection em APIs modernas vai além de formulários. Veja Blind SQLi, Time-Based e técnicas em ORMs como SQLAlchemy e Sequelize com exemplos reais.

Comum em: Parâmetros de busca, ordenação, filtros de API, campos de login · Dificuldade: Baixa-Média — ferramentas automatizadas (sqlmap) + validação manual

O Que É SQL Injection (SQLi)

SQL Injection (SQLi) permite que um atacante interfira nas consultas SQL executadas pela aplicação, injetando código SQL malicioso através de inputs não sanitizados. Em APIs REST modernas, o vetor mais comum não é o formulário de login — são parâmetros de filtro, ordenação, pesquisa e campos de body JSON que são interpolados diretamente em queries. Blind SQLi (baseado em tempo ou booleano) não retorna erros visíveis mas é igualmente crítico.

Exemplo Real de Ataque

HTTP Request / Response
# Time-Based Blind SQLi em parâmetro de ordenação
GET /api/v1/clientes?page=1&sort=nome

# Payload injetado:
GET /api/v1/clientes?page=1&sort=nome;+SELECT+SLEEP(5)--

# Resposta demora 5+ segundos → confirmado SQLi

# Extração via UNION (se colunas compatíveis):
GET /api/v1/clientes?search=a'+UNION+SELECT+1,username,password,4+FROM+users--

Impacto no Negócio e Compliance

Extração completa do banco de dados (usuários, senhas, chaves de API, dados financeiros), bypass de autenticação, execução de comandos OS via xp_cmdshell (SQL Server), destruição de dados. Sob a LGPD, extração de dados pessoais via SQLi é notificação obrigatória à ANPD e exposição a multas de até 2% do faturamento (máx. R$ 50M).

CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N

Como Remediar

# ❌ INSEGURO — interpolação direta de input
query = f"SELECT * FROM usuarios WHERE nome LIKE '%{nome}%'"
cursor.execute(query)

# ✅ SEGURO — Parameterized queries
query = "SELECT * FROM usuarios WHERE nome LIKE %s"
cursor.execute(query, (f"%{nome}%",))

# ✅ Com ORM (SQLAlchemy) — NUNCA use text() com input do usuário
# ❌ Inseguro:
db.execute(text(f"SELECT * FROM users WHERE id = {user_id}"))
# ✅ Seguro:
db.query(User).filter(User.id == user_id).all()

Como a Veyronn Detecta Esta Vulnerabilidade

Testamos SQLi em todos os parâmetros via payloads booleanos, time-based (SLEEP/WAITFOR) e out-of-band (DNS exfiltration) para detectar injeções cegas. Validamos ORMs — mesmo Sequelize e SQLAlchemy têm vulnerabilidades com raw queries.

Pronto para Contratar seu Próximo Pentest?

Adquira nossa avaliação pontual feita pelos melhores profissionais do mercado ou implemente o software da Veyronn 24/7.