Translated message

A translation of this page exists in English.

On-entry container attack - CVE-2016-9962

Public Date: January 11, 2017, 12:00 am
Updated -
Ongoing Status
Moderate Impact

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" o ptrace es un servicio de depuración que está disponible en Linux. Cualquier proceso con permisos adecuados puede ptrace otro proceso a través de la llamada de kernel ptrace. 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 de docker exec .
  • Funcionalidades de kernel
    En Linux, los poderes especiales que tradicionalmente se otorgan a la cuenta root 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 servicio seccomp 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 y docker exec son operaciones puramente manuales. OpenShift usa nsenter 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

Para comprobar si su versión de Docker ya ha sido corregida, descargue y use este script .

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