Pular para conteúdo

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

  1. Uso de Middleware Helmet: Aplica automaticamente mais de 10 cabeçalhos de proteção moderna HTTP eliminando configurações incorretas.
  2. Prevenção Estrita de IDOR: Inclui compulsóriamente a chave tenantId nas cláusulas de busca do banco de dados.
  3. Resposta 404 Uniforme: Evita vazamento de enumeração de dados sensíveis (Information Disclosure).

🎯 3. Próximos Passos & Sequência Didática