Vulnerabilidad en Docker permite obtener acceso al archivo de lectura/escritura en el host

Un ciberatacante podría explotar una vulnerabilidad recientemente descubierta en Docker para salir del contenedor y obtener acceso arbitrario al archivo de lectura/escritura en el host con privilegios de raíz.

Rastreado como CVE-2018-15664, la falla consiste en un error de tiempo de verificación a tiempo de uso (TOCTOU). Dichos problemas son un subconjunto de vulnerabilidades de condición de carrera, las cuales son causadas por una falta de coincidencia entre las condiciones cuando se verifica un recurso, y cuando es utilizado por una aplicación.

Tales errores permiten a los atacantes modificar un recurso en este intervalo para leer o modificar datos, escalar privilegios o hacer que la aplicación se comporte de manera diferente.

La vulnerabilidad afecta a todas las versiones de Docker y reside en la función FollowSymlinkInScope, que estaba destinada a resolver las rutas de forma segura como si estuvieran dentro del contenedor, explica Aleksa Sarai, la investigadora de seguridad que descubrió la vulnerabilidad.

Después de resolverse, la ruta «se pasa un poco y luego se opera un poco más tarde», señala Sarai. Por lo tanto, si un atacante puede agregar un componente de enlace simbólico a la ruta en este intervalo, el componente de ruta de enlace simbólico podría terminar resolviéndose en el host como raíz.

En el caso de ‘docker cp’, la ruta se abre al crear el archivo que se transmite al cliente y la vulnerabilidad podría proporcionar acceso de lectura * y * a cualquier ruta en el host.

«Por lo que sé, no hay protecciones significativas contra este tipo de ataque (aparte de no permitir que «docker cp» funcione en los contenedores, pero eso solo ayuda con su ataque particular a través de FollowSymlinkInScope)», señala Sarai.

El problema puede afectar el sistema de archivos del host, a menos que el Docker daemon esté restringido a través de AppArmor.

Sarai presentó dos versiones del problema, ambas incluyen una imagen de Docker que contiene un simple binario que intenta alcanzar la condición de carrera. Uno de los scripts, run_read.sh, tiene una probabilidad de <1% de alcanzar la condición de carrera, mientras que el otro, run_write.sh, puede sobrescribir el sistema de archivos del host en muy pocas iteraciones.

“Los scripts solicitarán permisos sudo, pero eso es solo para poder crear un» archivo de marca «en /. También se pueden modificar los scripts para que apunten a / etc / shadow ”, explica Sarai.