On-entry container attack - CVE-2016-9962
Se ha encontrado una vulnerabilidad en la entrada de contenedor Docker y le ha sido asignado el
CVE-2016-9962.
El fallo aborda un ataque específico que usa
ptrace
y descriptores de archivos vaciados incorrectamente para obtener acceso a contenido por fuera de un contenedor. Este ataque solamente es un riesgo cuando se ejecutan contenedores con privilegios y es mitigado por SELinux.
Este problema fue publicado en enero 10, 2017.
### Información de fondo
Esta vulnerabilidad se presenta cuando un proceso que normalmente se ejecuta en un espacio de nombre, es lanzado y desplazado en uno diferente. Los espacios de nombre normalmente actúan como un mecanismo de seguridad debido a que los procesos dentro de espacios diferentes no se pueden ver o manipular unos a otros. El problema es que cuando un proceso se desplaza en un espacio de nombre, se expone a acciones maliciosas desde procesos que ya existen en ese espacio de nombre. Las vulnerabilidades en la entrada atacan procesos que se se unen a contenedores a través de
nsenter
o
docker exec
. Un ataque exitoso puede dar lugar a que un proceso malicioso obtenga acceso al sistema o a otros privilegios.
Por ejemplo, si un proceso malicioso se ha tomado un contenedor y ha obtenido
root
dentro de ese contenedor, el proceso malicioso puede matar cualquier otro proceso que pueda "ver". Afortunadamente, el espacio de nombre del contenedor evita que el proceso malicioso detecte o mate cualquier proceso host o cualquier otro proceso o procesos en otros contenedores. Sin embargo, si un administrador trata de investigar el problema mediante
nsenter
para desplazar un shell a un contenedor que se está comportando mal, el proceso malicioso puede también ver y manipular dicho shell (y terminarlo).
Servicios Linux vulnerables
Los siguientes servicios de Linux legítimos pueden utilizarse mal en ataques de entrada. Use los mecanismos de seguridad de Linux tales como
SELinux
y
seccomp
para evitar su explotación.
-
ptrace
"Rastreo de procesos" optrace
es un servicio de depuración que está disponible en Linux. Cualquier proceso con permisos adecuados puedeptrace
otro proceso a través de la llamada de kernelptrace
.ptrace
otorga acceso de bajo nivel al proceso, que incluye su memoria, recursos (tales como descriptores de archivos) y la capacidad de interceptar llamadas de kernel de procesos. -
docker exec
docker exec
es un servicio provisto por el demonio Docker que permite que un proceso adicional sea lanzado dentro de un contenedor existente. A menudo se utiliza para inspeccionar o hacer cambios manuales al contenedor. Por ejemplo, para lanzar un shell bash dentro de un contenedor que no se comporta bien para depurar su conducta, puede utilizar:
docker exec -it container-name /bin/bash
-
nsenter
nsenter
es un servicio de Linux utilizado para desplazar o lanzar procesos dentro de espacios de nombres específicos. Debido a que los contenedores se construyen en espacios de nombres de Linux,nsenter
puede utilizarse como una versión más genérica dedocker exec
. -
Funcionalidades de kernel
En Linux, los poderes especiales que tradicionalmente se otorgan a la cuentaroot
han sido divididos en funcionalidades individuales y algunas otorgan más de un poder administrativo. Por ejemplo,CAP_SYS_TIME
otorga únicamente la capacidad para fijar el reloj del sistema.CAP_SYS_ADMIN
, por otra parte, otorga un rango de poderes necesarios para administrar una máquina. Cada funcionalidad de kernel puede ser otorgada o negada de forma individual para un proceso. -
seccomp
El servicioseccomp
le permite acceder a llamadas de kernel individuales.
Red Hat Product Security ha clasificado esta actualización como de impacto de seguridad Moderado .
Productos impactados
Se han afectado las siguientes versiones de Red Hat Product:
- Red Hat Enterprise Linux 7
- Red Hat Openshift Container Platform
- RHEL Atomic Host
Impacto
El fallo en CVE-2016-9962 ocurre debido a que falta un mecanismo de seguridad en
docker exec
.
Hasta el Docker 1.12.6 de la corriente principal de desarrollo, los procesos que
docker exec
lanzó podían ser
ptrace (rastreados)
dentro del contenedor y mantener brevemente sus descriptores de archivos, los cuales estaban ligados al contenido por fuera del contenedor. Esto podía ser aprovechado por un proceso dentro de un contenedor equipado con capacidades
ptrace
. Si un proceso malicioso actuaba lo suficientemente rápido, podría
ptrace
el proceso entrante y obtener acceso al contenido por fuera del contenedor. Esto ha sido abordado en Docker 1.12.6 evitando el 'ptrace' de estos procesos (mediante el atributo del proceso
DUMPABLE
) y vaciando los descriptores de archivos de los procesos entrantes antes de ser desplazados.
Incluso sin el backport, la mayor parte de las instalaciones no están en riesgo:
-
La ejecución de Docker suprime varias funcionalidades predeterminadas de kernel, incluidas
CAP_SYS_PTRACE
. Es decir que solo los contenedores para los que se ha agregado explícitamente esta funcionalidad han sido agregados ( o que se ejecutan con el switch--privilegiado
) presentan un riesgo. Además, solo los procesos privilegiados dentro de dichos contenedores presentan un riesgo. Los procesos de usuarios sin privilegios dentro de dichos contenedores no tienen suficiente poder para hacer daño. Por lo tanto, si usted está siguiendo las prácticas de contenedor recomendadas de “no ejecutar contenedores con privilegios” y “no ejecutar procesos en root dentro de contenedores”, usted estará a salvo. - En sistemas Red Hat con SELinux habilitado, los peligros de los contenedores privilegiados son mitigados. SELinux evita que los procesos de contenedor accedan al contenido del host, incluso si esos procesos de contenedor logran obtener acceso a los descriptores de archivos actuales.
-
En la mayoría de las instalaciones,
nsenter
ydocker exec
son operaciones puramente manuales. OpenShift usansenter
para facilitar el reenvío a puerto, pero sin la intervención manual, Vanilla Docker nunca deberá desplazar un proceso a un contenedor o entre contenedores.
Diagnostique su vulnerabilidad
Acción
Se recomienda a todos los clientes de Red Hat que ejecuten las versiones afectadas de Docker, actualizarlas tan pronto como estén disponibles los parches. A continuación encontrará los paquetes impactados y la mitigación recomendada.
Actualizaciones por productos afectados
Producto | Paquete | Recomendación/Actualización |
---|---|---|
Red Hat Enterprise Linux 7 | docker-latest, docker, runc | pendiente |
Red Hat Openshift Container Host | docker-latest, docker | parche pendiente para RHEL7 |
RHEL Atomic Host | docker-latest, docker, runc | Parche pendiente para RHEL7 y respin |
Mitigación
ptrace
y otras llamadas de kernel peligrosas pueden ser rechazados desde sus contenedores. Los perfiles seccomp personalizados pueden ser creados para prohibir esta conducta (soportada por Vanilla docker, OpenShift y Kubernetes). Esto prevendrá completamente los ataques basados en CVE-2016-9962.
Comments