Corrigir as conclusões do Web Security Scanner

Esta página explica como interpretar, reproduzir e corrigir as conclusões do Web Security Scanner.

As funções do IAM para o Security Command Center podem ser concedidas ao nível da organização, da pasta ou do projeto. A sua capacidade de ver, editar, criar ou atualizar resultados, recursos e origens de segurança depende do nível para o qual lhe é concedido acesso. Para saber mais sobre as funções do Security Command Center, consulte o artigo Controlo de acesso.

Classes de vulnerabilidades

O Web Security Scanner deteta as seguintes classes de vulnerabilidades:

  • Cross-site scripting (XSS)
  • Falsificação de pedidos do lado do servidor
  • Injeção de flash
  • Conteúdo misto
  • Bibliotecas desatualizadas ou vulneráveis
  • Palavras-passe de texto não cifrado
  • Validação de origem não segura
  • Cabeçalhos inválidos
  • Cabeçalhos com erros ortográficos
  • Repositórios acessíveis
  • Injeção SQL
  • Injeção de XML
  • Poluição por protótipo

Classes de erros de configuração

O Web Security Scanner deteta as seguintes classes de erros de configuração:

  • Cabeçalho HTTP Strict Transport Security configurado incorretamente
  • Cabeçalho da Política de Segurança de Conteúdos em falta
  • O cabeçalho da Política de Segurança de Conteúdos está configurado incorretamente
  • Cabeçalho Cross-Origin-Opener-Policy em falta
  • Proteção contra clickjacking em falta

Se forem encontradas alguma destas vulnerabilidades ou configurações incorretas, o resultado é realçado para que possa explorá-lo em detalhe.

Impacto nos registos

Os rastos das análises do Web Security Scanner aparecem nos seus ficheiros de registo. Por exemplo, o Web Security Scanner gera pedidos de strings invulgares, como ~sfi9876 e /sfi9876. Este processo permite que a análise examine as páginas de erro da sua aplicação. Estes pedidos de páginas intencionalmente inválidos aparecem nos seus registos.

Desativação das conclusões após a correção

Depois de corrigir uma vulnerabilidade ou uma configuração incorreta, o Web Security Scanner não define automaticamente o estado da descoberta correspondente do Security Command Center como INACTIVE. A menos que altere o estado manualmente, o estado das descobertas geradas pelo Web Security Scanner no Security Command Center permanece ACTIVE.

Se estiver a usar a versão autónoma do Web Security Scanner, depois de corrigir uma vulnerabilidade ou uma configuração incorreta e o Web Security Scanner já não a conseguir detetar, os relatórios subsequentes não incluem a vulnerabilidade nem a configuração incorreta. Um registo da descoberta permanece nos relatórios de descobertas anteriores.

O Web Security Scanner executa análises geridas semanalmente.

Para mais informações acerca das análises do Web Security Scanner, consulte o artigo Tipos de análises.

Corrigir as conclusões do Web Security Scanner

Esta secção explica como corrigir diferentes tipos de resultados do Web Security Scanner. Para ver estratégias de defesa contra ataques comuns ao nível da aplicação descritos nos 10 principais OWASP, consulte as opções de mitigação dos 10 principais OWASP emGoogle Cloud.

XSS

Nome da categoria na API: XSS

Os testes de injeção de cross-site scripting (XSS) do Web Security Scanner simulam um ataque de injeção inserindo uma string de teste benigna em campos editáveis pelo utilizador e, em seguida, executando várias ações do utilizador. Os detetores personalizados observam o navegador e o DOM durante este teste para determinar se uma injeção foi bem-sucedida e avaliar o seu potencial de exploração.

Se o JavaScript contido na string de teste for executado sem problemas, inicia o depurador do Chrome. Quando uma string de teste consegue ser executada, é possível injetar e executar JavaScript na página. Se um atacante encontrasse este problema, poderia executar JavaScript à sua escolha como o utilizador (vítima) que clica num link malicioso.

Em algumas circunstâncias, a aplicação em teste pode modificar a string de teste antes de ser analisada pelo navegador. Por exemplo, a aplicação pode validar a entrada ou limitar o tamanho de um campo. Quando o navegador tenta executar esta string de teste modificada, é provável que falhe e apresente um erro de execução de JavaScript. O erro indica um problema de injeção, mas pode não ser possível explorá-lo.

Para resolver esta descoberta, tem de confirmar se o problema é uma vulnerabilidade de XSS, verificando manualmente se é possível evitar as modificações da string de teste. Para informações detalhadas sobre como validar esta vulnerabilidade, consulte o artigo Scripting entre sites.

Existem várias formas de corrigir esta descoberta. A correção recomendada é escapar a todas as saídas e usar um sistema de modelos que suporte a funcionalidade de escape automático contextual.

XSS angular callback

Nome da categoria na API: XSS_ANGULAR_CALLBACK

Pode ocorrer uma vulnerabilidade de cross-site scripting (XSS) em módulos do AngularJS quando o Angular interpola uma string fornecida pelo utilizador. A injeção de valores fornecidos pelo utilizador numa interpolação do AngularJS pode permitir os seguintes ataques:

  • Um atacante pode injetar código arbitrário na página renderizada pelos navegadores.
  • Um atacante pode realizar ações em nome do navegador da vítima na origem da página.

Para reproduzir esta potencial vulnerabilidade, siga o link do URL de reprodução na consola Google Cloud depois de executar a análise. Este link abre diretamente uma caixa de diálogo de alerta ou injeta a string XSSDETECTED para provar que o ataque pode executar código. Se a string for injetada, pode abrir as ferramentas para programadores do seu navegador e pesquisar XSSDETECTED para encontrar a posição exata da injeção.

XSS error

Nome da categoria na API: XSS_ERROR

Uma descoberta XSS_ERROR é um potencial erro de XSS devido a uma falha de JavaScript. Em algumas circunstâncias, a aplicação em teste pode modificar a string de teste antes de o navegador a analisar. Quando o navegador tenta executar esta string de teste modificada, é provável que falhe e apresente um erro de execução do JavaScript. Este erro indica um problema de injeção, mas pode não ser possível explorá-lo.

Para corrigir esta descoberta, tem de confirmar se existe uma vulnerabilidade de XSS verificando manualmente se é possível evitar as modificações da string de teste. Para ver informações detalhadas sobre como validar esta vulnerabilidade, consulte o artigo Scripting entre sites.

Server side request forgery

Nome da categoria na API: SERVER_SIDE_REQUEST_FORGERY

Uma vulnerabilidade SERVER_SIDE_REQUEST_FORGERY permite que um utilizador de uma aplicação Web obtenha acesso a dados internos, forçando um servidor a fazer um pedido (como um pedido HTTP) a um ponto final de serviço restrito. Por exemplo, um atacante pode explorar esta vulnerabilidade para obter dados do serviço de Google Cloud metadados.

Para corrigir esta descoberta, use uma lista de autorizações para limitar os domínios e os endereços IP aos quais a aplicação Web pode fazer pedidos.

Rosetta flash

Nome da categoria na API: ROSETTA_FLASH

O Web Security Scanner pode detetar que o valor de um parâmetro de pedido é refletido no início de uma resposta, por exemplo, em pedidos que usam JSONP. Esta vulnerabilidade também é conhecida como injeção de Flash. Em determinadas circunstâncias, um atacante pode fazer com que o navegador execute a resposta como se fosse um ficheiro Flash fornecido pela aplicação Web vulnerável.

Para corrigir esta deteção, não inclua dados controláveis pelo utilizador no início de uma resposta HTTP.

Mixed content

Nome da categoria na API: MIXED_CONTENT

O Web Security Scanner observa passivamente o tráfego HTTP e deteta quando é feito um pedido de um ficheiro JavaScript ou CSS através de HTTP no contexto de uma página HTTPS. Neste cenário, um atacante de man-in-the-middle pode adulterar o recurso HTTP e obter acesso total ao Website que carrega o recurso ou monitorizar as ações realizadas pelos utilizadores.

Para corrigir esta descoberta, use links HTTP relativos. Por exemplo, substitua http:// por //.

Outdated library

Nome da categoria na API: OUTDATED_LIBRARY

O Web Security Scanner pode detetar que a versão de uma biblioteca incluída contém um problema de segurança conhecido. O Web Security Scanner é um verificador baseado em assinaturas que tenta identificar a versão da biblioteca em utilização e verifica a versão em relação a uma lista conhecida de bibliotecas vulneráveis. Os falsos positivos são possíveis se a deteção de versões falhar ou se a biblioteca tiver sido corrigida manualmente.

Para corrigir esta descoberta, atualize para uma versão segura conhecida da biblioteca incluída.

Struts insecure deserialization

Nome da categoria na API: STRUTS_INSECURE_DESERIALIZATION

O verificador de segurança Web pode detetar que a sua aplicação Web está a usar uma versão do Apache Struts que é vulnerável a ataques de injeção de comandos remotos. As versões afetadas do Struts podem analisar incorretamente um cabeçalho HTTP Content-Type inválido de um atacante. Esta vulnerabilidade permite que os comandos maliciosos sejam executados ao abrigo dos privilégios do servidor Web.

Seguem-se as versões vulneráveis do Apache Struts:

  • Versões 2.3.x anteriores à 2.3.32
  • Versões 2.5.x anteriores a 2.5.10.1

Para corrigir esta deteção, atualize o Apache Struts para a versão mais recente.

Para mais informações sobre a vulnerabilidade do Apache Struts, consulte o artigo CVE-2017-5638.

Cacheable password input

Nome da categoria na API: CACHEABLE_PASSWORD_INPUT

O Web Security Scanner pode detetar que, para uma entrada de palavra-passe, a aplicação Web usa um elemento <input> que não tem o atributo type definido como password. Isto pode fazer com que os navegadores armazenem em cache a palavra-passe introduzida pelo utilizador na cache do navegador normal, em vez de num armazenamento de palavras-passe seguro.

Para corrigir esta descoberta, no elemento <input>, adicione o atributo type e defina-o como password, por exemplo, &lt;input&nbsp;type="password"&gt;. Este atributo oculta os carateres que o utilizador introduz no campo de palavra-passe.

Clear text password

Nome da categoria na API: CLEAR_TEXT_PASSWORD

O Web Security Scanner pode detetar que a aplicação parece estar a transmitir um campo de palavra-passe em texto não cifrado. Um atacante pode intercetar o tráfego de rede e roubar o campo da palavra-passe.

Para proteger as informações confidenciais que circulam entre o cliente e o servidor, tome sempre as seguintes precauções:

  • Use certificados TLS/SSL.
  • Use sempre HTTPS em páginas que incluam campos de palavras-passe.
  • Certifique-se de que os atributos de ação do formulário apontam sempre para um URL HTTPS.

Insecure allow origin ends with validation

Nome da categoria na API: INSECURE_ALLOW_ORIGIN_ENDS_WITH_VALIDATION

O Web Security Scanner pode detetar que um ponto final HTTP ou HTTPS entre sites valida apenas um sufixo do cabeçalho de pedido Origin antes de o refletir no cabeçalho de resposta Access-Control-Allow-Origin. Se a validação estiver configurada incorretamente, o ponto final pode conceder acesso a um domínio malicioso que tenha o mesmo sufixo que um domínio na lista de autorizações. Por exemplo, se o validador do ponto final corresponder a domínios como *google.com, pode conceder erroneamente acesso a maliciousdomaingoogle.com.

Para corrigir esta descoberta, valide se o domínio raiz esperado faz parte do valor do cabeçalho Origin antes de o refletir no cabeçalho de resposta Access-Control-Allow-Origin. Para carateres universais de subdomínio, adicione um ponto antes do domínio raiz, por exemplo, .endsWith(".google.com").

Insecure allow origin starts with validation

Nome da categoria na API: INSECURE_ALLOW_ORIGIN_STARTS_WITH_VALIDATION

O Web Security Scanner pode detetar que um ponto final HTTP ou HTTPS entre sites valida apenas um prefixo do cabeçalho de pedido Origin antes de o refletir no cabeçalho de resposta Access-Control-Allow-Origin. Se a validação estiver configurada incorretamente, o ponto final pode conceder acesso a um domínio malicioso que tenha o mesmo prefixo que um domínio na lista de autorizações. Por exemplo, se o validador do ponto final verificar apenas se o domínio de pedido contém google.com, pode conceder erroneamente acesso a google.com.maliciousdomain.com.

Para corrigir esta descoberta, valide se o domínio esperado corresponde totalmente ao valor do cabeçalho Origin antes de o refletir no cabeçalho Access-Control-Allow-Origin de resposta, por exemplo, .equals(".google.com").

Session ID leak

Nome da categoria na API: SESSION_ID_LEAK

O Web Security Scanner pode encontrar um identificador de sessão no cabeçalho do pedido Referer dos pedidos entre domínios da sua aplicação Web. Os domínios que recebem o Referer podem usar o identificador de sessão para roubar a identidade de um utilizador (usando o respetivo token) ou identificar o utilizador de forma exclusiva.

Para corrigir esta descoberta, armazene os identificadores de sessões em cookies, em vez do URL. Além disso, proteja os seus cookies com os seguintes atributos:

  • HTTPOnly: um atributo que torna os cookies inacessíveis a scripts do lado do cliente
  • Seguro: um atributo que torna os cookies transmissíveis apenas através de HTTPS

Invalid content type

Nome da categoria na API: INVALID_CONTENT_TYPE

O Web Security Scanner pode detetar que foi carregado um recurso que não corresponde ao cabeçalho HTTP Content-Type da resposta. Neste cenário, a aplicação devolve conteúdo sensível com um tipo de conteúdo inválido ou sem um cabeçalho X-Content-Type-Options: nosniff.

Para corrigir esta deteção, certifique-se do seguinte:

  • As respostas JSON são publicadas com o cabeçalho Content-Type application/json
  • Outras respostas confidenciais são publicadas com tipos MIME adequados
  • Publique conteúdo com o cabeçalho HTTP X-Content-Type-Options: nosniff

Invalid header

Nome da categoria na API: INVALID_HEADER

O Web Security Scanner pode detetar que um cabeçalho de segurança tem um erro de sintaxe, o que resulta num cabeçalho com valor incorreto ou inválido. Como resultado, o navegador ignora estes cabeçalhos.

Os cabeçalhos válidos são descritos nas secções seguintes.

Cabeçalho Referrer-Policy

Uma política de referenciador válida contém um dos seguintes valores:

  • Uma string vazia
  • no-referrer
  • no-referrer-when-downgrade
  • same-origin
  • origin
  • strict-origin
  • origin-when-cross-origin
  • strict-origin-when-cross-origin
  • unsafe-url

Cabeçalho X-Frame-Options

Um cabeçalho X-Frame-Options válido só pode ter os seguintes valores:

  • DENY: não permitir enquadramento
  • SAMEORIGIN: permitir enquadramento se o URL de nível superior for de mesma origem
  • ALLOW-FROM URL

O Chrome não suporta ALLOW-FROM URL. Não são permitidas várias X-Frame-Options.

Cabeçalho X-Content-Type-Options

Um cabeçalho X-Content-Type-Options válido só pode ter um valor: nosniff.

Cabeçalho X-XSS-Protection

Um cabeçalho X-XSS-Protection válido tem de começar por 0 ("disable") ou 1 ("enable"). Em seguida, apenas se ativar a proteção, pode adicionar até duas opções:

  • O mode=block mostra uma página em branco em vez de filtrar o XSS
  • report=URL envia relatórios para URL

Separe as opções por pontos e vírgulas, por exemplo, 1; mode=block; report=URI. Certifique-se de que não tem um ponto e vírgula à direita.

Misspelled security header name

Nome da categoria na API: MISSPELLED_SECURITY_HEADER_NAME

O Web Security Scanner pode encontrar um nome de cabeçalho de segurança com erros ortográficos. Na sua forma com erro ortográfico, o cabeçalho de segurança é ineficaz e tem de ser corrigido.

Para reproduzir esta vulnerabilidade, verifique se existe um erro ortográfico no separador de rede das ferramentas para programadores do seu navegador.

Mismatching security header values

Nome da categoria na API: MISMATCHING_SECURITY_HEADER_VALUES

O Web Security Scanner pode detetar que a resposta tem cabeçalhos de resposta duplicados relacionados com a segurança com valores em conflito. Alguns cabeçalhos HTTP relacionados com a segurança têm um comportamento indefinido se forem declarados duas vezes na resposta com valores diferentes.

Para corrigir esta descoberta, mantenha apenas um destes cabeçalhos com incompatibilidade.

Repositório acessível

O Web Security Scanner pode encontrar um repositório GIT ou SVN acessível na aplicação. Esta condição pode levar a fugas de configuração e código-fonte.

Para reproduzir a vulnerabilidade, clique no URL de reprodução no relatório de descoberta.

XXE reflected file leakage

Nome da categoria na API: XXE_REFLECTED_FILE_LEAKAGE

O Web Security Scanner pode encontrar uma vulnerabilidade de entidade externa XML (XXE) numa aplicação Web que analise XML a partir de entradas do utilizador. Um atacante pode fornecer um XML que contenha uma entidade externa. Esta entidade externa pode fazer referência a conteúdo ao qual a aplicação tem acesso, por exemplo, ficheiros no computador anfitrião da aplicação. Quando o analisador XML da aplicação processa o XML malicioso, pode divulgar o conteúdo dos ficheiros no respetivo anfitrião.

Para corrigir esta descoberta, configure os analisadores XML para não permitirem entidades externas.

Para mais informações sobre esta vulnerabilidade, consulte o artigo Processamento de entidades externas XML (XXE).

SQL injection

Nome da categoria na API: SQL_INJECTION

O Web Security Scanner pode encontrar uma vulnerabilidade de injeção SQL. Os atacantes podem criar entradas que manipulam a estrutura da consulta da consulta SQL subjacente em execução no servidor. Estas entradas permitem-lhes roubar dados da base de dados e, em alguns casos, modificar dados. Para resolver esta descoberta, use consultas com parâmetros para impedir que a entrada do utilizador influencie a estrutura da consulta SQL.

Para mais informações sobre esta vulnerabilidade, consulte o artigo Injeção SQL.

Prototype pollution

Nome da categoria na API: PROTOTYPE_POLLUTION

O Web Security Scanner pode encontrar uma vulnerabilidade de poluição de protótipos numa aplicação Web cujas propriedades de objetos são atribuídas a valores controláveis pelo atacante. Os atacantes podem criar entradas que tornam a aplicação vulnerável a scripting entre sites ou outras vulnerabilidades do lado do cliente.

Para corrigir esta descoberta, elimine a propriedade proto descontinuada e torne o objeto Object.prototype imutável. Se esta mitigação for incompatível com o seu código, altere a parte do código vulnerável para copiar apenas os valores esperados das entradas controláveis pelo atacante.

Corrigir resultados de erros de configuração do Web Security Scanner

Esta secção explica como corrigir diferentes tipos de resultados de configuração incorreta do Web Security Scanner.

Configuração incorreta da HTTP Strict Transport Security

Nome da categoria na API: HSTS_MISCONFIGURATION

O Web Security Scanner garante que o cabeçalho HTTP Strict Transport Security é enviado com cada resposta HTTP e está configurado corretamente. Para limitar o impacto na estabilidade do seu Website, faça o seguinte:

  1. Comece com um pequeno max-age e apenas includeSubDomains inclusão (sem preload). Exemplo: max-age=3600; includeSubDomains.
  2. Após um curto período de repouso de cerca de uma semana sem problemas comunicados, aumente a idade máxima. Exemplo: max-age=604800; includeSubDomains ou max-age=2592000; includeSubDomains.
  3. Após cerca de três meses sem problemas comunicados, adicione o seu Website e os respetivos subdomínios a hstspreload.org e especifique a diretiva de pré-carregamento. Ao especificar a diretiva de pré-carregamento, o requisito HSTS é incorporado no navegador e os autores de ataques maliciosos não podem alterar a ligação para uma versão inferior. Diretiva de pré-carregamento: max-age=63072000; includeSubDomains; preload.

Cabeçalho Content-Security-Policy em falta

Nome da categoria na API: CSP_MISSING

O Web Security Scanner garante que um cabeçalho Content-Security-Policy estrito e apenas com nonce é enviado com cada resposta HTTP.

  Content-Security-Policy:
    script-src 'nonce-{random}' 'report-sample';
    object-src 'none';
    base-uri 'none';
    report-uri https://link-to-report-endpoint

Cabeçalho Content-Security-Policy configurado incorretamente

Nome da categoria na API: CSP_MISCONFIGURATION

O Web Security Scanner garante que um cabeçalho Content-Security-Policy estrito e apenas com nonce é enviado com cada resposta HTTP.

  Content-Security-Policy:
    script-src 'nonce-{random}' 'report-sample';
    object-src 'none';
    base-uri 'none';
    report-uri https://link-to-report-endpoint

Cabeçalho Cross-Origin-Opener-Policy em falta

Nome da categoria na API: COOP_MISSING

O Web Security Scanner garante que o cabeçalho Cross-Origin-Opener-Policy é enviado com todas as respostas HTTP, incluindo uma das diretivas válidas:

  • unsafe-none
  • same-origin-allow-popups
  • same-origin

Proteção contra clickjacking em falta

Nome da categoria na API: CLICKJACKING_PROTECTION_MISSING

O Web Security Scanner garante que um cabeçalho X-Frame-Options ou Content-Security-Policy é enviado com cada resposta HTTP para evitar o clickjacking:

  • Se estiver a usar um cabeçalho X-Frame-Options, use a diretiva DENY ou SAMEORIGIN.
  • Se estiver a usar um cabeçalho Content-Security-Policy, configure a diretiva frame-ancestors.

Valide o problema

Quando o Web Security Scanner comunica um problema, tem de validar a localização do problema. Esta secção explica como usar os relatórios de deteção para reproduzir e validar vulnerabilidades.

  1. Aceda à página do Web Security Scanner na Google Cloud consola.

    Aceder ao Web Security Scanner

  2. Selecione um projeto. É apresentada uma página com uma lista das suas análises geridas e personalizadas.

  3. Em Configurações de análise, selecione a análise que contém a descoberta que quer validar. É aberta uma página com detalhes da análise.

  4. Navegue para o separador Resultados, expanda uma categoria e selecione uma descoberta para ver os respetivos detalhes.

  5. O método de validação difere consoante a categoria da descoberta. Use um navegador de teste e siga as instruções abaixo.

    • Scripting entre sites: seguir o URL de reprodução produz uma janela pop-up vazia no navegador, o que indica que a análise injetou com êxito código benigno num script.
    • Biblioteca desatualizada: seguir o URL vulnerável devolve uma página com o texto "Exploited" (Explorado), o que indica que a análise injetou com êxito código benigno num script.
    • Conteúdo misto Seguir o URL da página HTTPS devolve um aviso sobre uma vulnerabilidade de conteúdo misto. O relatório de constatações identifica o recurso vulnerável em URL do recurso publicado através de HTTP.
    • Injeção de Flash: o Scanner de segurança Web pode devolver resultados nesta categoria, mas a maioria dos navegadores modernos está protegida contra a injeção de Flash. É improvável que estas conclusões possam ser exploradas.
    • Poluição de protótipos: siga o URL no campo URL de reprodução e pesquise alterações no objeto Object.prototype introduzido pela carga útil com os seguintes fragmentos de JavaScript.
      • ({}).__secret_injected_property
      • ({}).__defineGetter__.__secret_injected_property
      • ({}).hasOwnProperty.__secret_injected_property

A aplicação da Política de Segurança de Conteúdos (CSP) pode continuar a impedir a execução do código JavaScript. Esta condição pode dificultar a reprodução do XSS. Se tiver este problema, consulte a consola de registo do navegador para ver detalhes sobre a violação de CSP ocorrida.