Explicando o TOP 3 da OWASP "Injection" para desenvolvedores
Published: 2023-02-09 20:49:54

Dando seguimento a nossa série das principais categorias de riscos do OWASP TOP 10, em terceira posição temos o "Injection". 

Neste artigo, apresentarei sobre o que é essa categoria de risco, os tipos de ataques que existem, bem como os cenários em que ela pode ser explorada. Dessa forma, compartilharei informações importantes para ajudar desenvolvedores a protegerem suas aplicações contra essa ameaça.


## O que é "Injection"?
Injection é um risco referente à situação quando dados fornecidos pelo usuário não são validados, filtrados ou sanitizados pela aplicação, permitindo que um invasor insira (Injete, por isso a palavração "injeção") comandos maliciosos nas entradas de dados.

Isso pode levar a roubo de informações confidenciais ou a comprometimento do sistema. Invasores aproveitam falhas de validação de entrada, como o formato de dados, caracteres permitidos e quantidade de dados esperados, para desenvolver códigos maliciosos 

Anteriormente, era comum associar o ataque "Injection" ao SQL Injection (SQLi), entretanto, o OWASP TOP 10 mas recente (2021) inclui outros diversos tipos de ataques, incluindo o SQLi, nessa categoria.

[Saiba por que SQL Injection é tratada como "baratas digitas"](https://bit.ly/3HRFixl).

## Vamos ampliar um pouco mais sobre os tipos de Injection

### SQL INJECTION
Como foi dito anteriormente, é um dos mais conhecidos da categoria e se refere a quando um atacante consegue inserir comandos maliciosos em uma consulta SQL, a fim de manipular ou acessar informações não autorizadas do banco de dados.

### CROSS-SITE SCRIPTING
É quando o atacante consegue injetar scripts maliciosos no conteúdo do site alvo, que é então incluído com o conteúdo dinâmico entregue ao navegador da vítima. O navegador da vítima não tem como saber que os scripts maliciosos não são confiáveis e, portanto, os executa.

### OS COMMAND INJECTION 
Quando uma aplicação permite que um atacante induza uma aplicação a executar comandos do sistema operacional (SO). Também conhecido como injeção de shell.

### ORM INJECTION
Se refere a quando um atacante consegue inserir comandos maliciosos em uma consulta ORM.

### LDAP INJECTION
Ataque usado para explorar aplicações que constroem declarações LDAP com base na entrada do usuário. Quando uma aplicação falha em sanitizar adequadamente a entrada do usuário, é possível modificar as declarações LDAP usando um proxy local.

### EXPRESSION LANGUAGE INJECTION
Ocorre quando uma aplicação incorpora dados controláveis ​​pelo usuário em uma string que é avaliada dinamicamente por um interpretador EL. Se os dados não forem validados, um invasor pode usar a entrada para modificar o código e injetar código malicioso que será executado pelo servidor.

## Cenários de ataque
**Cenário #1:** Uma aplicação usa dados não confiáveis na construção da seguinte chamada SQL vulnerável:

```
String query = "SELECT * FROM accounts WHERE custID='" + request.getParameter("id") + "'";
```

**Cenário #2:** Da mesma forma, a confiança cega de uma aplicação em frameworks pode resultar em consultas ainda vulneráveis (por exemplo, Hibernate Query Language (HQL)):

```
Query HQLQuery = session.createQuery("FROM accounts WHERE custID='" + request.getParameter("id") + "'");
```

Em ambos os casos, o invasor modifica o valor do parâmetro `'id'` no seu navegador para enviar: `' or '1'='1`. Por exemplo:

```
http://example.com/app/accountView?id=' or '1'='1
```

Isso altera o significado das duas consultas para retornar todos os registros da tabela accounts. Ataques mais perigosos poderiam modificar ou excluir dados ou até invocar procedimentos armazenados.

## Como desenvolvedores podem se prevenir a esse tipo de ataque?

A opção preferencial é usar uma API segura, que evita totalmente o uso do interpretador, fornecendo uma interface parametrizada ou migrando para uso Object Relational Mapping Tools (ORMs).

Utilizar LIMIT e outros controles SQL dentro das consultas para prevenir a divulgação em massa de dados em caso de Injection.

Realizar a validação de entrada do lado do servidor.

Vale lembrar que a OWASP tem uma série de outras medidas importantes que se precisa ter em mente contra esse risco, veja [aqui](https://bit.ly/3HRFixl)! 

## Uma das formas mais antigas de ataque e também uma das mais comuns
Ter conhecimento do OWASP Top 10 Injection é importante para nós, desenvolvedores, pois mesmo com vários recursos disponíveis para lidar com esse tipo de ataque, ele ainda é um dos mais comuns.

Ao não validar ou codificar corretamente a entrada de dados do usuário, uma aplicação corre o risco de permitir a execução de código malicioso que pode afetar a segurança de toda a aplicação. Por isso, é crucial que desenvolvedores estejam cientes dos riscos desse tipo de vulnerabilidade e saibam como ser defensivos na hora do desenvolvimento!

[Fique por dentro sobre SQL Injection](https://bit.ly/3HRFixl).