Vulnerabilidad en runc que permite escapar de contenedores Docker y Kubernetes

En el kit de herramientas runc para ejecutar contenedores aislados utilizado en Docker y Kubernetes, se encontró una vulnerabilidad CVE-2024-21626, que permite el acceso al sistema de archivos del entorno host desde un contenedor aislado. Durante un ataque, un atacante puede sobrescribir algunos archivos ejecutables en el entorno del host y así lograr la ejecución de su código fuera del contenedor. En runtime crun y youki, que usan runc, así como en LXC, el problema no aparece. La vulnerabilidad se solucionó en runc 1.1.12.

Cuando se utilizan herramientas Docker o Kubernetes, se puede llevar a cabo un ataque preparando una imagen de contenedor especialmente diseñada, después de la instalación y el lanzamiento de la cual se puede acceder a un FS externo desde el contenedor. Cuando se utiliza Docker, es posible operar a través de un Dockerfile especialmente diseñado. La vulnerabilidad también se puede explotar si los procesos se inician en un contenedor utilizando el comando "runc exec" vinculando el directorio de trabajo al espacio de nombres del entorno host.

La vulnerabilidad se debe a la filtración de descriptores de archivos internos. Antes de ejecutar el código dentro del contenedor, runc cierra todos los descriptores de archivos usando el indicador O_CLOEXEC. Sin embargo, las ejecuciones posteriores de setcwd() dejan abierto un descriptor de archivo que apunta al directorio de trabajo y permanece accesible después de que se inicia el contenedor. Se han propuesto varios escenarios básicos para atacar el entorno del host utilizando el descriptor de archivo restante.

Por ejemplo, un atacante podría especificar un parámetro Process.cwd en la imagen del contenedor que apunte a “/proc/self/fd/7/”, lo que daría como resultado un enlace para procesar pid1 en el directorio de trabajo del contenedor, ubicado en el entorno del host. espacio de montaje. Así, en la imagen del contenedor, se puede configurar el lanzamiento de “/proc/self/fd/7/../../../bin/bash” y, mediante la ejecución de un script de shell, sobrescribir el contenido de “/proc/self/exe”, que se refiere a la copia del host de /bin/bash.

Otra variante de ataque permite a un atacante restringido dentro de un contenedor obtener acceso al directorio del entorno del host si se ejecutan procesos privilegiados en el contenedor especificado usando el comando runc exec con la opción --cwd. Un atacante puede reemplazar la ruta del proceso iniciado con un enlace simbólico que apunte a “/proc/self/fd/7/” y lograr la apertura de “/proc/$exec_pid/cwd” para acceder al FS en el lado del host. Un atacante también puede lograr la sobrescritura de archivos ejecutables en el entorno del host organizando el lanzamiento del archivo ejecutable desde el entorno del host (“/proc/self/fd/7/../../../bin/ bash”) y luego sobrescribiendo el archivo “ /proc/$pid/exe”, que hace referencia al archivo en ejecución.

Además, se han identificado cinco vulnerabilidades más en componentes del kit de herramientas Docker:

  • CVE-2024-23651 es una condición de carrera en el paquete BuildKit utilizado por Docker para convertir el código fuente en artefactos de compilación. La vulnerabilidad es causada por el uso de un único punto de montaje común con un caché (“-mount=type=cache,source=”) en etapas de compilación ejecutadas simultáneamente, lo que permite, al procesar un Dockerfile especialmente diseñado en BuildKit, acceder a los archivos. en el entorno host desde el contenedor de compilación. La vulnerabilidad se solucionó en BuildKit 0.12.5.
  • CVE-2024-23652 Un error al eliminar archivos vacíos creados para un punto de montaje cuando se usa la opción "--mount" permite eliminar un archivo fuera del contenedor al procesar un Dockerfile especialmente diseñado. La vulnerabilidad se solucionó en BuildKit 0.12.5.
  • CVE-2024-23653 Una falla en la implementación de API en BuildKit permite que la ejecución del contenedor ocurra con privilegios elevados, independientemente del estado de la configuración security.insecure. La vulnerabilidad se solucionó en BuildKit 0.12.5.
  • CVE-2024-23650 Un cliente o interfaz de BuildKit malicioso puede provocar que un proceso de BuildKit en segundo plano falle. La vulnerabilidad se solucionó en BuildKit 0.12.5.
  • CVE-2024-24557 es un posible envenenamiento de caché en Moby, un componente para construir sistemas de aislamiento de contenedores especializados. Al procesar una imagen de contenedor especialmente diseñada, puede almacenar en caché datos que se pueden usar en pasos de compilación posteriores. La vulnerabilidad se ha solucionado en Moby 25.0.2 y 24.0.9.

Fuente: opennet.ru

Compre alojamiento confiable para sitios con protección DDoS, servidores VPS VDS 🔥 Compra alojamiento web fiable con protección DDoS, servidores VPS VDS | ProHoster