Windows
Ciberseguridad
Kubernetes
Vulnerabilidades

Una nueva vulnerabilidad de Kubernetes permite escalar privilegios en Windows

Los atacantes pueden abusar de los archivos de configuración YAML para ejecutar comandos maliciosos en hosts de Windows.

contenedores kubernetes

La última versión de Kubernetes lanzada el mes pasado incluye parches para toda una clase de vulnerabilidades que permiten a los atacantes abusar de la propiedad subPath de los archivos de configuración YAML para ejecutar comandos maliciosos en hosts de Windows. "La vulnerabilidad permite la ejecución remota de código con privilegios de SISTEMA en todos los puntos finales de Windows dentro de un clúster Kubernetes", dijo Tomer Peled, investigador de Akamai, sobre la vulnerabilidad que encontró y que desencadenó el descubrimiento de otros dos problemas similares. "Para explotar esta vulnerabilidad, el atacante necesita aplicar un archivo YAML malicioso en el clúster".

 

Atacar YAML

Kubernetes es un sistema de orquestación de contenedores ampliamente popular que es utilizado por las organizaciones para automatizar el despliegue y la gestión de aplicaciones que se ejecutan en contenedores. YAML es un lenguaje utilizado para escribir archivos de configuración y otros archivos de gestión para Kubernetes. Por lo tanto, tiene sentido que sea un objetivo para los atacantes potenciales, ya que es una forma directa de enviar input del usuario al motor de Kubernetes para que sea analizada e interpretada.

Los problemas de análisis de YAML han dado lugar a vulnerabilidades de Kubernetes en el pasado. Por ejemplo, la vulnerabilidad de ejecución remota de código CVE-2022-1471 en el analizador SnakeYaml afectaba al cliente Java de Kubernetes, mientras que el fallo CVE-2021-25749 permitía incluir nombres de usuario mal escritos en un archivo YAML, lo que daba lugar a la ejecución de cargas de trabajo como root. A continuación, los problemas CVE-2017-1002101 y CVE-2021-25741 mostraron cómo la subpropiedad subPath de un archivo YAML puede utilizarse en combinación con enlaces simbólicos (symlinks) para acceder a archivos fuera del contenedor, rompiendo el aislamiento. Fueron estos dos últimos fallos los que dieron a Peled la idea de investigar más a fondo la cuestión.

Kubernetes permite montar un directorio desde el sistema host dentro de un contenedor a través de una propiedad llamada Volume. Esta es una característica ampliamente utilizada y viene con varias subpropiedades para definir la ruta del directorio en el host y la ruta de montaje dentro del contenedor. El mountPath además tiene una propiedad subPath que cuando se proporciona en un archivo YAML es procesado por kubelet, un servicio central de Kubernetes.

 

Los nuevos problemas de procesamiento de rutas permiten la ejecución de código PowerShell

Peled descubrió que cuando se procesa la cadena subPath, kubelet también comprueba si se trata de un enlace simbólico, que forma parte de las defensas establecidas para las vulnerabilidades anteriores. Sin embargo, lo hace a través de un comando PowerShell que se invoca mediante la llamada a la función "exec.Command". Esto abre la posibilidad de que un atacante pueda adjuntar código PowerShell a la cadena subPath, donde se ejecutaría.

"PowerShell permite a los usuarios evaluar los valores dentro de las cadenas antes de que se utilicen", explicó el investigador. "Esto se puede hacer añadiendo $(<experssion_to_be_evaluated>) a su cadena [...]. Cualquier comando de PowerShell se puede insertar entre los paréntesis y será evaluado, como $(Start-Process cmd), $(Invoke-Expression exp), y otros tratamientos de PowerShell".

Así, por ejemplo, si un atacante suministra un archivo YAML a un nodo Kubernetes que se ejecuta en Windows con un subPath que incluye $(Start-Process cmd), esto será enviado a PowerShell por kubelet durante el proceso de validación de la ruta y se ejecutará con los privilegios de Windows del servicio kubelet - SYSTEM.

Esta vulnerabilidad es ahora rastreada como CVE-2023-3676 y fue parcheada en Kubernetes 1.28, pero también condujo al descubrimiento y corrección de otras dos vulnerabilidades de inyección de comandos similares: CVE-2023-3955 y CVE-2023-3893. El fallo afecta a Kubernetes en Windows en su configuración por defecto, pero el atacante necesita obtener privilegios de aplicación a un nodo.

 

Cómo mitigar la vulnerabilidad de Kubernetes en YAML

"El equipo de Kubernetes eligió parchear esta clase de vulnerabilidades pasando parámetros desde variables de entorno en lugar de desde el input de usuario", dijo Peled. "Al pasar los valores de esta manera, los parámetros son tratados como cadenas, por lo tanto, no serán evaluados como expresiones por PowerShell".

Si no pueden actualizar a la versión parcheada de inmediato, los administradores pueden desactivar el uso de Volume.Subpath, pero esto también paralizará una característica y funcionalidad de uso común. Otra opción es utilizar el Open Policy Agent (OPA), un agente de código abierto que puede tomar medidas basadas en políticas a partir de los datos recibidos. Los administradores pueden crear reglas para bloquear la implementación de ciertos archivos YAML utilizando el lenguaje Rego en OPA, y Akamai proporciona un ejemplo de dicha regla de bloqueo en su entrada de blog.

Peled también recomienda utilizar el control de acceso basado en roles (RBAC) para limitar el número de usuarios que pueden realizar acciones en un clúster.



TE PUEDE INTERESAR...

Accede a la cobertura de nuestros encuentros
 
Lee aquí nuestra revista digital de canal

DealerWorld Digital

 

Forma parte de nuestra comunidad
 
¿Interesado en nuestros foros? 

 

Whitepaper