Aula 18 - Mitigação de Vulnerabilidades OWASP Top 10 🛡️
Objetivo Pedagógico
Objetivo: Compreender os mecanismos de exploração e implementar contramedidas rigorosas contra as ameaças mais críticas do OWASP Top 10: Broken Access Control, Injection, Insecure Design e Security Misconfiguration.
📑 1. Fundamentos Teóricos & Análise Técnica
O consórcio OWASP (Open Worldwide Application Security Project) categoriza as ameaças de segurança mais prevalentes em aplicações web modernas.
A mitigação técnica eficaz exige o abandono de soluções paliativas em favor de padrões arquiteturais consolidados: 1. A01: Broken Access Control (Controle de Acesso Quebrado): - Tornou-se a vulnerabilidade número 1 do ranking global. Ocorre quando a aplicação falha em impor o princípio do privilégio mínimo, permitindo que usuários visualizem ou alterem recursos de outros inquilinos (IDOR - Insecure Direct Object Reference). - Mitigação: Controle de Acesso Baseado em Atributos (ABAC) ou Políticas (PBAC), validando a relação de posse do recurso diretamente na camada de domínio de negócio em cada requisição. 2. A03: Injection (Injeções): - Dados não confiáveis são enviados a um interpretador como parte de um comando ou consulta (SQL, NoSQL, LDAP, OS Command). - Mitigação: Uso exclusivo de consultas parametrizadas (Prepared Statements), Object-Relational Mappers (ORMs) seguros com tipagem estrita e validação de esquemas de entrada com listas de permissão (Allowlists). 3. A05: Security Misconfiguration (Configurações Incorretas de Segurança): - Headers HTTP de proteção ausentes, portas desnecessárias abertas, contas com senhas padrão e mensagens de erro contendo stack traces detalhados que expõem versões internas do sistema. - Mitigação: Implementação compulsória de cabeçalhos de segurança defensivos: Content-Security-Policy (CSP), Strict-Transport-Security (HSTS), X-Content-Type-Options: nosniff e bloqueio de CORS permissivo (Access-Control-Allow-Origin: *).
📐 Arquitetura Conceitual & Diagrama de Fluxo
graph TD
Attacker["Atacante Injeta '../' ou 'OR 1=1'"] --> Middleware["Filtro de Entrada & Validador de Schema (Zod / Pydantic)"]
Middleware --> AuthZ["Validação de Autorização Fina (ABAC / PBAC)"]
AuthZ --> Engine["Repositório com Consultas Parametrizadas"]
Engine --> DB["Banco de Dados Relacional Protegido"]
Engine --> Response["Sanitização de Saída & Headers HTTP Seguros"]
Response --> Browser["Navegador Seguro (Bloqueia Scripts Maliciosos via CSP)"]
style Attacker fill:#ffebee,stroke:#c62828
style Middleware fill:#fff3e0,stroke:#e65100
style AuthZ fill:#e1f5fe,stroke:#01579b
style DB fill:#e8f5e9,stroke:#2e7d32
style Browser fill:#f3e5f5,stroke:#7b1fa2 🔍 Pilares e Diretrizes Técnicas
Nesta unidade, aprofundamos os seguintes conceitos fundamentais: - Princípio do Menor Privilégio: Cada processo, serviço e usuário deve possuir apenas os privilégios mínimos necessários para a execução de sua tarefa. - Defesa em Profundidade (Defense in Depth): Múltiplas camadas de proteção independentes: se o WAF falhar, a validação de entrada barra; se esta falhar, o Prepared Statement impede o ataque. - Política CSP Rigorosa (Content-Security-Policy): Restringe os domínios a partir dos quais scripts, fontes e conexões de rede podem ser carregados no navegador. - Tratamento Seguro de Exceções: Logging detalhado em ambiente interno e retorno de mensagens amigáveis e genéricas para o cliente externo.
🛠️ 2. Implementação Prática em Segurança Defensiva, OWASP Top 10 e Sanitização
Abaixo está a implementação técnica de referência, estruturada com padrões de engenharia de software e foco em robustez:
// secure_endpoints.ts (Proteção Contra IDOR e Configuração de Segurança em Node/Express)
import express, { Request, Response, NextFunction } from 'express';
import helmet from 'helmet';
const app = express();
// 1. Defesa em Profundidade: Headers HTTP Hardened com Helmet
app.use(helmet({
contentSecurityPolicy: {
directives: {
defaultSrc: ["'self'"],
scriptSrc: ["'self'"],
objectSrc: ["'none'"],
upgradeInsecureRequests: [],
},
},
crossOriginEmbedderPolicy: true,
}));
interface AuthenticatedUser {
id: string;
tenantId: string;
}
// 2. Mitigação de Broken Access Control (Anti-IDOR)
app.get('/api/v1/invoices/:invoiceId', async (req: Request, res: Response) => {
const user = req.user as AuthenticatedUser;
const { invoiceId } = req.params;
// Consulta que amarra estritamente o recurso ao dono autenticado
const invoice = await db.invoice.findFirst({
where: {
id: invoiceId,
tenantId: user.tenantId, // Bloqueia acesso cruzado entre inquilinos!
},
});
if (!invoice) {
// Retorna 404 para não vazar a existência do recurso a atacantes
return res.status(404).json({ error: 'Recurso não encontrado' });
}
return res.json(invoice);
});
💡 Análise Passo a Passo do Código
- Uso de Middleware Helmet: Aplica automaticamente mais de 10 cabeçalhos de proteção moderna HTTP eliminando configurações incorretas.
- Prevenção Estrita de IDOR: Inclui compulsóriamente a chave
tenantIdnas cláusulas de busca do banco de dados. - Resposta 404 Uniforme: Evita vazamento de enumeração de dados sensíveis (Information Disclosure).
🎯 3. Próximos Passos & Sequência Didática
-
Slides da Aula
-
Quiz de Fixação
-
Exercícios Práticos
-
Desafio de Projeto