Biblioteca de segurança para tratar as principais vulnerabilidades web Tarcizio Vieira Neto DIOPE/COGSI/SISEC/SIDES Líder em soluções de TI para governo Apresentação pessoal Tarcizio Vieira Neto 4 anos de SERPRO, desde 2009 na área de segurança de software certificado MCSO certificado CSSLP [email protected] (61) 2021-7486 Objetivos Conhecer as principais vulnerabilidades de segurança comumente encontradas em aplicações Web – OWASP Top 10 Apresentar a arquitetura da biblioteca OWASP ESAPI e como esta arquitetura ajuda a resolver alguns das vulnerabilidades listadas no Top 10 Motivação Riscos de segurança em aplicações – Os atacantes podem usar diversos caminhos através da aplicação que potencialmente podem prejudicar o negócio ou a organização. – Cada um desses caminhos representa um risco que pode, ou não, ser prejudicial o suficientemente para justificar a sua atenção. OWASP Top 10 A OWASP produz uma publicação chamada OWASP Top 10, onde lista as 10 principais vulnerabilidades que afetam os sistemas Web. Sobre a publicação: – É lançada a cada 3 anos. – A versão mais recente foi lançada em abril de 2013. – O Top 10 não trata somente como evitar as vulnerabilidades, mas também trata sobre gerenciamento de riscos. – Para gerenciar estes riscos, as organizações precisam além de ações de sensibilização, testes de aplicação e correção, um programa de gestão de riscos de aplicações. – As versões anteriores são de 2004, 2007 e 2010. OWASP Top 10 A1: Falha de Injeção A2: Quebra de autenticação e no Gerenciamento de Sessão A3: Cross-Site Scripting (XSS) A4: Referência Insegura e Direta a Objetos A5: Configuração Incorreta de Segurança A6: Exposição de Dados Sensíveis A7: Falta de Função para Controle do Nível de Acesso A8: Cross-Site Request Forgery (CSRF) A9: Utilização de Componentes Vulneráveis Conhecidos A10: Redirecionamentos e Encaminhamentos Inválidos OWASP ESAPI O que é a ESAPI? – É uma API de segurança corporativa. – Desenvolvido pela OWASP – Licença BSD – Linguagens: • Java (Java EE) • .NET • ASP classico • PHP • ColdFusion • Python • Haskell • Javascript OWASP ESAPI Fonte: Chris Schmidt, Solving Real World Problems with ESAPI, FROC 2010 OWASP ESAPI Fonte: Chris Schmidt, Solving Real World Problems with ESAPI, FROC 2010 OWASP ESAPI Problemática atual: OWASP ESAPI Arquitetura OWASP ESAPI Tratando Configuração de Segurança da Aplicação OWASP ESAPI Configurando a ESAPI – A ESAPI foi projetada para ser facilmente extensível. • As implementações de referência podem ser substituídas por implementações próprias que se integram à infraestrutura de segurança já existente. • Isto permite que implementações de segurança sejam facilmente substituídas sem a necessidade de reescrever toda a aplicação. A1: Falhas de Injeção Características: – Ocorrem quando dados não confiáveis são enviados para um interpretador como parte de um comando ou consulta – Os dados do ataque podem iludir o interpretador a executar comandos indesejáveis ou acessar dados de forma não autorizada. – Os ataques de SQL Injection, baseiam-se na tentativa de utilizar os parâmetros de entrada da aplicação para inserir sequências de caracteres com propósitos maliciosos. – Causados também por falta ou falha na validação de entrada de dados A1: Falhas de Injeção Podem ser do tipo: – SQL Injection (mais comum) – XPATH Injection – LDAP Injection, – Comand Injection (tem como alvo o sistema operacional do servidor) – Injection into SOAP – SMTP Command Injection → Os princípios são os mesmos, o que muda é a tecnologia. A1: Falhas de Injeção Ilustração: cenário de ataque SQL Injection A1: Falhas de Injeção Ilustração: cenário de ataque SQL Injection A requisição pode ser enviada da seguinte forma: http://example.com/app/accountView?userID=0'+or+1=1-- String userID = request.getParameter("userID"); Statement statement = connection.createStatement( "SELECT * FROM accounts WHERE user_id = '"+ userID +"';"); ResultSet rs = statement.executeQuery(); Resultado da concatenação: SELECT * FROM accounts WHERE user_id = '0' or 1=1--'; A1: Falhas de Injeção Como evitar: – Considerar todas as entradas de dados como não confiáveis e fazer a validação – Filtrar as entradas com uma lista de caracteres permitidos (lista branca), rejeitando a entrada de tudo o que estiver fora da lista – Uma lista contendo os caracteres não permitidos (lista negra) é uma opção que pode ser usada em conjunto com a anterior Obs.: Utilizar somente a lista negra é insuficiente, pois o atacante pode utilizar formas variadas para uma mesma entrada de dados! A1: Falhas de Injeção Como evitar (cont...): – Realizar codificação dos dados de saída – Utilizar consultas Parametrizadas: String userID = request.getParameter("userID"); PreparedStatement prepStmt = con.prepareStatement("SELECT * FROM accounts WHERE user_id = ?"); prepStmt.setString(1, userID); ResultSet rs = prepStmt.executeQuery(); A1: Falhas de Injeção Ilustração: - Defesa através da codificação dos dados de entrada: A1: Falhas de Injeção Ilustração: - Defesa através da codificação dos dados de entrada: A1: Falhas de Injeção Tratando Validação e Codificação com a ESAPI A1: Falhas de Injeção Codificação e Decodificação de Dados não Confiáveis A1: Falhas de Injeção Configurando Validator – ESAPI.properties (...) # Global HTTP Validation Rules # Values with Base64 encoded data (e.g. encrypted state) will need at least [a-zA-Z0-9\/+=] Validator.HTTPScheme=^(http|https)$ Validator.HTTPServerName=^[a-zA-Z0-9_.\\-]*$ Validator.HTTPParameterName=^[a-zA-Z0-9_]{1,32}$ Validator.HTTPParameterValue=^[a-zA-Z0-9.\\-\\/+=@_ ]*$ Validator.HTTPCookieName=^[a-zA-Z0-9\\-_]{1,32}$ Validator.HTTPCookieValue=^[a-zA-Z0-9\\-\\/+=_ ]*$ Validator.HTTPHeaderName=^[a-zA-Z0-9\\-_]{1,32}$ Validator.HTTPHeaderValue=^[a-zA-Z0-9()\\-=\\*\\.\\?;,+\\/:&_ ]*$ Validator.HTTPContextPath=^[a-zA-Z0-9.\\-\\/_]*$ Validator.HTTPServletPath=^[a-zA-Z0-9.\\-\\/_]*$ Validator.HTTPPath=^[a-zA-Z0-9.\\-_]*$ Validator.HTTPQueryString=^[a-zA-Z0-9()\\-=\\*\\.\\?;,+\\/:&_ %]*$ Validator.HTTPURI=^[a-zA-Z0-9()\\-=\\*\\.\\?;,+\\/:&_ ]*$ Validator.HTTPURL=^.*$ Validator.HTTPJSESSIONID=^[A-Z0-9]{10,30}$ # Validation of file related input Validator.FileName=^[a-zA-Z0-9!@#$%^&{}\\[\\]()_+\\-=,.~'` ]{1,255}$ Validator.DirectoryName=^[a-zA-Z0-9:/\\\\!@#$%^&{}\\[\\]()_+\\-=,.~'` ]{1,255}$ (...) A1: Falhas de Injeção Configurando Validator - validation.properties Validator.SafeString=^[.\\p{Alnum}\\p{Space}]{0,1024}$ Validator.Email=^[A-Za-z0-9._%'-]+@[A-Za-z0-9.-]+\\.[a-zA-Z]{2,4}$ Validator.IPAddress=^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$ Validator.URL=^(ht|f)tp(s?)\\:\\/\\/[0-9a-zA-Z]([-.\\w]*[0-9a-zA-Z])*(:(0-9)*)*(\\/?)([a-zA-Z0-9\\-\\.\\?\\,\\:\\'\\/\\\\\\ +=&amp;%\\$#_]*)?$ Validator.CreditCard=^(\\d{4}[- ]?){3}\\d{4}$ Validator.SSN=^(?!000)([0-6]\\d{2}|7([0-6]\\d|7[012]))([ -]?)(?!00)\\d\\d\\3(?!0000)\\d{4}$ Chamada referenciando expressão regular de validação: String input = request.getParameter("email"); int maxLength = 512; Boolean allowNull = false; UserBean bean = new UserBean(); try { bean.setEmail( ESAPI.validator() .getValidInput("User Email", input, "Email", maxLength, allowNull)); } A2: Quebra de autenticação e no Gerenciamento de Sessão Características: – As funções de uma aplicação relacionadas com autenticação e gestão de sessões muitas vezes são implementadas de forma incorreta • Desta forma, os atacantes podem comprometer senhas, chaves, identificadores de sessão ou ainda explorar outras falhas de implementação para assumirem a identidade de outros usuários. A2: Quebra de autenticação e no Gerenciamento de Sessão A aplicação está vulnerável se: – As credenciais de autenticação de usuário não estão protegidas utilizando hash ou criptografia, quando armazenadas. Obs.: Ver A6. – As credenciais podem ser descobertas através de funções de gerenciamento de contas fracas por exemplo: criação de conta, alteração de senha, recuperação de senha, IDs de sessão fracos. – IDs de sessão são expostos por exemplo: reescrita de URL. na URL – IDs de sessão são vulneráveis a ataques de fixação de sessão. A2: Quebra de autenticação e no Gerenciamento de Sessão A aplicação está vulnerável se (cont...): – IDs de sessão não expiram, ou sessões de usuário ou tokens de autenticação, particularmente aqueles baseados em single sign-on (SSO), e não são devidamente invalidados durante o logout. – IDs de sessão não são rotacionados após o login bemsucedido. – Senhas, IDs de sessão, e outras credenciais são enviadas através de conexões não criptografadas. Obs.: Ver A6. A2: Quebra de autenticação e no Gerenciamento de Sessão Como evitar: – Um único modelo de controles para autenticação e gerenciamento de sessão. Estes controles devem ser capazes de: • Atender todos os requisitos para autenticação e gerenciamento de sessão definidos nas áreas V2 (Autenticação) e V3 (Gerenciamento de Sessão) do Application Security Verification Standard (ASVS) publicado pela OWASP. – Fornecer uma interface simples para os desenvolvedores. Obs.: Esforços devem ser tomados para evitar a ocorrência de falhas de XSS que podem ser utilizados para roubar os IDs de sessão. Obs.: ver A3 A2: Quebra de autenticação e no Gerenciamento de Sessão Tratando Autenticação com ESAPI A2: Quebra de autenticação e no Gerenciamento de Sessão Tratando Autenticação com ESAPI (...) Tentativas de login permitidas #====================================================================== # ESAPI Authenticator Número de senhas que não podem se repetir # para determinado usuário Authenticator.AllowedLoginAttempts=3 Authenticator.MaxOldPasswordHashes=13 Authenticator.UsernameParameterName=username Authenticator.PasswordParameterName=password Nome dos campos de login/senha # RememberTokenDuration (in days) do formulário de login Authenticator.RememberTokenDuration=14 # Session Timeouts (in minutes) Authenticator.IdleTimeoutDuration=20 Tempo de duração do token em dias Authenticator.AbsoluteTimeoutDuration=120 para implementar a funcionalidade “Rember me” Parâmetros de Timeout #====================================================================== (...) A3: Cross-Site Scripting (XSS) Características: – As falhas XSS ocorrem sempre que uma aplicação obtém dados fornecidos pelo usuário (não confiáveis) e os envia para um navegador web sem realizar o processo de validação ou codificação daquele conteúdo de modo conveniente. – O XSS permite aos atacantes executarem scripts no navegador da vítima, que pode ser usado para sequestrar sessões de usuário, modificar a aparência de sites Web e redirecionar o usuário para sites maliciosos. A3: Cross-Site Scripting (XSS) Tipos: – Persistente – Não Persistente A3: Cross-Site Scripting (XSS) XSS Persistente – Cenário de ataque: • Dados enviados por usuários são armazenados e posteriormente mostrados para outro ou outros usuários sem que sejam codificados • Podem atingir grandes quantidades de usuários (blogs, forums) • Dados armazenados (banco de dados, arquivo, etc) • Sem validar entrada de dados • Sem codificar saída de dados A3: Cross-Site Scripting (XSS) XSS Persistente - cenário de ataque (parte 1) A3: Cross-Site Scripting (XSS) XSS Persistente - cenário de ataque (parte 2) A3: Cross-Site Scripting (XSS) Ilustração: -Defesa através da validação dos dados de entrada A3: Cross-Site Scripting (XSS) Ilustração: -Defesa através do mecanismo de codificação dos dados de saída A3: Cross-Site Scripting (XSS) XSS Não Persistente – Cenário de ataque: • Dado enviado por usuário ao servidor é enviado de volta ao usuário na resposta do servidor • Caso haja código em meio a esses dados, ele pode ser executado no navegador do cliente A3: Cross-Site Scripting (XSS) XSS Não Persistente - cenário de ataque A3: Cross-Site Scripting (XSS) XSS Não Persistente - cenário de ataque – A aplicação usa dados não confiáveis na construção dos tags HTML sem realizar a codificação dos dados, conforme o exemplo a seguir: <html> (...) Nome: <%= request.getParameter("nome") %> (...) </html> – A URL inclui um script no parâmetro da aplicação http://www.example.com/view.jsp?nome="<script>alert(document.cookie)</script>" A3: Cross-Site Scripting (XSS) XSS Não Persistente Defesa através da validação dos dados de entrada A3: Cross-Site Scripting (XSS) XSS Não Persistente Defesa através através do mecanismo de codificação dos dados de saída A3: Cross-Site Scripting (XSS) Como evitar XSS (de modo geral): – Tratar as saídas (output) para o cliente usando escaping ou encoding de caracteres, fazendo com que o script submetido pelo atacante seja tratado como texto a ser renderizado pelo navegador, ex: <script> alert (); </script> ↓ &lt;script&gt; alert() &lt;script&gt; Como tratar a saída: – Utilizando frameworks que auxiliam na proteção contra XSS – Para conteúdo rico considere bibliotecas de auto-sanitização como OWASP's AntiSamy ou o Java HTML Sanitizer Project. A3: Cross-Site Scripting (XSS) Codificação e Decodificação de Dados não Confiáveis A4: Referência Insegura e Direta a Objetos Características: – Uma referência direta a um objeto ocorre quando um programador expõe uma referência para um objeto interno da implementação, como: • Arquivo • Diretório • Chave de uma tabela no banco de dados • URL • Parâmetro de formulário A4: Referência Insegura e Direta a Objetos Cenário de ataque: – Sem uma verificação de controle de acesso ou outra proteção semelhante, os atacantes podem manipular estas referências para acessar informações ou outros objetos nãoautorizados. – Cenário 1: Mudança no identificador presente na URL URL gerada pela aplicação: http://www.example.com/visualiza_info_conta.jsp?userId=4325110 ← acesso legítimo URL adulterada: http://www.example.com/visualiza_info_conta.jsp?userId=5432112 ← acesso indevido A4: Referência Insegura e Direta a Objetos Cenário de ataque: – Cenário 2: Mudança no identificador de um arquivo presente na URL URL gerada pela aplicação: http://www.example.com/downloadFile.do?filePath="/var/lib/docs/file1.doc" ← acesso legítimo URL adulterada: http://www.example.com/downloadFile.do?filePath="/var/lib/docs/file2.doc" ← acesso indevido http://www.example.com/downloadFile.do?filePath="/etc/shadow" ← acesso indevido A4: Referência Insegura e Direta a Objetos Como evitar: – Evite expor referências a objetos internos. – Verificar o acesso – através de verificação de controle de acesso para garantir se o usuário está autorizado a acessar o recurso solicitado – Use referência indiretas a objetos por usuário ou sessão. • Isso impede que o atacante atinja diretamente os recursos não autorizados. • A aplicação tem que mapear as referências indiretas por usuário de volta para a chave do banco de dados real no servidor. A4: Referência Insegura e Direta a Objetos Tratando Referências Direta a Objetos com a ESAPI A4: Referência Insegura e Direta a Objetos Como evitar (cont...): – Use referência indiretas a objetos por usuário ou sessão – Exemplo de URL gerada utilizando mapa de referência indireta aos objetos http://www.example.com/visualiza_info_conta.jsp?userId=12F01BA430 A5: Configuração Incorreta de Segurança Características: – A segurança depende também da existência de configurações seguras específicas definidas e usadas na aplicação, frameworks, servidor de aplicação, servidor de Web e plataforma. – Todas as configurações devem ser definidas, implementadas e mantidas → muitas vezes elas não vem aplicadas diretamente do fornecedor com padrões de segurança definidos. – Isto inclui também possuir todo o software atualizado, incluindo todas as bibliotecas de código usadas pela aplicação. – Possui mais ligação com o ambiente de produção do que com o código da aplicação. A5: Configuração Incorreta de Segurança Como evitar: – Um processo de hardening recorrente que torne fácil e rápido de implantar outro ambiente que está devidamente blindado – Um processo para se manter a par e implantar todas as novas atualizações e correções de software (patch de segurança) em tempo hábil e em cada ambiente. – Executar varreduras de segurança e fazer auditorias periodicamente para ajudar a detectar erros futuros de configuração ou correções ausentes A6: Exposição de Dados Sensíveis Características: – Muitas aplicações Web não protegem devidamente dados sensíveis, como números dos cartões de créditos, dados pessoais e credenciais de autenticação com algoritmos de cifra ou de resumo (hash). – Os atacantes podem roubar ou modificar estes dados, protegidos de forma deficiente, para realizar roubos de identidade, fraude com cartões de crédito ou outros crimes. A6: Exposição de Dados Sensíveis Como evitar: – Para todos dados sensíveis devemos assegurar que: • Sejam criptografados nos locais onde são armazenados a longo prazo, especialmente nos backups de dados. • Somente usuários autorizados podem acessar as cópias dos dados decriptografados. • Um padrão de algoritmo de criptografia forte (preferencialmente os recomendados pelo e-ping e ICPBrasil) esteja sendo utilizado. • Uma chave forte tenha sido gerada, protegida contra acesso não autorizado e que a troca das chaves seja planejada. A6: Exposição de Dados Sensíveis Tratando Informações Sensíveis com a ESAPI A6: Exposição de Dados Sensíveis Tratando Informações Sensíveis com a ESAPI A6: Exposição de Dados Sensíveis Configurando o Encryptor (...) #========================================================================== # ESAPI Encryption # To calculate these values, you can run: # java -classpath esapi.jar org.owasp.esapi.reference.crypto.JavaEncryptor Encryptor.MasterKey=a6H9is3hEVGKB4Jut+lOVA== Encryptor.MasterSalt=SbftnvmEWD5ZHHP+pX3fqugNysc= Encryptor.PreferredJCEProvider=SunJCE # Warning: This property does not control the default reference implementation for # ESAPI 2.0 using JavaEncryptor. Also, this property will be dropped # in the future. # @deprecated # Encryptor.EncryptionAlgorithm=AES # For ESAPI Java 2.0 - New encrypt / decrypt methods use this. Encryptor.CipherTransformation=AES/CBC/PKCS5Padding Encryptor.cipher_modes.combined_modes=GCM,CCM,IAPM,EAX,OCB,CWC Encryptor.cipher_modes.additional_allowed=CBC (...) A7: Falta de Função para Controle do Nível de Acesso Características: – Muitas aplicações Web verificam os direitos de acesso a uma URL antes de exibirem links e botões protegidos. – As aplicações devem realizar verificações de controles de acesso semelhantes cada vez que estas páginas são acessadas. – Caso contrário, os atacantes podem forjar URLs e acessar estas páginas escondidas, sem qualquer controle. A7: Falta de Função para Controle do Nível de Acesso Cenário de ataque: – O atacante modifica o apontamento da URL de destino no browser URL gerada pela aplicação: http://example.com/app/getappInfo ← acesso legítimo URL adulterada: http://example.com/app/admin_getappInfo ← acesso indevido A7: Falta de Função para Controle do Nível de Acesso Como evitar: – A aplicação deve ter um módulo de autorização – Consistente e fácil de analisar – Que seja chamado por todas as suas funções de negócio. – Deve haver processo para gerenciar os direitos – De fácil atualização e auditoria – Deve negar todo o acesso por padrão – Deve exigir direitos explícitos para papéis específicos no acesso a todas as funções A7: Falta de Função para Controle do Nível de Acesso Tratando o Controle de Acesso com AccessController da ESAPI A7: Falta de Função para Controle do Nível de Acesso O módulo AccessControl depende dos seguintes arquivos e configuração: – ESAPI-AccessControlPolicy.xml (políticas de controle de acesso) – URLAccessRules.txt (regras de restrição de acesso às URLs) URLAccessRules.txt # Regras de Acesso a URL # /app/getappInfo | any | allow | /app/admin_getappInfo | admin | allow | A8: Cross-Site Request Forgery (CSRF) Características: – Um ataque CSRF força o navegador de uma vítima que tenha uma sessão ativa a enviar uma requisição HTTP forjada para uma aplicação Web vulnerável. • A requisição é pré-autenticada e inclui o cookie de sessão e outras informações da sessão, como informação de autenticação. – Esta falha permite ao atacante forçar o navegador da vítima a criar requisições que a aplicação vulnerável aceite como requisições legítimas oriundos do computador da vítima. A8: Cross-Site Request Forgery (CSRF) Cenário de ataque A8: Cross-Site Request Forgery (CSRF) Como evitar: – Usar parâmetro que não pode ser adivinhado pelo atacante – Formas: • Token Secreto → mais fácil e mais recomendável • Requisitar senha nas operações sensíveis A8: Cross-Site Request Forgery (CSRF) Como evitar: – Token secreto. • São associados à sessão do usuário • Os tokens (teoricamente) não podem ser adivinhados pelo atacante • Duas formas de implementar: – A aplicação passa o token em hidden fields nas páginas de resposta e o usuário envia token a cada requisição – A aplicação adiciona o token nos parâmetros das requisições Ex: http://example.com/action?param=1&ctoken=8FD4B2 A8: Cross-Site Request Forgery (CSRF) Tratando CSRF utilizando HTTP Utilities A8: Cross-Site Request Forgery (CSRF) Tokens CSRF são atribuídos aos usuários na autenticação A8: Cross-Site Request Forgery (CSRF) Como evitar: – Requisitar Senha • Os atacantes (teoricamente) não conhecem a senha • Solicitar a senha em todas as requisições – Atrapalha a usabilidade – A aplicação deve requisitar apenas para operações sensíveis A9: Utilização de Componentes Vulneráveis Conhecidos Características: – Qualquer sistema depende de bibliotecas e subsistemas – Uma vulnerabilidade presente nestes componentes poderá afetar negativamente a aplicação ou sistema A9: Utilização de Componentes Vulneráveis Conhecidos Cenários de ataque: – Apache CXF Authentication Bypass – Ao não fornecer um token de identidade, atacantes podem chamar qualquer serviço web com todas as permissões. – Obs.: Apache CXF é um framework de serviços – Spring Remote Code Execution – Abuso da implementação de Linguagem Expression no Spring permitiu aos atacantes executarem código arbitrário, efetivamente comprometendo a segurança do servidor – Heartbeat - Vulnerabilidade presente no OpenSSL nas versões 1.0.1 e 1.0.2-beta para os sistemas Linux que permite roubo de informação protegida pelas criptografias nos protocolos SSL/TLS. A9: Utilização de Componentes Vulneráveis Conhecidos Como evitar: – Identificar todos os componentes e as versões que você está utilizando, incluindo todas as dependências. – Monitorar a segurança desses componentes em banco de dados públicos, listas de e-mail de projetos e segurança, e mantê-los atualizados. – Estabelecer políticas de segurança que definam o uso do componente, assim como exigir certas práticas de desenvolvimento de software, passando em testes de segurança, e licenças aceitáveis. – Considere a adição de invólucros de segurança em torno dos componentes para desabilitar funcionalidades não utilizadas e/ou proteger falhas ou aspectos vulneráveis do componente. A10: Redirecionamentos e Encaminhamentos Inválidos Características: – Ocorre quando as aplicações Web redirecionam e encaminham usuários para outras páginas e sítios de Web e usam para isto dados não confiáveis para determinar as páginas de destino. – Sem uma validação adequada, os atacantes podem redirecionar as vítimas para sítios de phishing ou malware, ou então usar o mecanismo de encaminhamento para acessar páginas não autorizadas. A10: Redirecionamentos e Encaminhamentos Inválidos Cenário de ataque: – Cenário 1: A aplicação possui uma página chamada “redirect.jsp” que recebe apenas um parâmetro “url”. O atacante cria uma URL maliciosa que redireciona os usuários para o site malicioso, que executa phishing e instala malware. http://www.example.com/redirect.jsp?url=www.evil.com A10: Redirecionamentos e Encaminhamentos Inválidos Cenário de ataque: – Cenário 2: A aplicação usa encaminhamentos para rotear requisições entre partes diferentes do site. • Para facilitar, algumas páginas usam um parâmetro para indicar onde o usuário deve ser enviado se a transação for efetuada com sucesso. • Neste caso, o atacante cria uma URL que irá passar pela verificação de controle de acesso e encaminhá-lo para uma funcionalidade administrativa que o atacante não teria autorização para acessá-la. http://www.example.com/page.jsp?fwd=admin.jsp A10: Redirecionamentos e Encaminhamentos Inválidos Como evitar: – Não utilizar parâmetros dos usuários para o cálculo da URL de destino, ou então utilizar referências indiretas para as URLs. – Assegurar que os valores fornecidos são válidos e autorizados para o usuário. Considerações Finais A razão pela qual criamos princípios de segurança no desenvolvimento é ajudar os desenvolvedores a construírem aplicações seguras e não apenas para evitar as vulnerabilidades mais comuns. Ensinar o desenvolvedor a se prevenir contra uma determinada vulnerabilidade fará com que ele se previna dela. – Ensiná-lo a desenvolver de forma segura fará com que ele se previna de muitas vulnerabilidades. Biblioteca de segurança para tratar as principais vulnerabilidades web Dúvidas? Referências Chris Schmidt, Solving Real World Problems with ESAPI, FROC 2010 Jeff Williams, Establishing an Enterprise Security API to Reduce Application Security Costs, Aspect Security OWASP Top 10 https://www.owasp.org/index.php/Category:OWASP_Top_Ten_Project OWASP ESAPI https://www.owasp.org/index.php/Category:OWASP_Enterprise_Security_API Serviço Federal de Processamento de Dados - Serpro Edifício Sede: SGAN 601 - Módulo V - CEP 70836-900 Fone: (61) 2021-8000 - Brasília DF www.serpro.gov.br