Vulnerabilidad de escalamiento de privilegios en CRI-O

Se ha publicado una vulnerabilidad que afecta al motor de contenedores CRI-O para Kubernetes, que permitiría a un atacante escapar del sandbox y obtener privilegios de usuario root.

La vulnerabilidad CVE-2022-0811 de severidad alta, con una puntuación asignada de 8.8. Esta se denomina «cr8escape» y se debe a la falta de validación adecuada para los parámetros del kernel pasados a la utilidad pinns. El problema se introdujo en la versión 1.19 de CRI-O cuando se agregó compatibilidad con sysctl al motor de contenedor, cuando este se invoca, permitiría a un atacante escapar de un contenedor de Kubernetes y obtener acceso root al host para luego trasladarse a cualquier parte del clúster.

Además de la ejecución del malware, el defecto de seguridad podría permitir a un atacante realizar una variedad de acciones en el host, incluida la exfiltración de datos y el movimiento lateral a través de pods.

La explotación requiere que el atacante tenga permisos para implementar un pod en un clúster de Kubernetes utilizando el tiempo de ejecución del motor CRI-O, que podría abusar del parámetro «kernel.core_pattern» para lograr el escape del contenedor y la ejecución remota de código (RCE) con privilegios de usuario root en cualquier nodo del clúster.

Los softwares directamente afectados son:

  • CRI-O versiones 1.19.0 hasta 1.19.5
  • CRI-O versiones 1.20-rc.1 hasta 1.20.6
  • CRI-O versiones 1.21.0 hasta 1.21.5
  • CRI-O versiones 1.22.0 hasta 1.22.1

Para determinar si un host está afectado puede verificar la versión con el siguiente comando: crio —version.

Software y plataformas afectados indirectamente:

  • OpenShift 4+
  • Oracle Container Engine para Kubernetes.

Si bien la vulnerabilidad se encuentra en CRI-O, es probable que el software y las plataformas que dependen de ella también sean vulnerables, incluyendo las mencionadas.

Recomendamos instalar las actualizaciones correspondientes, mediante el siguiente enlace:

Adicionalmente, los pasos de mitigación a nivel de Kubernetes incluyen:

  • Bloquear los pods que contienen la configuración de sysctl con valores que contienen «+» o «=».
  • Bloquear todos los sysctls, usando el campo PodSecurityPolicy forbiddenSysctls o emplear un contenedor de pinns para eliminar la opción «-s», evitando así que los pods modifiquen los parámetros del kernel.

Referencias:

Compartir: