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:
- Prácticas recomendadas de seguridad de Google Cloud
- Instructivo de seguridad de Anthos
- Prácticas recomendadas de seguridad de Istio
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íticaallow-nothing
en tu espacio de nombres de destino. Por ejemplo, para rechazar todo el tráfico a todos los servicios en el espacio de nombresdefault
, 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
- Varias barras diagonales o barras inversas: