OWASP Top 10

As 10 vulnerabilidades web mais comuns

(2017)

Rogério Munhoz

rjmunhoz

obarra.co

OWASP

Open Web Application Security Project

OWASP is an open community dedicated to enabling organizations to conceive, develop, acquire, operate, and maintain applications that can be trusted.

owasp.org

Por que desenvolvedores devem se importar com segurança?

9 das 10 vulnerabilidades web mais comuns estão diretamente no código

Injection

A1

Detectando

  • Dados passados pelo usuário não validados
  • Concatenação direta de parâmetros e queries
  • eval

Mitigando

Don't trust your user

Exemplos

SQL Injection

Broken Authentication

A2

Detectando

  • É possível realizar ataques de brute force / credential stuffing
  • É possível utilizar senhas fracas
  • Processos de recuperação de acesso fracos
  • Criptografia fraca ou não existente para credenciais
  • 2FA ineficaz ou inexistente
  • Expõe IDs de sessões na URL
  • Não rotaciona o ID da sessão após login
  • Tokens que não expiram ou sessões que não são invalidadas após logout

Mitigando

  • Utilizar 2FA sempre que possível

  • Não fazer deploy de credenciais padrão, muito menos de usuários admin

  • Implementar verificação de senhas fracas (top 1000 worst passwords)

  • Garantir que todos os erros de autenticação tenham a mesma mensagem

  • Limitar ou atrasar tentativas de login falhas e avisar administradores caso atividade suspeita seja detectada

  • Utilizar gerenciador de sessões server-side com entropia alta para gerar IDs de sessões

Exemplos

  • Credential Stuffing
  • Senhas fracas (políticas de rotação / complexidade)
  • Tokens / Sessões que não expiram

Sensitive Data Exposure

A3

Detectando

  • Dados sensíveis transmitidos em plain text
  • Algoritmos fracos e/ou antigos utilizados para criptografia
  • Chaves de criptografia são fracas, reutilizadas ou mal gerenciadas
  • Criptografia não é obrigatória (falta de HSTS e outros headers)
  • O user agent (client) não verifica a validade do certificado do servidor

Mitigando

Exemplos

  • Criptografia padrão do banco
  • Não utilizar e/ou não exigir TLS
  • Tokens / Sessões que não expiram

XML External Entities (XXE)

A4

Detectando

  • Utiliza XML, diretamente ou via upload
  • Dados não confiáveis são inseridos em documentos XML
  • Processador de XML possui DTDs () ativados
  • SAML é utilizado para autenticação
  • SOAP é utilizado numa versão anterior à 1.2

Mitigando

JSON

Mas, se não der pra usar JSON

  • Evitar serialização de dados sensíveis

  • Atualizar processadores de XML, SOAP e bibliotecas

  • Desativar XML external entity e DTD nos processadores XML

  • Validar e sanitizar dados XML

Exemplos

Billion Laughs Attack

Broken Access Control

A5

Detectando

  • É possível pular a autorização manipulando URLs, o estado da aplicação ou o HTML
  • Permitir que um usuário acesse (e/ou modifique) registros de outro usuário ao mudar a chave primária de autorização
    (?userId=)
  • Elevação de privilégio. Executar ações de usuário sem estar logado ou de admin como usuário comum
  • Alterar campos ocultos, cookies, JWT ou outros tokens para elevar privilégios
  • CORS mal configurados

Mitigando

Deny by Default

Mitigando

  • Garantir que cada usuário só acesse / modifique seus registros
  • Logar tentativas de acesso falhas e alertar admins em caso de atividade suspeita

  • Utilizar rate limiting na API para minimizar danos causados por ferramentas automatizadas

  • Invalidar tokens JWT no server após logout

Exemplo

Security Misconfiguration

A6

Detectando

  • Hardening não realizado nos servidores
  • Serviços e features desnecessariamente habilitados
  • Senhas e usuários padrão não removidos ou alterados
  • Error handling mostra stack trace e / ou informações sensíveis
  • Configurações de segurança mais atuais estão desativadas
  • Configurações inseguras utilizadas em servidores, serviços e aplicações
  • Headers ou parâmetros de segurança não enviados pelo servidor
  • Software inseguro ou não atualizado

Mitigando

  • Hardening em todos os ambientes com credenciais diferentes para cada um

  • Plataforma mínima, com nada além do necessário disponível

  • Uma tarefa recorrente de revisitar, atualizar e corrigir possíveis configurações de segurança, bem como atualizar aplicações, serviços e bibliotecas

  • Aplicação segmentada que proporcione separação segura entre componentes (containers, segmentação, cloud security groups)

  • Envio de diretrizes de segurança

Exemplos

  • Aplicações de exemplo não removidas que, potencialmente, contém falhas de segurança conhecidas
  • Listagem de diretórios não está desabilitada no servidor
  • Mensagens de erro muito detalhadas
  • Security groups muito abertos por padrão

Cross-Site Scripting (XSS)

A7

Detectando

  • Reflected XSS: A aplicação mostra input do usuário não validado como parte da resposta HTML. Geralmente utiliza uma URL ou redirecionamento malicioso
  • Stored XSS: A aplicação armazena dados não sanitizados vindos do usuário que, depois, são visualizados por outros usuários, ou pelo administrador
  • DOM XSS: Dados controláveis pelo atacante são incluídos na página

Mitigando

Separação entre dados inseguros vindos do usuário, e dados confiáveis, vindos da aplicação

Exemplos

Insecure Desirialization

A8

Detectando

Sempre que uma aplicação desserializar input do usuário

Mitigando

  • De preferência, não desserializar dados não confiáveis

  • Realizar verificações de integridade (assinatura digital) para prevenir manipulação dos dados

  • Exigir tipos pré determinados ao desserializar

  • Executar código que faz desserialização em ambiente isolado e sem privilégios

  • Logar erros e falhas de desserialização

  • Restringir tráfego de rede em servidores ou containers que realizam desserialização

  • Monitorar desserialização e alertar se usuários desserializarem frequentemente

Exemplos

  • Um fórum PHP usa informação serializada para criar um "super cookie" e armazenar os dados do usuário. Ao manipular os dados serializados, o atacante pode dar a si mesmo privilégios administrativos

Using Components with Known Vulnerabilities

A9

Detectando

  • Não se sabe, ou não se monitora versões de bibliotecas e plugins utilizados
  • Software desatualizado, não mais suportado ou vulnerável existe na stack
  • Não existe scan de vulnerabilidades, ou atenção a informativos sobre segurança
  • Configurações de componentes não são seguras

Mitigando

Fique de olho!

Mitigando

  • Remova dependências desnecessárias

  • Sempre avalie e fique de olho em scanners automatizados de vulnerabilidades (npm, GitHub)

  • Utilize apenas componentes e bibliotecas de fontes oficiais e confiáveis

  • Monitore por bibliotecas não mais mantidas ou que não realizam patches de versões antigas

Exemplo

The event-stream incident

Insufficient Logging&Monitoring

A10

In 2016, identifying a breach took an average of 191 days – plenty of time for damage to be inflicted.

owasp

Detectando

  • Eventos auditáveis (logins, tentativas de login falhas, e transações importantes não são logadas)
  • Alertas e erros não geram mensagens ou geram mensagens inúteis / inadequadas
  • Logs são armazenados localmente
  • Alertas automáticos não estão ativados ou acontecem com pouca frequência
  • PENTests e scanners de vulnerabilidades não geram alertas
  • Não é possível detectar, escalar ou alertar sobre ataques em real time

Mitigando

  • Logar qualquer ação suspeita ou falha de validação com contexto para identificar potenciais atacantes e por tempo o suficiente para permitir análise posterior dos dados

  • Garantir que logs usem formatos que podem ser processados por ferramentas de análise automatizada

  • Garantir que transações importantes seja, rastreáveis afim de não permitir alterações ou exclusões

  • Adote medidas de monitoramento e report em tempo oportuno

  • Adote um plano de recuperação de incidentes

Exemplos

  • Enumeração de usuários utilizando senhas comuns
  • Não resposta a alertas de malware

Event Sourcing

Referência

OWASP Top 10

By Rogério Munhoz