Skip to main content

Se descubre una vulnerabilidad crítica de ejecución arbitraria de código en Kubernetes

Escrito por

20 de diciembre de 2018

0 minutos de lectura

El 3 de diciembre de 2018, se divulgó una vulnerabilidad grave a la comunidad de Kubernetes. Se trata del primer CVE crítico detectado en el proyecto Kubernetes (según la puntuación CVSS v3).

Se publicaron versiones con parches para usuarios finales y proveedores de nube. Asegúrate de actualizar a una versión corregida si aún no lo hiciste. Recomendamos las siguientes versiones con parches: v1.10.11, v1.11.5, v1.12.3 y v1.13.0-rc.1. Si no es posible actualizar, Jordan Liggitt, del proyecto Kubernetes, sugirió otras soluciones alternativas y opciones de mitigación en el problema de GitHub mencionado anteriormente.

Darren Shepherd, de Rancher, descubrió la vulnerabilidad crítica identificada como CVE-2018-1002105. Esta permite que un atacante obtenga acceso remoto a los servicios de backend alojados en el clúster de Kubernetes y ejecute comandos arbitrarios en ellos, lo que podría permitirle escalar sus privilegios.

El ataque es posible debido a una vulnerabilidad en el servicio de API kubelet, uno de los muchos componentes que conforman el proyecto Kubernetes.

El servicio de API kubelet es una puerta de enlace intermediaria proporcionada por Kubernetes que permite que los servicios de backend, también conocidos como servidores de API agregados, se registren en ella. Por lo tanto, todas las solicitudes a estos servidores, como las llamadas a la API /apis/<apiGroup>/<apiVersion>, pasan por el servicio de API kubelet y llegan al destino de API agregado dentro del clúster de Kubernetes.

Un ejemplo de uso de un servidor de API agregado es un servicio de comprobación de estado para balanceadores de carga, que consultan a los servidores internos de backend para conocer su estado. Otro ejemplo es el servicio de métricas integrado de Kubernetes.

Diagrama de un clúster de Kubernetes que muestra a un usuario enviando solicitudes al servidor de API de Kubelet, que las redirige a servicios internos del backend.

La vulnerabilidad

Para aprovechar la vulnerabilidad, un usuario debe tener acceso al servicio de API kubelet, identificado como kube-apiserver. Esto permite escalar privilegios y obtener más control de acceso.

La vulnerabilidad se debe a la forma en que kube-apiserver envía solicitudes a los servidores de backend internos del clúster. Esto abre un túnel directo entre los servidores de backend y el usuario. Más concretamente, ocurre al procesar solicitudes de actualización de conexión, necesarias para la comunicación mediante WebSockets. La conexión TCP abierta entre el cliente y el servidor de backend podría usarse para enviar solicitudes arbitrarias directamente a ese servidor.

Normalmente, este servicio de API kubelet está bloqueado para cualquier persona ajena al clúster. Sin embargo, de forma predeterminada, el acceso a esta API está habilitado para usuarios anónimos, a fin de permitir la detección de servicios y las comprobaciones de estado.

Existe otro vector de ataque mediante el cual un servicio accesible para los usuarios puede interactuar con el servicio de API kubelet de forma que un atacante remoto tome el control de la interacción. Esto abre una vía para manipular la conexión con kubelet y explotarla de manera similar.

Curiosamente, este no es el primer incidente relacionado con kube-apiserver. Un análisis publicado en marzo reveló cómo la exposición pública de kube-apiserver provocó la instalación de malware de minería de criptomonedas en un clúster de Kubernetes. La infraestructura de nube de Tesla también fue víctima de un ataque similar de minería de criptomonedas debido a una consola de administración de Kubernetes insegura. Dicho esto, esta vulnerabilidad reciente es la más grave que se ha comunicado hasta la fecha al equipo de seguridad del producto de Kubernetes.

El 5 de diciembre de 2018, nuestro equipo de seguridad agregó la vulnerabilidad a nuestra base de datos.

Conclusiones principales:

  • Configuración predeterminada insegura - se permite que tanto los usuarios autenticados como los no autenticados consulten la API de Kubernetes

  • Registro insuficiente - las actividades maliciosas o sospechosas se realizaron mediante una conexión de API existente. Esto significa que Kubernetes no registró la actividad real, salvo la llamada inicial a la API.

Cómo protegerte

En junio anunciamos nuestra solución de análisis de imágenes de Docker, fácil de usar para desarrolladores, que puedes utilizar para detectar si alguna de tus imágenes contiene alguna de las vulnerabilidades mencionadas en esta publicación, además de muchas otras. Además, Snyk también te ofrecerá recomendaciones de corrección y sugerirá imágenes base a las que puedes actualizar para reducir las vulnerabilidades y mitigar esta vulnerabilidad específica.

Si aún no la probaste, puedes analizar tus proyectos que contienen Dockerfiles. Comenzaremos a analizarlos y supervisarlos para detectar paquetes vulnerables instalados en la imagen base del sistema operativo.

Ventana de terminal que muestra el indicador de un directorio de proyecto con la rama de Git, la versión de Node.js y la información del estado del sistema

Empieza con los retos de Capture the Flag

Aprende a resolver retos de Capture the Flag viendo nuestro taller virtual de nivel básico a pedido.