En las herramientas de gestión de contenedores Linux aislados Docker una vulnerabilidad (), que en determinadas circunstancias permite acceder al entorno del host desde el contenedor si hay posibilidad de ejecutar sus propias imágenes en el sistema o si se tiene acceso al contenedor en ejecución. El problema se manifiesta en todas las versiones de Docker y permanece sin corregir (propuesto, pero aún no aceptado, , que implementa la suspensión del trabajo del contenedor durante las operaciones con el sistema de archivos).
La vulnerabilidad permite extraer archivos del contenedor a una parte arbitraria del sistema de archivos del host al ejecutar el comando «docker cp». La extracción de archivos se realiza con privilegios de root, lo que permite leer o escribir cualquier archivo en el entorno del host, lo suficiente para obtener control sobre el sistema anfitrión (por ejemplo, se puede sobreescribir /etc/shadow).
El ataque solo puede llevarse a cabo en el momento en que el administrador ejecuta el comando «docker cp» para copiar archivos al contenedor o desde él. Así, el atacante debe de alguna manera convencer al administrador de Docker de la necesidad de realizar esta operación y predecir la ruta utilizada durante la copia. Por otro lado, el ataque puede llevarse a cabo, por ejemplo, al proporcionar servicios en la nube herramientas para copiar archivos de configuración al contenedor, construidas con el comando «docker cp».
El problema es causado por una deficiencia en la aplicación de la función , 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. Durante la ejecución del comando «docker cp» se produce un breve , en el cual la ruta ya ha sido verificada, pero la operación aún no se ha ejecutado. Dado que la copia se realiza en el contexto del sistema de archivos del host, en ese intervalo de tiempo se puede cambiar el enlace a otra ruta e iniciar la copia de datos en un lugar arbitrario del sistema de archivos fuera del contenedor.
Dado que la ventana temporal de manifestación del estado de carrera es muy limitada en el Al realizar operaciones de copia desde un contenedor, se logró llevar a cabo un ataque exitoso en menos del 1% de los casos al reemplazar cíclicamente el enlace simbólico en la ruta utilizada en la operación de copia (el ataque exitoso se realizó después de aproximadamente 10 segundos de intentos continuos de copiar un archivo con el comando "docker cp").
Al llevar a cabo la operación de copia en el contenedor, se puede lograr un ataque repetible para sobrescribir un archivo en el sistema host en solo unas pocas iteraciones. La posibilidad de ataque está relacionada con el hecho de que, al copiar al contenedor, se aplica el concepto de "chrootarchive", según el cual el proceso archive.go extrae el archivo comprimido no en el chroot raíz del contenedor, sino en el chroot del directorio padre de la ruta de destino, controlada por el atacante, y no detiene la ejecución del contenedor (el chroot se utiliza como indicador para explotar una condición de carrera).
Fuente: opennet.ru
