Kubernetes es un entorno de TI como cualquier otro y, por lo tanto, está sujeto a muchos fallos. Durante el último año, el orquestador de clústeres de contenedores ha experimentado dos fallos especialmente graves. En primer lugar, El verano pasado en los archivos de configuración YAML de los clústeres de Kubernetes que otorgan privilegios de sistema en los hosts de Windows. Y luego, más recientemente, en noviembre, otro que merece especial atención, esta vez relacionado con la inyección de comandos a través de volúmenes locales del orquestador de contenedores.

Descubierto y compartido el 13 de marzo por el investigador de seguridad de Akamai, Tomer PeledEsto se incluyó como CVE-2023-5528 y se corrigió en las versiones 1.28.4, 1.27.8, 1.26.11 y 1.25.16 de Kubernetes publicadas en noviembre de 2023. La falla es similar a la anterior CVE-2023-3676, pero en lugar de apuntar a la función de volumen subPath, se origina en la función de volúmenes locales. Estos son un tipo de volúmenes compatibles con el orquestador a través de los cuales los usuarios montan particiones de disco dentro de un pod. Son diferentes de los volúmenes hostPath que les dan la capacidad de montar directorios específicos. Un administrador de clúster puede aprovisionar espacio de almacenamiento por adelantado mediante la creación de un persistentVolume, y luego los usuarios pueden usar YAML al configurar un pod para hacer un persistentVolumeClaim para reclamar parte de ese espacio de almacenamiento.

Un error corregido, una actualización por realizar

Problema: al analizar estas solicitudes desde un archivo YAML, el servicio kubelet dependía de una función que usaba exec.command para ejecutar un comando en el sistema para crear un enlace simbólico entre el volumen y la ubicación dentro del pod. La terminal de línea de comandos de Windows admite la concatenación de comandos (ejecutar varios comandos en una sola línea) al colocar caracteres && entre los comandos.

Tomer Peled descubrió, una vez más, que un atacante podría colocar comandos en la definición de Path de persistentVolumeClaim en YAML y rodearlos con caracteres && antes de que se ejecuten potencialmente en el sistema host cuando el reclamo es procesado por el servicio kubelet que se ejecuta con privilegios SYSTEM. El equipo de Kubernetes solucionó la vulnerabilidad de inyección de comandos reemplazando la llamada cmd realizada por el servicio kubelet con una función en GO llamada "os.Symlink()" que realizará la misma operación de enlace simbólico pero de manera segura. Si aún no lo ha hecho, por supuesto, debe solicitar la instalación de las últimas versiones disponibles para evitar problemas relacionados con este peligroso CVE.