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.
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.
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
OWASP Top 10
- 224