O Cloud Run for Anthos depende do Istio para entrada. Portanto, é possível personalizar e configurar o Istio para atender às suas necessidades. Isso também significa que o Cloud Run para Anthos pode ser afetado por problemas ou vulnerabilidades conhecidos no Istio.
Esta página foi criada para ajudar a garantir que você configure o Cloud Run para Anthos usando práticas recomendadas conhecidas e que resolva todos os problemas conhecidos para evitar a exposição não intencional dos recursos a vulnerabilidades.
Outros guias de práticas recomendadas e recursos:
- Práticas recomendadas de segurança do Google Cloud
- Tutorial de segurança do Anthos
- Práticas recomendadas de segurança do Istio (em inglês)
Vulnerabilidades conhecidas
Como configurar caminhos em AuthorizationPolicies
Vulnerabilidade de segurança:
- CVE-2021-31920 (em inglês)
Descrição:
Use as AuthorizationPolicies (em inglês) do Istio para controle de acesso usando os caminhos para os serviços do Cloud Run para Anthos. Devido à CVE-2021-31920, se você configurar o controle de acesso baseado em caminho (ambos em inglês), é possível ficar vulnerável a ataques de confusão de caminho.
Por exemplo, considerando um serviço em yourservice.com/admin
, em que você
configurou o acesso para permitir solicitações para o caminho /admin
. Se você não
negar explicitamente o acesso a //admin
, a vulnerabilidade de caminho em
AuthorizationPolicy
não impedirá o acesso a solicitações que usem o
caminho //admin
malformado. Como o serviço pode não diferenciar entre
esses caminhos, a solicitação para um caminho inválido recebe acesso não intencional.
Contexto:
O gateway de entrada padrão do Istio usado pelo Cloud Run para Anthos depende
da normalização padrão do URL, usando a opção
normalize_path
em proxies Envoy, que segue
RFC 3986 (ambos em inglês)
Infelizmente, há vários padrões de URL de solicitação conhecidos que não são normalizados pelos padrões de normalização de URL. Consulte a seção a seguir sobre como evitar a vulnerabilidade.
Mitigação:
Para ajudar a garantir que você não esteja vulnerável a ataques de confusão de caminhos hoje, é possível implementar dois métodos:
Opção recomendada: negar todo o acesso por padrão
Configure o Istio para usar um padrão de negação para as políticas
AuthorizationPolicy
. Isso geralmente melhora a postura de segurança do cluster. A configuração de um padrão de negação de autorização nega todas as solicitações para os serviços por padrão e permite definir explicitamente todas as condições a que uma solicitação tem acesso.O uso desse padrão pode significar que, se você não permitir uma condição específica, determinadas solicitações serão negadas inesperadamente. Isso pode resultar em uma experiência ruim do usuário, interrupção do serviço ou falha no cumprimento do SLO ou SLA. A compensação pela definição explícita de todo o acesso é preferível em relação a um incidente de segurança devido a acesso não intencional.
Exemplo:
Crie uma
AuthorizationPolicy
para usar o padrão de negação definindo uma políticaallow-nothing
no namespace de destino. Por exemplo, para negar todo o tráfego a todos os serviços no namespacedefault
, você cria:apiVersion: security.istio.io/v1beta1 kind: AuthorizationPolicy metadata: name: allow-nothing namespace: default spec: {}
Para saber mais sobre como definir uma política de tipo
AuthorizationPolicy
, consulte Autorização do Istio para tráfego HTTP (em inglês).Opção alternativa: negar explicitamente todas as variações de URL problemáticas ao serviço
Para evitar a implementação de um padrão de negação, você precisa garantir que o serviço de back-end pode negar todos os caminhos problemáticos. Dependendo da linguagem, do framework e de outros fatores da implementação do serviço, você precisa negar explicitamente todos os caminhos de URL que o gateway de entrada do Istio não normaliza, incluindo:
- Várias barras ou barras invertidas:
//
,\\
- Sequências de escape de barras ou barras invertidas:
%2F
,%2f
,%5C
,%5c
- Várias barras ou barras invertidas: