Bonnes pratiques de sécurité dans Cloud Run for Anthos

Cloud Run for Anthos s'appuie sur Istio pour l'entrée. Vous pouvez donc personnaliser et configurer Istio pour répondre à vos besoins. Cela signifie également que Cloud Run for Anthos peut être affecté par des problèmes ou des failles connus dans Istio.

Cette page a pour but de vous aider à configurer Cloud Run for Anthos selon les bonnes pratiques éprouvées et à résoudre les problèmes connus afin d'éviter toute exposition involontaire de vos ressources à des failles.

Autres ressources et guides de bonnes pratiques :

Failles connues

Configurer les chemins d'accès dans AuthorizationPolicies

Faille de sécurité :

Description :

Les règles AuthorizationPolicies d'Istio vous permettent de contrôler les accès à l'aide des chemins d'accès à vos services Cloud Run for Anthos. Si vous configurez le contrôle des accès basé sur le chemin d'accès, vous pouvez être exposé à des attaques par confusion de chemin en raison de la faille CVE-2021-31920.

Par exemple, supposons que vous disposiez d'un service à l'adresse yourservice.com/admin, pour lequel vous avez configuré l'accès de manière à autoriser les requêtes sur le chemin /admin. Si vous ne refusez pas explicitement l'accès à //admin, la faille de chemin dans AuthorizationPolicy échoue pour empêcher l'accès des requêtes utilisant le chemin d'accès //admin incorrect. Étant donné que votre service est susceptible de ne pas faire la différence entre ces chemins, la requête envoyée à un chemin incorrect est autorisée de manière inattendue.

Situation :

La passerelle d'entrée Istio par défaut utilisée par Cloud Run for Anthos repose sur la normalisation des formats d'URL par défaut, à l'aide de l'option normalize_path sur les proxys Envoy, qui suit la norme RFC 3986.

Malheureusement, plusieurs formats d'URL de requête connus ne sont pas normalisés via les normes de normalisation des formats d'URL par défaut. Consultez la section suivante pour savoir comment réduire les risques liés à la faille.

Atténuation des risques :

Pour vous assurer de ne pas être exposé aux attaques par confusion de chemin actuelles, vous pouvez mettre en œuvre deux méthodes :

  • Option recommandée : refuser tous les accès par défaut

    Configurez Istio pour utiliser un modèle de refus par défaut pour les règles AuthorizationPolicy. En règle générale, cela améliore la stratégie de sécurité de votre cluster. La configuration d'un modèle de refus par défaut refuse toutes les requêtes adressées à vos services par défaut et vous permet de définir explicitement toutes les conditions d'autorisation d'accès d'une requête.

    En cas d'utilisation de ce modèle, si vous ne parvenez pas à autoriser une condition spécifique, certaines requêtes seront refusées de manière inattendue. Cela peut entraîner une expérience utilisateur médiocre, une interruption de service, ou le non-respect de votre SLO ou contrat de niveau de service. Le compromis permettant de définir explicitement tous les accès est généralement préférable à un incident de sécurité dû à un accès non intentionnel.

    Exemple :

    Créez une règle AuthorizationPolicy pour utiliser le modèle de refus par défaut en définissant une règle allow-nothing dans votre espace de noms cible. Par exemple, pour refuser tout le trafic vers l'ensemble des services de l'espace de noms default, créez la règle suivante :

    apiVersion: security.istio.io/v1beta1
    kind: AuthorizationPolicy
    metadata:
      name: allow-nothing
      namespace: default
    spec:
      {}
    

    Pour en savoir plus sur la définition d'une règle de type AuthorizationPolicy, consultez la section Autorisation Istio pour le trafic HTTP.

  • Autre option : refuser explicitement toutes les variantes d'URL problématiques pour votre service

    Pour éviter de mettre en œuvre un modèle de refus par défaut, vous devez vous assurer que votre service de backend peut refuser les chemins d'accès problématiques. Selon votre langage, votre framework et d'autres facteurs liés à la mise en œuvre de votre service, vous devez explicitement refuser tous les chemins d'URL que la passerelle d'entrée Istio ne normalise pas, par exemple :

    • Plusieurs barres obliques ou barres obliques inverses : //, \\
    • Séquences d'échappement de barres obliques ou de barres obliques inverses : %2F, %2f, %5C, %5c