21 de marzo de 2018

Desbordamiento de memoria en el kernel de Linux permite elevar privilegios

Una vulnerabilidad en el kernel Linux a la hora de comprobar parámetros introducidos por el usuario podría permitir a un atacante escalar privilegios.
 El fallo, del cual se ha tenido constancia como en muchos otros casos, a través de los 'commits' al kernel, tiene asignado el CVE-2018-1068. Aún se desconoce completamente el alcance de una posible explotación, aunque tras un rápido vistazo al código de los parches podemos intuir que se trata de algo grave. Básicamente, a través de una llamada del sistema es posible proporcionar al kernel parámetros anómalos. Al no comprobarse su corrección en el lado del kernel terminarían por causar desbordamiento de memoria, y la posibilidad de escribir en memoria del kernel.
 Específicamente, el error está relacionado con la estructura de datos 'ebt_entry' y los métodos que operan sobre ésta, que se encuentran en el fichero 'net/bridge/netfilter/ebtables.c'. Al no validar los parámetros que vienen de la parte del usuario, los parámetros anómalos son procesados por código que no espera que sean incorrectos. La forma más simple de explotación es a través del uso de ebtables, una herramienta parecida a iptables pero orientada a la capa de enlace de red (lo que se suele implementar con Ethernet), usando reglas especialmente diseñadas. Esta utilidad hace uso de las llamadas del sistema vulnerables.
La vulnerabilidad ha sido clasificada como importante, ya que aunque por lo complejo de la explotación, no es necesario ser el usuario root, basta con tener privilegios de administrador en el namespace (espacio de nombres) 'user+network'. Esto es especialmente peligroso en un contexto de contenedores estilo Docker, ahora tan de moda. Desde un contenedor con privilegios restringidos pero siendo administrador del namespace mencionado sería posible salirse del contenedor y escalar privilegios al usuario root.
Más información:
CVE-2018-1068 kernel: Out-of-bounds write via userland offsets in ebt_entry struct in netfilter/ebtables.c https://bugzilla.redhat.com/show_bug.cgi?id=1552048
netfilter: ebtables: CONFIG_COMPAT: don't trust userland offsets https://github.com/torvalds/linux/commit/b71812168571fa55e44cdd0254471331b9c4c4c6
Fuente: Hispasec