Pesquisa de site

As 20 principais vulnerabilidades do OWASP e como corrigi-las Infográfico


O Open Web Application Security Project (OWASP) é uma organização bem estabelecida dedicada a melhorar a segurança de aplicativos da Web por meio da criação de ferramentas, documentação e informações, incluindo as 10 principais vulnerabilidades de aplicativos da Web anuais. A seguir, uma compilação das vulnerabilidades críticas mais recentes que surgiram em suas listas, bem como informações sobre como corrigir cada uma delas.

Principais vulnerabilidades do OWASP

1. SQL Injeção

Descrição: as vulnerabilidades de injeção de SQL ocorrem quando os dados entram em um aplicativo de uma fonte não confiável e são usados para construir dinamicamente uma consulta SQL. A injeção de SQL pode resultar em perda ou corrupção de dados, falta de responsabilidade ou negação de acesso. Às vezes, a injeção pode levar à aquisição completa do hospedeiro.

Correção/Recomendação: A validação de entrada adequada do lado do servidor deve ser usada para filtrar caracteres perigosos da entrada do usuário. Além disso, o uso de instruções preparadas/procedimentos armazenados parametrizados pode garantir que a entrada seja processada como texto.

Snippet de código de exemplo (validação de entrada):

String input=request.getParameter ("SeqNo");
String caracterePadrão="[0-9a-zA-Z]";
Se (! entrada. corresponde a (characterPattern))
{
out.println ("entrada inválida ");
}

2. Script Cross Site (XSS)

Descrição: nesses casos, dados inválidos controlados pelo usuário são processados no aplicativo, levando à execução de scripts mal-intencionados. As vulnerabilidades XSS podem permitir que invasores capturem informações do usuário e/ou injetem código HTML no aplicativo da Web vulnerável.

Correção/Recomendação: A validação de entrada e a codificação de saída adequadas do lado do servidor devem ser empregadas no lado do cliente e do servidor para evitar a execução de scripts. Os caracteres perigosos devem ser filtrados da entrada do usuário [por exemplo: | , & , , , $, % , @ , ' , " , \' , \" , <> ,() , + , CR (Retorno de carro, 0x0d ASCII) , LF (Alimentação de linha, ASCII 0x0a),(sinal de vírgula) ,\].

Snippet de código de exemplo (técnica de codificação):

<input type="text" maxlength="30" name="ecsChangePwdForm" size="40" readonly="true" value='<%=ESAPI.encoder().encodeForHTML(request.getParameter("userName"))%>'/>

3. Vazamento de informações

Descrição: o aplicativo Web pode revelar dados do sistema ou informações de depuração gerando exceções ou gerando mensagens de erro. O vazamento de dados do sistema ou informações de depuração por meio de um fluxo de saída ou função de registro pode permitir que os invasores obtenham conhecimento sobre o aplicativo e criem ataques especializados nele.

Correção/Recomendação:

  • Certifique-se de que os códigos de erro e outras mensagens visíveis pelos usuários finais não contenham informações confidenciais.
  • Limpe todas as mensagens, removendo qualquer informação confidencial desnecessária.
  • Certifique-se de que a depuração, as mensagens de erro e as exceções não estejam visíveis.

Trecho de código de exemplo:

catch (Exceção e)
{
if(log.isDebugEnabled()) log.debug (contexto, EVENTOS. ADHOC,
"Caught InvalidGSMException Exception Exception -- "
+ e.toString() );
}

4. Injeção de quadro

Descrição: a validação inadequada dos parâmetros de entrada pode levar os invasores a injetar quadros para comprometer informações confidenciais do usuário. A injeção de quadros é um método comum empregado em ataques de phishing

Correção/Recomendação: Use uma lista de permissões de entradas aceitáveis que esteja estritamente em conformidade com as especificações seguras

Trecho de código de exemplo:

String input=request.getParameter ("input");
Padrão de caractere de cadeia de caracteres="[./a-zA-Z0-9?"="&]";
If (! input. matches (character Pattern))
{
out.println ("Invalid Input ");
}

5. Redirecionamento de URL

Descrição: embora seja comum que os aplicativos da Web redirecionem ou encaminhem usuários para outros sites/páginas, os invasores geralmente exploram aplicativos vulneráveis sem a validação de redirecionamento adequada. Isso pode levar ao redirecionamento malicioso para uma página não confiável.

Correção/Recomendação: Use uma lista de permissões de entradas aceitáveis que estejam estritamente em conformidade com as especificações e para URLs ou domínios aprovados usados para redirecionamento.

Trecho de código de exemplo:

String input=request.getParameter ("input");
Padrão de caractere de cadeia de caracteres="[./a-zA-Z0-9?"="&]";
If (! input. matches (character Pattern))
{
out.println ("Invalid Input ");
}

6. Tempo limite da sessão ausente

Descrição: os invasores podem obter acesso não autorizado a aplicativos da Web se os tempos limite de inatividade não estiverem configurados corretamente.

Correção/Recomendação: Certifique-se de que a funcionalidade de tempo limite esteja configurada e funcionando corretamente.

Trecho de código de exemplo:

<webapp>
<session-config>
<session-timeout>15</session-timeout>
</session-config>
</webapp>

7. Informações confidenciais passadas como texto não criptografado no URL GET

Descrição: os aplicativos Web que usam solicitações GET para passar informações por meio da cadeia de caracteres de consulta estão fazendo isso em texto não criptografado. Isso torna todas as informações confidenciais passadas com GET visíveis no histórico do navegador e nos logs do servidor.

Correção/Recomendação: Usar POST em vez de GET garante que informações confidenciais não sejam visíveis nos parâmetros da cadeia de caracteres de consulta.

8. Cookies de ID de sessão não marcados como seguros

Descrição: se os cookies de ID de sessão de um aplicativo da Web estiverem marcados como seguros, o navegador não os transmitirá por meio de uma solicitação HTTP não criptografada. Não marcá-los como tal permite que os cookies sejam acessíveis e visualizados por invasores em texto não criptografado.

Correção/Recomendação: Certifique-se de que os cookies confidenciais estejam definidos com o atributo "seguro" para garantir que sejam sempre transmitidos por HTTPS.

Trecho de código de exemplo:

Cookie cookie=new Cookie("myCookieName");
cookie.secure(verdadeiro);

9. Script de quadro cruzado (XFS)

Descrição: as explorações do XFS são usadas em conjunto com o XSS para direcionar os navegadores para uma página da Web controlada por invasores. Nesses casos, a página maliciosa carrega uma página de terceiros em um quadro HTML. Os scripts na página do invasor podem roubar dados da página de terceiros, sem o conhecimento do usuário.

>

Correção/Recomendação: A validação adequada deve ser usada para filtrar qualquer entrada maliciosa que possa ser injetada em um quadro e executada no navegador do usuário, dentro do contexto do quadro da página principal.

Trecho de código de exemplo:

if (top == self) }
document.documentElement.style.display='block';
}
else {
top.location=self.location;
}

10. Informações confidenciais exibidas como texto não criptografado na tela

Descrição: informações confidenciais (por exemplo, senhas, informações de cartão de crédito) não devem ser exibidas como texto não criptografado na tela. Além dos ataques de navegação no ombro, os dados confidenciais armazenados como texto não criptografado geralmente são encontrados em caches do lado do cliente, que podem ser facilmente roubados se descobertos.

Correção/Recomendação: Informações confidenciais devem ser mascaradas para que não fiquem visíveis para os usuários

Trecho de código de exemplo:

<asp:TextBox ID="txtSSN" TabIndex="6" runat="servidor" Width="206px" MaxLength="11" TextMode="Senha"></asp:TextBox>

11. Informações confidenciais armazenadas em cache

Descrição: os navegadores normalmente armazenam uma cópia dos itens solicitados em seus caches: páginas da web, imagens e muito mais. Isso cria uma lacuna de segurança para aplicativos que armazenam, processam e exibem dados confidenciais, pois os invasores que obtêm acesso ao cache do navegador do usuário têm acesso a qualquer informação nele contida.

Correção/Recomendação: Os cabeçalhos HTTP Cache-Control devem ser usados, como Cache-Control: no-cache, no-store Pragma: no-cache.

Trecho de código de exemplo:

<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expira" content="0" />

12. Força de criptografia inadequada

Descrição: aplicativos que usam tamanhos de chave inferiores a 1024 bits para criptografia podem ser explorados por meio de ataques de força bruta.

Correção/Recomendação: Use um tamanho de chave de bit de versão superior, 2048 bits ou maior.

13. Injeção de CRLF (Retorno de Carro e Alimentação de Linha)

Descrição: as explorações de CRLF ocorrem quando conteúdo malicioso é inserido nos cabeçalhos de resposta HTTP do navegador depois que um usuário desavisado clica em um link malicioso. Os hackers normalmente injetam código malicioso no navegador do usuário por meio do aplicativo/servidor da web, dificultando a detecção casual.

Correção/Recomendação: codifique todas as strings por URL antes da transmissão. Certifique-se de que os metacaracteres do shell e os terminadores de comando (por exemplo, ; CR ou LF) são filtrados dos dados do usuário antes de serem transmitidos.

Trecho de código de exemplo:

String autor=request.getParameter(AUTHOR_PARAM);
Cookie cookie=new Cookie("autor", ESAPI.encoder().encodeForURL(autor));
cookie.setMaxAge(expiraçãoDoCookie);
resposta.addCookie(cookie);

14. Violação do limite de confiança

Descrição: os aplicativos da Web geralmente misturam erroneamente dados confiáveis e não confiáveis nas mesmas estruturas de dados, levando a incidentes em que dados não validados/não filtrados são confiáveis/usados.

Correção/Recomendação: A validação de entrada adequada e a codificação de saída devem ser usadas nos dados antes de movê-los para limites confiáveis.

Trecho de código de exemplo:

String sessionPolicyId=request.getParameter("id");
if(sessionPolicyId.matches("[0-9a-zA-Z_]+") {
session.setAttribute("sessionPolicyId",sessionPolicyId);
}

15. Travessia de diretório

Descrição: ao aceitar entradas do usuário que controlam ou influenciam caminhos/nomes de arquivos usados em operações do sistema de arquivos, os aplicativos da Web vulneráveis podem permitir que invasores acessem ou modifiquem recursos do sistema protegidos de outra forma.

Correção/Recomendação: Uma lista de permissões de entradas de dados aceitáveis que estão estritamente em conformidade com as especificações pode impedir explorações de travessia de diretório.

Trecho de código de exemplo:

String input=request.getParameter("fileName");
if (ESAPI.validator().isValidFileName(Contexto de string, entrada de string, allowNull booleano)){

Arquivo arquivo=new File(entrada);
}

16. Fixação de sessão

Descrição: nesses casos, os aplicativos Web vulneráveis autenticam os usuários sem primeiro destruir as sessões existentes associadas a esses usuários. Isso permite que os invasores acessem as contas dos usuários sequestrando suas sessões ativas.

Correção/Recomendação: Destrua todos os identificadores de sessão existentes antes de autorizar uma nova sessão de usuário.

Trecho de código de exemplo:

session.invalidate();
sessão=request.getSession(verdadeiro);

17. Uso de um algoritmo criptográfico arriscado

Descrição: Os aplicativos da Web que usam algoritmos não padrão são fracamente criptografados, permitindo que os hackers obtenham acesso com relativa facilidade usando métodos de força bruta.

Correção/Recomendação: Ao armazenar ou transmitir dados confidenciais, use algoritmos criptográficos fortes e atualizados para criptografar esses dados antes de enviar/armazenar.

Trecho de código de exemplo:

MessageDigest md=MessageDigest.getInstance("SHA-256");
FileInputStream fis=new FileInputStream("c:\\loging.log");
byte[] dataBytes=novo byte[1024];
int nread=0;
while ((nread=fis.read(dataBytes)) != -1) {
md.update(dataBytes, 0, nread);
};
byte[] mdbytes=md.digest();

18. Gerenciamento de credenciais

Descrição: armazenar senhas em texto simples pode facilmente resultar em comprometimentos do sistema, especialmente se os arquivos de configuração/origem estiverem em questão.

Correção/Recomendação: Evite armazenar senhas em locais de fácil acesso. Use hashes criptográficos como uma alternativa ao texto simples.

19. SQL Hibernação de injeção

Descrição: O Hibernate é um framework ORM popular para Java — como tal, ele fornece vários métodos que permitem a execução de consultas SQL nativas. Os invasores geralmente exploram o Hibernate para executar instruções SQL maliciosas criadas dinamicamente.

Correção/Recomendação: A validação de entrada adequada do lado do servidor pode servir como uma defesa básica para filtrar caracteres perigosos. Instruções preparadas/procedimentos armazenados parametrizados podem ser usados para renderizar dados como texto antes do processamento ou armazenamento.

Trecho de código de exemplo:

Query hqlQuery=session.createQuery("selecione o produto de Pedidos como pedidos em que orders.id =?");
Resultados da lista=hqlQuery.setString(0, "123-ADB-567-QTWYTFDL").list();

20. Desligamento ou liberação inadequada de recursos

Descrição: o desligamento inadequado de recursos ocorre quando um aplicativo Web não libera um recurso do sistema antes que ele seja disponibilizado para reutilização. Um ataque de negação de serviço (Dos) pode ser iniciado esgotando o pool de recursos do servidor.

Correção/Recomendação: Quaisquer recursos criados ou alocados devem ser liberados corretamente após o uso.

Trecho de código de exemplo:

tente {
Connection con=DriverManager.getConnection(some_connection_string);
}
catch ( Exceção e ) {
log( e );
}
finalmente {
if( stmt != null )
stmt.close();
con.close() }

Resumindo, os 20 itens listados acima são as vulnerabilidades de aplicativos da Web mais comumente encontradas, de acordo com o OWASP. Embora muitos deles possam ser corrigidos por meio de práticas de codificação mais seguras, alguns podem exigir a identificação de patches específicos do fornecedor relevante. Em última análise, isso depende de quais tecnologias, estruturas e pacotes específicos estão sendo usados em seu aplicativo Web.

Precisa de uma maneira mais fácil de descobrir vulnerabilidades em seu aplicativo Web? Alimentado por testes orientados por políticas, o UpGuard pode verificar e monitorar automaticamente seu aplicativo da web em busca de configurações incorretas e lacunas de segurança.

Infográfico

Artigos relacionados