Cloud Run for Anthos si basa su Istio per il traffico in entrata. Quindi, puoi personalizzare e configurare Istio per supportare le tue esigenze. Ciò significa anche che Cloud Run for Anthos può essere interessato da problemi noti o vulnerabilità in Istio.
Questa pagina è stata creata per aiutarti a configurare Cloud Run for Anthos utilizzando le best practice note e a risolvere eventuali problemi noti per evitare di esporre involontariamente le risorse alle vulnerabilità.
Altre guide e risorse sulle best practice:
- Best practice per la sicurezza di Google Cloud
- Tutorial sulla sicurezza di Anthos
- Best practice di sicurezza di Istio
Vulnerabilità note
Configurazione dei percorsi in AuthorizationPolicies
Vulnerabilità di sicurezza:
Descrizione:
Puoi utilizzare Criteri di autorizzazione per il controllo degli accessi di Istio utilizzando i percorsi per i tuoi servizi Cloud Run for Anthos. A causa di CVE-2021-31920, se configuri il controllo degli accessi basato sui percorsi potresti essere vulnerabile agli attacchi di confusione sui percorsi.
Ad esempio, fornito a un servizio di yourservice.com/admin
, per il quale hai configurato l'accesso per consentire le richieste al percorso /admin
. Se non neghi esplicitamente l'accesso a //admin
, la vulnerabilità del percorso in AuthorizationPolicy
non impedisce l'accesso per le richieste che utilizzano il percorso //admin
non valido. Poiché il tuo servizio potrebbe non distinguere tra
questi percorsi, la richiesta a un percorso in formato errato non è consentita.
Contesto:
Il gateway in entrata Istio predefinito utilizzato da Cloud Run for Anthos si basa
sulla normalizzazione dei pattern URL predefiniti, utilizzando
l'opzione normalize_path
sui proxy Envoy, che segue
RFC 3986.
Purtroppo, esistono diversi pattern URL di richieste noti che non vengono normalizzati tramite gli standard di normalizzazione dei pattern URL predefiniti. Consulta la sezione seguente su come mitigare la vulnerabilità.
Attenuazione:
Per assicurarti di non essere vulnerabile agli attacchi di confusione nei percorsi oggi, puoi adottare due metodi:
Opzione consigliata: nega tutti gli accessi per impostazione predefinita
Configura Istio per l'utilizzo di un pattern di rifiuto predefinito per i criteri
AuthorizationPolicy
. In genere, questo migliora il livello di sicurezza del cluster. La configurazione di un pattern di autorizzazione di tipo Negato per impostazione predefinita nega tutte le richieste ai servizi per impostazione predefinita e consente di definire in modo esplicito tutte le condizioni per cui una richiesta è autorizzata ad accedere.L'utilizzo di questo pattern potrebbe significare che se non autorizzi una condizione specifica, determinate richieste verranno rifiutate in modo imprevisto. Ciò potrebbe compromettere l'esperienza utente, l'interruzione del servizio o il mancato rispetto del tuo SLO o SLA. Il compromesso per la definizione esplicita di tutti gli accessi è in genere preferito rispetto a un incidente di sicurezza a causa dell'accesso involontario.
Esempio:
Crea un
AuthorizationPolicy
per utilizzare il pattern deny predefinito impostando un criterioallow-nothing
nello spazio dei nomi di destinazione. Ad esempio, per rifiutare tutto il traffico verso tutti i servizi nello spazio dei nomidefault
, puoi creare:apiVersion: security.istio.io/v1beta1 kind: AuthorizationPolicy metadata: name: allow-nothing namespace: default spec: {}
Per scoprire di più sulla definizione di un criterio di tipo
AuthorizationPolicy
, vedi Autorizzazione Istio per il traffico HTTP.Opzione alternativa: negare esplicitamente tutte le varianti URL problematiche al servizio
Per evitare di implementare un pattern di rifiuto predefinito, devi assicurare che il tuo servizio di backend sia in grado di negare qualsiasi percorso problematico. A seconda del linguaggio, del framework e di altri fattori sull'implementazione del servizio, devi negare esplicitamente tutti i percorsi URL che il gateway in entrata Istio non normalizza, tra cui:
- Più barre o barre rovesciate:
//
,\\
- Sequenze di barre o barre rovesciate in caratteri di escape:
%2F
,%2f
,%5C
,%5c
- Più barre o barre rovesciate: