Low Hanging Fruits

Ausência de cabeçalho

Toda vulnerabilidade que envolve a ausência de cabeçalhos ("header") deve ser adicionada separadamente para cada cabeçalho ausente presente no escopo.

Exemplo de como deve ser evidenciado a Ausência do Header:

Figura: Request Burp Suite

Figura: Response Burp Suite indicando a ausência do header

Por padrão os Headers são reportados pelas seguintes severidades:

Figura: Severidade de cada cabeçalho

Isto é apenas uma indicação, porém a severidade de cada cabeçalho deve ser indicado mediante o impacto que ele traz ao ambiente testado.


Js.map

É uma ótima forma de investigarmos mais sobre a estrutura do site, através de seu código JavaScript.

Primeiro devemos entrar no código fonte da aplicação pressionando CTRL + U, dentro dela iremos procurar por arquivos Javascript.

Iremos buscar sempre o final "js.map" de arquivos como "main" e "app".

Dentro deles iremos procurar no final se contém "js.map".

Então vamos usar uma ferramenta chamada "decompile_sourcemap", através dela usamos o seguinte código como exemplo:

Em que "(nome_da_pasta)" é a pasta que a ferramenta irá criar com o arquivo js.map.

Depois de rodar esta ferramenta, iremos visualizar o frontend completo desta maneira:

Figura: Frontend divido em diretórios

Assim iremos ver de forma mais simples e organizada toda a estrutura frontend da aplicação e podemos examinar diversas coisas, como: se possui comentários do Dev sobre senhas, API, o que aquilo faz e entender melhor sobre a estrutura.


Medidas de anti-adulteração de bibliotecas Javascript não estão em uso (Integrity)

Descrição:

Descrição da integridade do Sub-recurso Medidas de detecção de adulteração, como Subresource Integrity (SRI), podem identificar quando um arquivo JavaScript externo importado por um aplicativo foi adulterado por terceiros mal-intencionados.

Se não forem obtidos de forma segura, esses arquivos podem ser modificados por invasores para obter controle sobre a funcionalidade do arquivo e, portanto, executar código malicioso no navegador do usuário usando os privilégios de um site válido.

Vários hackers de roubo de informações de alto nível (em particular contra a British Airways) exploraram esse problema de forma muito eficaz para comprometer informações confidenciais dos clientes.

Então, procure referências a javascript que não tenha a flag.

Exemplo:

Figura: Exemplo correto com SHA384

Segue o código abaixo:


SSL/TLS

São protocolos de segurança que garantem que a navegação do usuário fique protegida contra um possível vazamento de dados e ataques hackers. Ou seja, toda a informação sensível compartilhada pelo usuário, se mantém criptografada.

Ambos o SSL quanto o TLS, são muito parecidos, porém o TLS é uma versão mais atualizada do SSL.

TLS:

Transport Layer Security, este protocolo vai codificando toda a mensagem que o usuário envia ao servidor, e são criados chaves de acesso a qual apenas o emissor e receptor tem acesso e quando a informação faz esse caminho, o TLS autentica quem tentou acessar o conteúdo, caso não seja um dos dois, não é possível acessar a mensagem.

O protocolo TLS é mais eficaz que o protocolo SSL.

Através disto iremos procurar aplicações que contenham cifras fracas, com isso podemos usar o site a seguir:

ssllabs.com/ssltest/

Figura: Classificação

Figura: Cifras fracas

Vulnerabilidade da Versão do Server

Ocorre quando a aplicação divulga informações que podem ajudar um atacante, como a versão do server que é utilizada, em que através desta informação, através dessa informação, deve ser realizado uma busca pelo endoflife do serviço e se o mesmo possui vulnerabilidades conhecidas (CVEs).

Podemos ver no exemplo abaixo, uma aplicação em que divulga a informação da versão do server (nginx 1.18):

Figura: Exposição da versão do Servidor

Mensagem de Erros

Quando a aplicação retorna um erro inesperado assim que um evento acontece, conforme o retorno que a aplicação der em relação ao erro, o atacante pode entender melhor como funciona a estrutura da aplicação, podendo aproveitar-se de alguma vulnerabilidade que pode ser exposta com o erro.

Figura: Erro de Aplicação


Utilizar bibliotecas JavaScript desatualizadas

Para encontrar esta vulnerabilidade entramos no código fonte da aplicação, procuramos por arquivos JavaScript, como o "JQuery" e sua versão, através desta sua versão um atacante pode buscar por suas vulnerabilidades e explorar uma vulnerabilidade.

Exemplo:

Figura: Versão JQuery no Código Fonte


Enumeração de Usuário

Ocorre geralmente na área de login, cadastro ou esqueci a senha, em que quando digitamos algum usuário e senha, a aplicação nos retorna que o usuário já existe, ou que o email não está cadastrado, fazendo com que o atacante consiga enumerar quais usuários/emails são válidos ou não.

Porém o mesmo pode ser encontrado em outras partes da aplicação, como por exemplo alguma aba de alterar o e-mail do usuário dentro da plataforma, pode haver de constar que o e-mail já está cadastrado.

A mensagem correta que a aplicação deve retornar é de "Usuário ou Senha Incorretos" ou "Caso o email já estiver cadastrado você receberá um link na sua caixa de email"


Ausência de mecanismo contra força bruta

Essa vulnerabilidade deve ser testada em diferentes campos, como login, redefinição de senha e MFA.

Login: Deve ser testado se há algum controle anti automação ao inserir o mesmo e-mail porém com diversas senhas em um curto período de tempo.

Redefinição de senha: Verificar se possui algum mecanismo ao inserir diversos e-mails no campo.

MFA: Validar se pode ser realizado ataques de força bruta no campo de código do MFA a fim de descobrir a combinação certa para realizar o bypass do mecanismo.


Host header injection

É quando clicado em "Esqueci a senha", depois ao apertar para enviar a requisição, interceptamos ela e trocar o header "Host" por outro site, caso não redirecionar para lá, mantemos o header Host original e adicionamos abaixo dele o header "X-Forwarded-Host" com o outro site.

Para aumentar a severidade, caso a aplicação seja vulnerável, podemos redirecionar para algum server que temos controle para capturar o token do usuário, possibilitando assim que alteramos a senha do mesmo e ganhamos controle sobre a conta.


Redirecionamento HTTP

Esta vulnerabilidade ocorre quando realizado uma requisição para a aplicação com HTTP ao invés de HTTPS, a maneira recomendada é a aplicação fazer o redirecionamento, caso não fizer, a aplicação encontra-se vulnerável.


Acesso via IP diretamente

Ao identificar o endereço IP da aplicação, realize uma requisição com o endereço IP, caso a aplicação não faça o redirecionamento para o endereço DNS a mesma se encontra vulnerável a alguns ataques como bypass de WAF.


Gerenciamento de patch insuficiente

Identificado a versão do produto, buscar CVEs relacionadas e o EndOfLife do produto (https://endoflife.date/).


Ausência do arquivo robots.txt

Buscar na aplicação o endpoint robots.txt, caso retornado 404 e não demonstrado o campo, a aplicação encontra-se com a falta deste mecanismo.


Ausência de WAF

Identificar se a aplicação possui algum mecanismo de WAF presente.


CORS Miconfiguration

Fazer verificações no CORS para validar se o mesmo está muito permissivo e se encontra vulnerável a ataques.


Ausência de segundo fator de autenticação no procedimento de login

Quando realizado o login na aplicação a mesma deve haver a opção do usuário ativar o segundo fator de autenticação (MFA).


Exposição de metadados em imagens

Durante o upload de imagens, o sistema deve garantir a remoção dos metadados EXIF antes do armazenamento ou exibição do arquivo. Esses metadados podem conter informações sensíveis, como coordenadas GPS, modelo e marca do dispositivo, data e hora da captura, dados de software e outros detalhes capazes de comprometer a privacidade do usuário.


Uso de cabeçalho depreciado

Verificar se a aplicação apresenta cabeçalhos depreciados, como X-Frame-Options, X-XSS-Protection ou Feature-Policy.

Essa validação pode ser feita em conjunto com a identificação da ausência de cabeçalhos.


Divulgação de informações no cabeçalho HTTP

Outra vulnerabilidade sobre cabeçalhos, esta no caso é quando a aplicação divulga informações como tecnologias, server, no cabeçalho HTTP. Em alguns casos é encontrado como:

Server: Apache/2.4.52 (Ubuntu)


Roubo de conta via redefinição de senha

Em um campo de redefinição de senha, podemos testar algumas combinações com o intuito de o link de redefinição de senha ou código ser enviado para ambos os usuários (usuário válido e atacante). Algumas das formas são.

Requisição original:

{"email":"[email protected]"}

Requisição modificada:

{"email":["[email protected]","[email protected]"]}

Dessa forma, caso vulnerável o e-mail de redefinição será enviado para a vítima e para o atacante.


Exposição de chaves API

Há casos em que dentro de arquivos JavaScript podem ser encontrados credenciais, chaves API e outras informações interessantes, deve sempre verificar estes arquivos.


Listagem de diretórios

Para validar essa vulnerabilidade, basta abrir alguma imagem e voltar um diretório. Também é possível caso enumerado alguns diretórios tentar fazer o acesso direto.


Validação de credenciais exfiltradas por infostealer

Deve ser realizado a exfiltração de credenciais obtidas via pacotes de infostealers, assim testando se as credenciais são válidas e permitem o acesso não autorizado.

Atualizado

Isto foi útil?