Prácticas recomendadas de seguridad en Cloud Run for Anthos

Cloud Run for Anthos se basa en Istio para la entrada. Por lo tanto, puedes personalizar y configurar Istio para satisfacer tus necesidades. Esto también significa que Cloud Run for Anthos puede verse afectado por problemas o vulnerabilidades conocidos en Istio.

Esta página se creó para garantizar que configures Cloud Run for Anthos con las prácticas recomendadas conocidas y que abordes los problemas conocidos a fin de evitar la exposición accidental de tus recursos en vulnerabilidades.

Otras guías y recursos de prácticas recomendadas:

Vulnerabilidades conocidas

Configura rutas de acceso en AuthorizationPolicies

Vulnerabilidad de seguridad:

Descripción:

Puedes usar las AuthorizationPolicies de Istio para el control de acceso mediante las rutas a tus servicios de Cloud Run for Anthos. Debido a CVE-2021-31920, si configuras el control de acceso basado en rutas, es posible que seas vulnerable a los ataques de confusión de rutas.

Por ejemplo, dado un servicio en yourservice.com/admin, para el que configuraste el acceso a fin de permitir solicitudes a la ruta /admin. Si no rechazas el acceso de forma explícita a //admin, la vulnerabilidad de la ruta de acceso en AuthorizationPolicy no puede impedir el acceso a solicitudes que usan la ruta //admin con formato incorrecto. Debido a que tu servicio puede no diferenciar entre esas rutas de acceso, se permite el acceso no intencionado de la solicitud a una ruta con formato incorrecto.

Segundo plano

La puerta de enlace de entrada predeterminada de Istio que usa Cloud Run for Anthos depende de la normalización de patrones de URL predeterminados, mediante el uso la opción normalize_path sobre proxies de Envoy, que sigueRFC 3986.

Por desgracia, existen varios patrones de URL de solicitud conocidos que no se normalizan a través de los estándares de normalización del patrón de URL predeterminado. Consulta la siguiente sección para mitigar la vulnerabilidad.

Mitigación

A fin de garantizar que no seas vulnerable a los ataques de confusión de rutas en la actualidad, hay dos métodos que puedes implementar:

  • Opción recomendada: Denegar todo el acceso de forma predeterminada

    Configura Istio a fin de usar un patrón de denegación predeterminado para las políticas de AuthorizationPolicy. Por lo general, esto mejora la posición de seguridad del clúster. La configuración de un patrón de autorización predeterminada rechaza todas las solicitudes a los servicios de forma predeterminada y te permite definir de forma explícita todas las condiciones a las que se les permite acceder a una solicitud.

    El uso de este patrón puede significar que si no permites una condición específica, se rechazarán determinadas solicitudes de forma inesperada. Esto puede provocar una experiencia del usuario poco satisfactoria, una interrupción del servicio o el incumplimiento del SLO o ANS. La compensación por definir explícitamente todos los accesos se suele preferir en un incidente de seguridad debido al acceso no intencionado.

    Ejemplo:

    Crea una AuthorizationPolicy para usar el patrón de denegación predeterminado mediante la definición de una política allow-nothing en tu espacio de nombres de destino. Por ejemplo, para rechazar todo el tráfico a todos los servicios en el espacio de nombres default, debes crear lo siguiente:

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

    Si deseas obtener más información a fin de definir una política de tipo AuthorizationPolicy, consulta la autorización de Istio para el tráfico HTTP.

  • Opción: Rechaza de forma explícita todas las variaciones de URL problemáticas en el servicio

    Para evitar implementar un patrón de denegación predeterminado, debes asegurarte de que el servicio de backend pueda rechazar cualquier ruta problemática. Según tu lenguaje, framework y otros factores en la implementación de tu servicio, debes denegar de forma explícita todas las rutas de URL que la puerta de enlace de entrada de Istio no normaliza, incluidas las siguientes:

    • Varias barras diagonales o barras inversas: //, \\
    • Secuencias de barras diagonales o barras diagonales invertidas con escape: %2F, %2f, %5C, %5c