Vulnerabilidad en runc que permite escapar de contenedores Docker y Kubernetes.

Se ha encontrado una vulnerabilidad CVE-2024-21626 en el conjunto de herramientas para ejecutar contenedores aislados runc, utilizado en Docker y Kubernetes, que permite acceder al sistema de archivos del entorno host desde un contenedor aislado. Durante un ataque, un atacante puede sobrescribir algunos archivos ejecutables en el entorno host y lograr así ejecutar su código fuera del contenedor. En el runtime crun y youki, que utilizan runc, así como en LXC, el problema no se presenta. La vulnerabilidad ha sido corregida en la versión runc 1.1.12.

En el caso de utilizar las herramientas Docker o Kubernetes, el ataque puede llevarse a cabo mediante la preparación de una imagen de contenedor especialmente diseñada, después de la cual, al instalarla y ejecutarla, se puede acceder al sistema de archivos externo desde el contenedor. Al utilizar Docker, existe la posibilidad de explotación a través de un Dockerfile especialmente diseñado. La vulnerabilidad también puede ser explotada si se ejecutan procesos en el contenedor utilizando el comando «runc exec» mediante la vinculación del directorio de trabajo al espacio de nombres del entorno host.

La vulnerabilidad es causada por una fuga de descriptores de archivos internos. Antes de ejecutar código dentro del contenedor en runc, se cierran todos los descriptores de archivos usando el flag O_CLOEXEC. Sin embargo, después de la posterior ejecución de la función setcwd(), queda un descriptor de archivo abierto que apunta al directorio de trabajo y sigue siendo accesible después de iniciar el contenedor. Se han propuesto varios escenarios básicos de ataque al entorno host utilizando el descriptor de archivo restante.

Por ejemplo, un atacante puede especificar en la imagen del contenedor el parámetro process.cwd, que apunta a «/proc/self/fd/7/», lo que resultará en vincular al proceso pid1 en el contenedor con el directorio de trabajo que se encuentra en el espacio de montaje del entorno host. De este modo, en la imagen del contenedor se puede configurar la ejecución de «/proc/self/fd/7/../../../../bin/bash» y, mediante la ejecución de un script shell, sobrescribir el contenido de «/proc/self/exe», que hace referencia a la copia host de /bin/bash.

Otra variante de ataque permite a un atacante, limitado dentro de un contenedor, acceder al directorio del entorno host, si en el contenedor especificado se ejecutan procesos privilegiados mediante el comando «runc exec» con la opción «--cwd». El atacante puede reemplazar la ruta del proceso ejecutable por un enlace simbólico que apunta a «/proc/self/fd/7/» y lograr la apertura de «/proc/$exec_pid/cwd» para acceder al sistema de archivos en el lado del host. El atacante también puede lograr la sobrescritura de archivos ejecutables en el entorno host, organizando la ejecución de un archivo desde el entorno host («/proc/self/fd/7/../../../../bin/bash») y luego sobrescribiendo el archivo «/proc/$pid/exe», que refiere al archivo ejecutado.

Además, se han identificado cinco vulnerabilidades adicionales en los componentes de la herramienta Docker:

  • CVE-2024-23651 — condición de carrera en el paquete BuildKit, utilizado en Docker para transformar el código fuente en artefactos de construcción. La vulnerabilidad se debe a la utilización de un único punto de montaje compartido con caché («--mount=type=cache,source=») en etapas de construcción que se ejecutan en paralelo, lo que permite que, al procesar un Dockerfile especialmente diseñado, se obtenga acceso a los archivos en el entorno host desde el contenedor de construcción. La vulnerabilidad ha sido corregida en BuildKit 0.12.5.
  • CVE-2024-23652 — error al eliminar archivos vacíos, creados para un punto de montaje al utilizar la opción «--mount», que permite eliminar un archivo fuera del contenedor al procesar un Dockerfile especialmente diseñado. La vulnerabilidad ha sido corregida en BuildKit 0.12.5.
  • CVE-2024-23653 — error en la implementación de API en BuildKit que permite ejecutar un contenedor con privilegios elevados, a pesar del estado de configuración de security.insecure. La vulnerabilidad ha sido corregida en BuildKit 0.12.5.
  • CVE-2024-23650 — un cliente malicioso o frontend de BuildKit puede causar la terminación inesperada del proceso en segundo plano de BuildKit. La vulnerabilidad ha sido corregida en BuildKit 0.12.5.
  • CVE-2024-24557 — capacidad de envenenar la caché en Moby, un componente para construir sistemas especializados de aislamiento de contenedores. Al procesar una imagen de contenedor especialmente diseñada, se puede lograr que se coloquen en la caché datos que pueden ser utilizados en etapas posteriores de la construcción. La vulnerabilidad ha sido corregida en Moby 25.0.2 y 24.0.9.

Fuente: opennet.ru

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster