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 :
- Bonnes pratiques de sécurité dans Google Cloud
- Tutoriel sur la sécurité Anthos
- Bonnes pratiques de sécurité dans Istio
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ègleallow-nothing
dans votre espace de noms cible. Par exemple, pour refuser tout le trafic vers l'ensemble des services de l'espace de nomsdefault
, 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
- Plusieurs barres obliques ou barres obliques inverses :