Vulnerabilidad en Docker que permite escapar del contenedor

En Kit de herramientas para gestionar contenedores Docker aislados de Linux identificado vulnerabilidad (CVE-2018-15664), que, bajo un cierto conjunto de circunstancias, le permite acceder al entorno del host desde un contenedor si tiene la capacidad de ejecutar sus imágenes en el sistema o con acceso a un contenedor en ejecución. El problema aparece en todas las versiones de Docker y permanece sin solucionar (propuesto, pero aún no aceptado). parche, que implementa la suspensión del contenedor mientras realiza operaciones con el FS).

La vulnerabilidad permite extraer archivos de un contenedor a una parte arbitraria del sistema de archivos del sistema host al ejecutar el comando "docker cp". La extracción de archivos se realiza con derechos de root, lo que permite leer o escribir cualquier archivo en el entorno del host, lo cual es suficiente para obtener el control del sistema host (por ejemplo, puede sobrescribir /etc/shadow).

El ataque sólo puede llevarse a cabo cuando el administrador ejecuta el comando “docker cp” para copiar archivos hacia o desde el contenedor. Por lo tanto, el atacante debe convencer de alguna manera al administrador de Docker de la necesidad de realizar esta operación y predecir la ruta utilizada al copiar. Por otro lado, se puede llevar a cabo un ataque, por ejemplo, cuando los servicios en la nube proporcionan herramientas para copiar archivos de configuración en un contenedor, creado mediante el comando "docker cp".

El problema se debe a un fallo en la aplicación de la función. SeguirEnlace simbólicoInScope, que calcula la ruta absoluta en el sistema de archivos principal en función de la ruta relativa, teniendo en cuenta la ubicación del contenedor. Mientras se ejecuta el comando "docker cp", un corto plazo condición de carrera, en el que ya se ha verificado la ruta, pero aún no se ha realizado la operación. Dado que la copia se lleva a cabo en el contexto del sistema de archivos principal del sistema host, dentro de un período de tiempo específico, puede lograr reemplazar el enlace con otra ruta e iniciar la copia de datos en una ubicación arbitraria en el sistema de archivos externo. El contenedor.

Dado que la ventana de tiempo para que ocurra una condición de carrera es muy limitada en un explotar prototipo Al realizar operaciones de copia desde un contenedor, fue posible lograr un ataque exitoso en menos del 1% de los casos al reemplazar cíclicamente un enlace simbólico en la ruta utilizada en la operación de copia (el ataque exitoso se llevó a cabo después de aproximadamente 10 segundos de intentos). para copiar continuamente el archivo en un bucle con el comando “docker cp”).

Al realizar una operación de copia en un contenedor, puede lograr un ataque de sobrescritura de archivos repetible en el sistema host en tan solo unas pocas iteraciones. La posibilidad de un ataque se debe al hecho de que al copiar en un contenedor se utiliza el concepto "chrootarchive", según el cual el proceso archive.go extrae el archivo no en el chroot de la raíz del contenedor, sino en el chroot del directorio principal de la ruta de destino, controlado por el atacante, y no detiene la ejecución del contenedor (chroot se usa como señal para explotar las condiciones de carrera).

Fuente: opennet.ru

Añadir un comentario