O problema do software inseguro é um dos desafios mais importantes da atualidade e para o qual os profissionais da área devem estar preparados.

Para isso, a Fundação OWASP, sem fins lucrativos, trabalha para melhorar a segurança dos aplicativos da Web por meio de uma comunidade e de recursos gratuitos e facilmente acessíveis em seu site. Entre os muitos recursos que oferece, ela é conhecida por seu projeto mais conhecido, o "OWASP Top 10"

O projeto OWASP Top 10 é uma iniciativa que identifica e destaca as dez principais vulnerabilidades de segurança mais críticas em aplicativos da Web e serve como um guia essencial para desenvolvedores e profissionais de segurança. O guia é atualizado a cada poucos anos, com a última atualização em 2021, mas ainda atual.

As vulnerabilidades incluídas no OWASP Top 10 representam riscos que podem ser explorados por cibercriminosos para comprometer a segurança de um aplicativo da Web.

Web Goat

O WebGoat é um projeto da OWASP criado especificamente para ensinar desenvolvedores e profissionais de segurança sobre vulnerabilidades comuns em aplicativos da Web e como lidar com elas. É um aplicativo da Web deliberadamente inseguro, o que significa que ele contém intencionalmente falhas de segurança que os usuários podem explorar para fins educacionais.

O WebGoat contém uma série de lições e desafios interativos que os usuários podem explorar para entender as vulnerabilidades comuns de segurança. Cada lição se concentra em uma vulnerabilidade específica.

Você pode acessar o WebGoat no site oficial da OWASP WebGoat | OWASP Foundation. Você também pode usar o webgoat no Docker: webgoat/webgoat - Docker Image | Docker Hub.

As vulnerabilidades mais críticas de acordo com a OWASP

1. Falhas no Controle de Acesso

Ocorre quando um sistema não implementa efetivamente restrições de acesso, permitindo que usuários não autorizados realizem ações ou acessem recursos que deveriam ser limitados apenas a usuários específicos. Isso envolve falhas na implementação de controles para gerenciar quem tem acesso a quais recursos e quais ações podem ser executadas.

Vulnerabilidades comuns que podem ser mencionadas:

  • Violação do princípio do menor privilégio ou negação padrão, em que o acesso deveria ser concedido apenas para determinadas competências, funções ou usuários, mas está disponível para qualquer pessoa;
  • Contornar os controles de acesso modificando a URL, o estado interno do aplicativo ou a página HTML, ou usando uma ferramenta de ataque que modifica as solicitações de API;
  • Permitir a visualização ou a edição da conta de outra pessoa fornecendo seu ID exclusivo;
  • Acessar APIs com controles de acesso ausentes para POST, PUT e DELETE;
  • Agir como usuário sem estar conectado ou agir como administrador quando conectado como usuário.

Características:

  • Autenticação ineficaz: geralmente relacionada a problemas nos processos de autenticação, como falta de verificação adequada de credenciais ou manipulação de sessões.
  • Privilégios não controlados: os usuários podem obter acesso não autorizado a funções ou dados confidenciais se os controles de autorização não forem aplicados adequadamente.

Exemplo:

Um cibercriminoso descobre que a URL do perfil do usuário em um aplicativo da Web é construída da seguinte forma `https://estoesunejemplo.com/perfil/{id}`. Se o aplicativo não verificar adequadamente a autorização, o invasor poderá alterar o ID no URL para acessar os perfis de outros usuários.

Mitigação:

  • Atribua os privilégios mínimos necessários para que os usuários desempenhem suas funções;
  • Todas as ações e recursos devem ser verificados no servidor para garantir que o usuário tenha as permissões adequadas antes de processar a solicitação;
  • Use um sistema de funções para garantir que os usuários tenham acesso apenas a funções e dados compatíveis com suas funções específicas.

2. Falhas criptográficas

Ocorre quando a implementação de técnicas criptográficas é falha ou insuficiente, comprometendo a integridade e a confidencialidade dos dados.

Características:

  • O uso de algoritmos criptográficos fracos ou desatualizados pode expor dados confidenciais a ataques cibernéticos de força bruta ou a técnicas mais avançadas.
  • Chaves fracas ou mal gerenciadas
  • A geração de números aleatórios é essencial para muitos algoritmos criptográficos. Se os números não forem realmente aleatórios, os ataques poderão prever padrões e comprometer a segurança.

Exemplo:

Um aplicativo da Web usa um algoritmo de hash obsoleto, como o MD5, para senhas. Esses algoritmos são conhecidos por serem vulneráveis a ataques de colisão, o que comprometeria a segurança das senhas armazenadas.

Mitigação:

  • Use algoritmos criptográficos fortes, atualizados e seguros;
  • Armazene as chaves de forma segura, use serviços de gerenciamento de chaves e senhas e altere as chaves periodicamente para limitar a exposição em caso de vazamento de dados;
  • Use fontes de entropia confiáveis para gerar números aleatórios e siga as práticas recomendadas para garantir a aleatoriedade.

3. Injeção de SQL

Isso pode ocorrer quando os dados fornecidos pelo usuário não são validados ou filtrados adequadamente antes de serem incorporados a instruções do tipo SQL.

Isso pode permitir que um invasor injete um código mal-intencionado, comprometendo a segurança do aplicativo e acessando, manipulando ou excluindo dados no banco de dados.

Características:

  • Ocorre quando a entrada do usuário não é validada adequadamente antes de ser usada em consultas SQL;
  • Os invasores podem manipular as consultas SQL para obter acesso não autorizado aos dados, fazer modificações não autorizadas ou até mesmo executar comandos.

Exemplo:

Autenticação Bypass: no caso de um formulário de login que usa o nome de usuário e a senha para verificar as credenciais em uma consulta SQL. Um invasor poderia inserir `' OR '1'='1' --` como senha, o que poderia tornar a consulta sempre verdadeira, ignorando a autenticação.

Mitigação:

  • Use consultas parametrizadas ou instruções preparadas para garantir que os dados do usuário não sejam misturados diretamente com o código SQL;
  • Permita apenas caracteres e padrões específicos na entrada do usuário (White lists);
  • Valide e filtre rigorosamente todos os registros de usuários para evitar a introdução de caracteres maliciosos.

4. Design inseguro

O design inseguro é uma categoria ampla que representa diferentes pontos fracos.

Um dos fatores que contribuem para o design inseguro é a falta de perfil dos riscos comerciais inerentes ao software ou sistema que está sendo desenvolvido e, portanto, a incapacidade de determinar o nível de design de segurança necessário.

Refere-se à presença de pontos fracos fundamentais na arquitetura e no design de um sistema.

Características:

  • Design que permite fluxos de dados não seguros entre os componentes do sistema, o que poderia facilitar a exposição ou a manipulação de dados confidenciais;
  • Falta de separação clara de responsabilidades entre diferentes módulos ou camadas do sistema, o que pode levar a riscos de segurança.

Exemplo:

Um sistema que fornece apenas uma boa segurança implementada no lado do cliente, como validação de dados em JavaScript, sem validar adequadamente no servidor, o que poderia permitir ataques de manipulação de dados.

Mitigação:

  • Realize análise e modelagem de ameaças durante a fase de projeto para identificar possíveis riscos à segurança;
  • Estabeleça uma separação clara de responsabilidades entre os componentes do sistema, evitando que um componente tenha acesso irrestrito a outros;
  • Implemente a criptografia para dados confidenciais armazenados no banco de dados e durante a transmissão para proteger a confidencialidade das informações.

5. Configuração incorreta de segurança

Refere-se à presença de configurações defeituosas ou inseguras em um aplicativo da Web.

Geralmente ocorre quando os desenvolvedores não aplicam as configurações de segurança padrão ou não fazem os ajustes adequados na configuração do sistema.

Características:

  • Falta de reforço de segurança adequado em qualquer parte da pilha de aplicativos ou permissões mal configuradas em serviços de nuvem;
  • Às vezes, recursos desnecessários são ativados ou instalados (por exemplo, portas, serviços, páginas, contas ou privilégios desnecessários);
  • As contas padrão e suas senhas permanecem ativadas e inalteradas;
  • O tratamento de erros revela problemas de pilha ou outras mensagens de erro excessivamente informativas;
  • As configurações de segurança em servidores de aplicativos, estruturas de aplicativos (por exemplo, Struts, Spring, ASP.NET), bibliotecas, bancos de dados, etc., não são definidas com valores seguros.

Exemplo:

Um servidor de aplicativos tem configurações que permitem que mensagens de erro detalhadas sejam expostas na produção. Isso poderia fornecer informações valiosas a um invasor sobre a estrutura interna do aplicativo.

Mitigação:

  • Faça revisões periódicas do sistema, do servidor da Web, do banco de dados e de outras configurações para garantir que estejam configurados com segurança;
  • Remova todas as configurações ou funções não utilizadas para reduzir a superfície de ataque;
  • Aplique o princípio do menor privilégio para garantir que os usuários e serviços tenham apenas as permissões necessárias para executar suas funções;
  • Altere as configurações padrão para configurações mais seguras e restritas.

6. Falhas de integridade de software e dados

As falhas de integridade de software e dados estão relacionadas ao código e à infraestrutura que protegem contra violações de integridade.

Por um lado, isso seria uma vulnerabilidade de integridade de software, em que o software poderia ter sido alterado de forma maliciosa. O mesmo poderia acontecer com os dados se não houver meios de garantir a integridade dos dados, ou seja, que eles não sejam modificados de forma não autorizada.

É importante observar, por exemplo, que muitos aplicativos agora incluem o recurso de atualização automática, em que as atualizações são frequentemente baixadas sem uma verificação de integridade suficiente e aplicadas ao aplicativo anteriormente confiável. É possível que os invasores carreguem suas próprias atualizações para serem distribuídas e executadas em todas as instalações.

Mitigação:

  • Use assinaturas digitais ou mecanismos semelhantes para verificar se o software ou os dados são da fonte esperada e se não foram adulterados;
  • Verifique se as bibliotecas e dependências, como npm ou Maven, estão consumindo repositórios confiáveis;
  • Certifique-se de que uma ferramenta de segurança da cadeia de suprimentos de software, como a OWASP Dependency Check ou a OWASP CycloneDX, seja usada;
  • Certifique-se de que haja um processo de revisão para alterações de código e configuração para minimizar a possibilidade de códigos ou configurações mal-intencionados serem introduzidos no pipeline de software;
  • Verifique se os dados serializados não assinados ou não criptografados não são enviados a clientes não confiáveis sem alguma forma de verificação de integridade ou assinatura digital para detectar adulteração ou replicação de dados serializados.

Exemplo:

Muitos roteadores domésticos não verificam atualizações por meio de firmware assinado. Portanto, no caso de atualizações falsas, pode ser impossível para o dispositivo identificá-las como tal.

7. Componentes vulneráveis ​​e desatualizados

Refere-se ao uso de software de terceiros, como bibliotecas, estruturas etc., que contêm vulnerabilidades conhecidas e não foram atualizados para versões mais seguras.

Características:

  • Uso de componentes (bibliotecas, estruturas etc.) em um aplicativo que contém vulnerabilidades conhecidas que podem ser exploradas por invasores;
  • A ausência de um processo para manter atualizados os componentes usados em um aplicativo, deixando as vulnerabilidades sem correção.

Exemplo:

Um site que usa uma versão antiga de uma biblioteca JS para gerenciar a interface do usuário. As vulnerabilidades conhecidas podem ser exploradas e exploradas por invasores, como em ataques de XSS (Cross-Site Scripting).

Mitigação:

  • Mantenha um inventário de todos os componentes usados no aplicativo, inclusive bibliotecas, estruturas e módulos de terceiros;
  • Use serviços e ferramentas que rastreiem vulnerabilidades conhecidas nos componentes usados e forneçam alertas sobre atualizações de segurança;
  • Automatize o processo de atualização de componentes para garantir que ele seja realizado em tempo hábil e com base nas necessidades;
  • Revise regularmente o código-fonte do aplicativo para verificar se há dependências desatualizadas e faça as atualizações necessárias.

8. Falhas de identificação e autenticação

Refere-se a problemas relacionados à correta identificação e autenticação de usuários em um aplicativo da Web.

Características:

  • Falhas na forma como o aplicativo identifica os usuários, como o uso de IDs fracos ou previsíveis;
  • Problemas nos processos de autenticação, como a falta de medidas de segurança adequadas ou a aceitação de credenciais fracas.

Exemplo:

Um aplicativo atribui identificadores numéricos aos usuários de forma sequencial e pública (por exemplo, 1, 2, 3, ...). Um invasor pode prever ou enumerar esses identificadores para obter acesso às contas de outros usuários.

Mitigação:

  • Use autenticação multifatorial;
  • Atribua IDs de usuário de forma aleatória e não sequencial para impedir a previsão por parte dos invasores;
  • Estabeleça políticas de senha para garantir senhas fortes;
  • Use HTTPS para garantir a transmissão segura de credenciais durante a autenticação.

9. Falhas de registro e monitoramento de segurança

Corresponde a problemas relacionados à falta de uma implementação adequada de registro e monitoramento de segurança em um aplicativo da Web. Essas falhas podem impedir a detecção precoce de atividades mal-intencionadas.

Características:

  • Falta de registros detalhados de eventos e atividades no aplicativo, o que dificulta a investigação e a resposta a incidentes;
  • Falta de sistemas de monitoramento em tempo real para identificar e responder rapidamente a atividades suspeitas ou ataques em andamento.

Exemplo:

O caso de um aplicativo que não registra eventos de acesso, como logins bem-sucedidos ou com falha. Isso dificulta a identificação de tentativas de acesso não autorizado.

Mitigação:

  • Registre eventos detalhados para facilitar a detecção e a resposta a incidentes;
  • Implemente sistemas de monitoramento em tempo real para identificar imediatamente atividades suspeitas;
  • Use soluções de segurança que facilitem a coleta e a análise de registros e forneçam alertas sobre padrões de atividades incomuns;
  • Registre detalhadamente os erros de aplicativos.

10Falsificação de solicitação do lado do servidor

Ocorre quando um invasor consegue fazer com que um aplicativo faça solicitações HTTP em nome do servidor em que o aplicativo está sendo executado, o que pode levar à exposição de recursos internos ou à execução de ações não autorizadas.

Características:

  • Capacidade do invasor de forçar o aplicativo a fazer solicitações HTTP para destinos arbitrários, mesmo relacionados a recursos internos;
  • Possibilidade de expor informações confidenciais ou recursos internos, como arquivos locais, bancos de dados ou serviços internos, por meio de solicitações feitas pelo aplicativo.

Exemplo:

Um aplicativo processa solicitações de imagens externas e usa URLs para carregar imagens. Um invasor pode fornecer um URL que aponte para um serviço interno na rede local, expondo-o por meio do aplicativo.

Mitigação:

  • Valide e filtre rigorosamente os URLs fornecidos pelos usuários para garantir que eles apontem apenas para recursos permitidos e não para serviços internos;
  • Implemente whitelists de domínios permitidos para limitar a possibilidade de acesso a recursos não autorizados;
  • Restrinja os protocolos permitidos em URLs para evitar solicitações a protocolos como `file://` ou `ftp://`, que podem levar a SSRF;
  • Use redes privadas virtuais (VPNs) para segmentar e proteger os recursos internos, reduzindo o risco de exposição por meio de SSRF.