Best practice per la sicurezza in Cloud Run for Anthos

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:

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 criterio allow-nothing nello spazio dei nomi di destinazione. Ad esempio, per rifiutare tutto il traffico verso tutti i servizi nello spazio dei nomi default, 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