La última versión de Kubernetes lanzada el mes pasado corrige toda una clase de vulnerabilidades donde los atacantes podrían 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 de Kubernetes"dijo Tomer Peled, investigador de Akamai, sobre la vulnerabilidad que encontró y que llevó al descubrimiento de otros dos problemas similares. "Para explotar esta vulnerabilidad, el atacante debe aplicar un archivo YAML malicioso al clúster", añadió el investigador.

Índice
  1. Archivos de configuración vulnerables
  2. Procesamiento de ruta señalado
  3. Mitigar la vulnerabilidad basada en YAML

Archivos de configuración vulnerables

Una gran cantidad de empresas utilizan el sistema de orquestación de clústeres de contenedores de Kubernetes para automatizar la implementación y gestión de aplicaciones que se ejecutan en contenedores. Y es el lenguaje YAML el que se utiliza para escribir archivos de configuración y otros archivos de administración para Kubernetes. Por lo tanto, era bastante lógico que fuera un objetivo para posibles atacantes, ya que proporciona una forma directa de enviar datos del usuario al motor de Kubernetes para su análisis e interpretación. Los problemas de análisis de YAML ya han provocado violaciones de Kubernetes. Por ejemplo, la generación de CVE-2022-1471 en el analizador SnakeYaml afectó al cliente Java de Kubernetes. Este también es el caso de CVE-2021-25749, que puede incluir nombres de usuario mal escritos en un archivo YAML, lo que hace que las cargas de trabajo se ejecuten como root.

Y eso no es todo: dos vulnerabilidades CVE-2017-1002101 y CVE-2021-25741 combinadas con enlaces simbólicos (symlinks) demostraron que era posible utilizar la subpropiedad subPath de un archivo YAML para acceder a archivos fuera del contenedor, rompiendo así el aislamiento. . Estos dos últimos defectos dieron a Tomer Peled la idea de explorar más el tema. Usando una propiedad llamada "Volumen", Kubernetes puede montar un directorio desde el sistema host dentro de un contenedor. Esta característica ampliamente utilizada viene con varias subpropiedades que definen la ruta del directorio en el host y la ruta de montaje dentro del contenedor. MountPath tiene además una propiedad subPath que, cuando se proporciona en un archivo YAML, es procesada por kubelet, un servicio central de Kubernetes.

Procesamiento de ruta señalado

El investigador de Akamai descubrió que cuando se procesa la cadena subPath, kubelet también verifica si es un enlace simbólico, de acuerdo con las defensas implementadas para vulnerabilidades más antiguas. Excepto que lo hace a través de un comando de PowerShell invocado por la llamada de función " comando ejecutivo ". Sin embargo, un atacante puede adjuntar código de PowerShell a la cadena subPath y ejecutarlo. “Con PowerShell, los usuarios pueden evaluar los valores dentro de las cadenas antes de usarlos”, dijo el investigador. “Esto se puede hacer agregando $() en la cadena [...]. Cualquier comando de PowerShell puede estar entre paréntesis y será evaluado, como $(cmd de inicio de proceso), $(Invocar-Expresión exp)y otros procesamientos de PowerShell”.

Archivo YAML con inyección de comando en el parámetro subPath. (Crédito de la foto: Akamai)

Entonces, por ejemplo, si un atacante proporciona un archivo YAML a un nodo de Kubernetes que se ejecuta en Windows con una subruta que incluye $(cmd de inicio de proceso)kubelet lo enviará a PowerShell durante el proceso de validación de ruta y se ejecutará con privilegios de Windows del servicio kubelet - SISTEMA. Esta falla ahora figura como CVE-2023-3676 y se solucionó 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. La falla afecta a Kubernetes en Windows en su configuración predeterminada, pero el atacante debe obtener privilegios de aplicación en un nodo.

Mitigar la vulnerabilidad basada en YAML

"El equipo de Kubernetes decidió solucionar este tipo de vulnerabilidades pasando parámetros de variables de entorno en lugar de la entrada del usuario", observó Tomer Peled. “Al pasar valores de esta manera, los parámetros se tratan como cadenas; por lo tanto, PowerShell no los evaluará como expresiones. Si no pueden actualizar a la versión parcheada inmediatamente, los administradores pueden desactivar el uso de Volume.Subpath, pero esto también desactivará una función de uso común. Otra opción es utilizar Open Policy Agent (OPA), un agente de código abierto que puede tomar acciones basadas en políticas según los datos recibidos.

Los administradores pueden crear reglas para bloquear la implementación de ciertos archivos YAML usando el lenguaje Rego en OPA, y Akamai proporciona un ejemplo de dicha regla de bloqueo en su publicación de blog. El investigador finalmente recomienda utilizar el control de acceso basado en roles (RBAC) para limitar la cantidad de usuarios que pueden realizar acciones en un clúster.