Llegamos a ustedes gracias a:



Alertas de Seguridad

Nueva vulnerabilidad de Kubernetes

Permite escalar privilegios en Windows

[14/09/2023] 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 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", señaló 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 la entrada 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 la falla 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 anfitrión dentro de un contenedor a través de una propiedad llamada volumen. 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 una subRuta que incluye $(Start-Process cmd), este 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 similares de inyección de comandos: CVE-2023-3955 y CVE-2023-3893. La 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 la entrada del usuario", sostuvo 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.

Casos de éxito

Más »