Conhecendo as vulnerabilidades web
Todo profissional de segurança da informação sabe que as vulnerabilidades em aplicações web são muito comuns hoje em dia. Estas vulnerabilidades variam entre SQL Injection, Cross-Site-Scripting, CSRF, entre outras. Neste artigo vou apresentar e fazer uma breve descrição do funcionamento de algumas vulnerabilidades mais comuns que normalmente são encontradas nas aplicações web.
- DoS (Denial of Service)
O Denial of Service (Negação de Serviço) acontece por várias razões, mas não vou descrever sobre atacantes tentando DoS um site específico ou uma rede botnets tentando ataques, mas sim tratar o DoS como uma vulnerabilidade que pode acontecer quando se escreve códigos em aplicações web. Normalmente essa vulnerabilidade ocorre devido a um erro lógico na programação, neste cenário quando for realizada uma requisição que possa exigir recursos contínuos do sistema (através de um loop infinito), consequentemente a aplicação requisitará mais memória ao sistema operacional que poderá finalizar a aplicação ou começar a utilizar todos os recursos da máquina.
- SQL Injection
As vulnerabilidades de SQL Injection ainda são bastante comuns nos dias de hoje. O SQL Injection ocorre quando a aplicação não verifica os valores ou parâmetros de entrada permitindo que sejam inseridos caracteres especiais que alterem o fluxo da consulta SQL no banco de dados e consequentemente executando comandos arbitrários.
- CSRF (Cross-Site Request Forgery)
A vulnerabilidade de CSRF (Cross-Site Request Forgery) acontece quando podemos inserir uma requisição na requisição do usuário, que será enviada para o site ou aplicação em seu nome. Esta requisição executará uma determinada ação como sendo o próprio usuário.
Para que isso ocorra é necessário que o site ou aplicação esteja vulnerável e nos permita inserir temporariamente algum código, além disso, é necessário construir uma URL que será enviada para o usuário que deve clicar sobre ela. Ao clicar nesta URL, a requisição inicial será enviada, mas como existe a vulnerabilidade, em segundo plano será feito a nossa requisição para executar determinada ação.
- XSS (Cross-Site Scripting)
Este ataque é sem dúvida tão comum quanto os três mencionados anteriormente. O ataque de Cross-Site Scripting permite injetar códigos na aplicação web vulnerável para obter informações sensíveis, como nomes de usuário, senhas, cookies, etc. Neste tipo de ataque normalmente é utilizado códigos em linguagem Javascript.
Existem três tipos de ataques XSS:
Reflected XSS – A aplicação esta vulnerável quando aceita entradas do usuário e exibe seu conteúdo em uma página web sem a devida validação de caracteres especiais, como barra ('/'), aspas ('"'), etc.
Stored XSS – Este tipo acontece quando podemos armazenar o código malicioso dentro da aplicação web vulnerável de forma permanente.
DOM-based XSS – O ataque de XSS baseado em DOM acontece quando enviamos uma URL maliciosa para o usuário e este clica sobre ela. Mas este não é o mesmo que o Reflected XSS, pois a aplicação retorna uma resposta válida não-maliciosa (assim, a aplicação não é vulnerável ao ataque de Reflected XSS). O ataque acontece porque aplicação usa um código de JavaScript que por sua vez usa os valores passados na URL.
- Buffer Overflow
Às vezes, encontramos programas executáveis que estão sendo usados em aplicações web ou em parte delas. Mesmo sendo usados como parte de uma aplicação web, as vulnerabilidades de buffer overflow podem ser exploradas.
- Format String
Da mesma forma que as vulnerabilidades de Buffer Overflow, o Format String atinge os programas executáveis que estão sendo usando em aplicações web. Com o format string o usuário pode controlar o que é inserido em função, como printf, o que irá permitir a execução de comandos maliciosos.
- Directory Traversal
A vulnerabilidade de Directory Traversal pode estar presente em uma aplicação que permite os usuários leiam ou acessem os arquivos no sistema, mas não consegue identificar corretamente as permissões que usuário tem. O problema mais comum é que a aplicação não consegue verificar se o usuário está tentando acessar outros diretórios além do permitido utilizando uma sequência de caracteres como ".. /" ou ".. \".
- File Inclusion
O ataque de File Inclusion é muito semelhante ao Directory Traversal. A diferença é que com o Directory Traversal, podemos ler o arquivo que não estamos autorizados, mas com a File Inclusion podemos incluir o arquivo na execução atual da aplicação web, dessa forma, executamos um arquivo que não é permitido a execução.
Existem dois tipos de ataques de inclusão de arquivos:
LFI (Local File Inclusion) – Aqui estamos incluindo um arquivo local na execução da aplicação. Neste caso entendemos por arquivo local, o arquivo que já está presente no servidor.
RFI (Remote File Inclusion) – Neste caso estamos incluindo um arquivo remoto na execução da aplicação. Isto pode acontecer quando o aplicativo tem a opção de fazer o upload de arquivos para o servidor.
- Command Injection
A vulnerabilidade de Command Injection pode ocorrer em uma aplicação em que o valor enviado pelo usuário pode afetar o comando que é executado no servidor. Esta vulnerabilidade ocorre quando a aplicação executa comandos no sistema do servidor e como estes parâmetros não são verificados, é possível que seja inseridos comandos no sistema com objetivo de obter informações e ganhar acesso completo ao servidor.
- Privilege Escalation
O Ataque que visa a escalação de privilégios, normalmente ocorre utilizando-se um erro de lógica na aplicação com o objetivo de obter privilégios para executar alguma tarefa que previamente não estaríamos autorizados. Estas vulnerabilidades muitas vezes acontecem em aplicações que usam funções para múltiplos usuários.
Como vimos existem muitas vulnerabilidades que precisamos estar atentos ao desenvolver uma aplicação web. Basicamente a ideia deste artigo é enumerar estas vulnerabilidades para que sirva como base na sua busca de soluções e informações detalhadas sobre cada vulnerabilidade.