Comprensión de la nueva vulnerabilidad del núcleo Linux AF_VSOCK
El descubrimiento de una nueva vulnerabilidad del kernel de Linux no es una gran sorpresa en sí misma. Ocurre todo el tiempo. Sin embargo, a veces parece como si, cada vez que un investigador de seguridad va a buscar, el investigador descubre una nueva vulnerabilidad grave en el kernel de Linux - y que sucede con demasiada frecuencia para la comodidad.
Este mes de febrero, se informó de una nueva vulnerabilidad en un rincón relativamente oscuro del kernel de Linux: en una función que facilita las comunicaciones entre el host y el invitado de la máquina virtual. Aunque se acaba de descubrir, ya figura en la lista como CVE-2021-26708.
En este artículo describimos la vulnerabilidad, explicamos cómo surgió y señalamos los riesgos potenciales que entraña la nueva vulnerabilidad.
Contenido
Introducción a la vulnerabilidad
Espera, no dependemos de la virtualización...
¿Cómo funciona la vulnerabilidad?
¿Qué es la escalada de privilegios?
Funciones de seguridad SMAP/SMEP
¿Qué otras vulnerabilidades AF_VSOCK existen?
Considere la posibilidad de aplicar parches en directo con KernelCare
Introducción a la vulnerabilidad
En febrero, un investigador descubrió que la implementación de AF_VSOCK en Linux permite a un atacante lanzar un ataque de escalada de privilegios. La capacidad de hacerlo se basa en el hecho de que se crea una condición de carrera bajo ciertas circunstancias cuando se llama a AF_VSOCK, lo que lleva a la oportunidad de eludir los mecanismos de seguridad clave - SMEP y SMAP.
Resulta interesante que, en el caso de esta vulnerabilidad, el punto débil se encuentre en una función del núcleo de Linux donde las vulnerabilidades se encuentran relativamente poco. Esta es sólo la tercera vulnerabilidad encontrada en AF_VSOCK hasta el momento, echaremos un vistazo rápido a otras dos - CVE-2013-3237 y CVE-2018-14625 - más adelante en este artículo.
Se trata de un número relativamente bajo de vulnerabilidades en un rincón concreto del kernel de Linux - considere el hecho de que hay catorce vulnerabilidades futex en el kernel Linuxpor ejemplo.
¿Cuándo entró en el núcleo?
AF_VSOCK se introdujo por primera vez en el kernel de Linux para facilitar las comunicaciones de la máquina virtual. El código específico de esta vulnerabilidad se introdujo en 2019: es el código que implementa el soporte multitransporte en AF_VSOCK.
En noviembre de 2019, el código se fusionó en la versión v5.5-rc1 del kernel de Linux. Como resultado, muchas distribuciones que incorporaron esa versión del kernel y posteriores ahora incorporan la implementación AF_VSOCK afectada.
AF_VSOCK está incluido en las principales distribuciones de Linux, incluyendo por ejemplo Red Hat Enterprise Linux (RHEL) y Ubuntupor lo que ambos proveedores han informado de la nueva vulnerabilidad AF_VSOCK como un problema.
Espera, no dependemos de la virtualización...
No importa. La cuestión reside en el hecho de que, aunque no haga uso de AF_VSOCK en sus aplicaciones, el módulo AF_VSOCK está incluido en el núcleo de Linux y AF_VSOCK está siempre listo para ser cargado en cuanto lo solicite un programa. Esta carga automática garantiza que el código esté disponible siempre que un host de virtualización intente comunicarse con una máquina virtual.
Por lo tanto, un hacker puede simplemente crear una aplicación que solicite un VSOCK "ficticio". Al llamar a AF_VSOCK, el hacker hace que el sistema operativo cargue automáticamente AF_VSOCK, lo que le permite explotar la nueva vulnerabilidad.
Por lo tanto, incluso si no hace uso de la virtualización, la presencia del módulo AF_VSOCK en las distribuciones Linux más comunes implica que su sistema también es vulnerable.
¿Cómo funciona la vulnerabilidad?
Como hemos sugerido anteriormente en este artículo, la vulnerabilidad puede ser fácilmente activada por un actor malintencionado cuando éste realiza una petición VSOCK. Actualmente no hay exploits vivos de esta vulnerabilidad, pero en esta sección, cubriremos algunos de los conceptos clave alrededor de esta vulnerabilidad para ayudar a resaltar cómo puede ser explotada en el futuro.
Requiere una cuenta local
En primer lugar, abordamos un aspecto que reduce en cierta medida la gravedad potencial de esta vulnerabilidad en particular. Para poder explotar la debilidad de esta vulnerabilidad, el intruso necesitará acceder a una cuenta local. Esto contrasta con muchas otras vulnerabilidades que pueden explotarse más fácilmente de forma remota.
En otras palabras, el atacante necesitará acceso local previo a su sistema para poder explotar esta vulnerabilidad. No se trata de un exploit remoto en el que un atacante puede atacar remotamente su sistema sin tener acceso previo al mismo.
Dicho esto, esta vulnerabilidad sigue siendo peligrosa porque implica algo llamado escalada de privilegios.
¿Qué es la escalada de privilegios?
En cualquier sistema, es habitual -y una buena práctica- limitar los permisos (o privilegios) concedidos a un usuario. Un superadministrador o usuario root, por ejemplo, tendrá permisos amplios y sin restricciones para ejecutar instrucciones en un sistema operativo, pero un administrador de sistemas responsable nunca concederá un acceso tan amplio a todos los usuarios, ni a todas las aplicaciones.
En su lugar, se concede un acceso más limitado. Una buena práctica significaría que los administradores de sistemas conceden sólo los privilegios necesarios para que el usuario o la aplicación ejecuten sus tareas.
Sin embargo, los privilegios básicos pueden servir de trampolín. Los atacantes pueden explotar un defecto o vulnerabilidad o, de hecho, un error de programación o configuración para obtener privilegios más altos (o elevados) en un sistema. Mientras que los permisos iniciales para un usuario pueden ser muy restrictivos, a través de la escalada de privilegios un atacante puede ser capaz de obtener acceso expansivo - a menudo esto podría ser el acceso root completo a un sistema.
La escalada de privilegios puede ser difícil de detectar, y la mejor manera de protegerse contra este tipo de ataque es asegurarse de que la vulnerabilidad subyacente está protegida. Por ejemplo, aplicando un parche.
Por cierto, ¿qué es VSOCK?
Hoy en día, es habitual gestionar las cargas de trabajo informáticas mediante la virtualización. Puede leer más sobre la virtualización aquípero para los propósitos de este artículo vale la pena entender algunas cosas sobre la virtualización.
La virtualización implica que varios sistemas operativos (los invitados) se alojan en un único ordenador, y que estos sistemas operativos invitados son gestionados por una pieza de código global llamada hipervisor (el anfitrión).
Los sistemas operativos invitados actúan como sistemas operativos distintos y discretos, tal y como lo harían normalmente si estuvieran alojados 1:1 en un ordenador. Sin embargo, con el tiempo, es necesario que el sistema operativo invitado se comunique con su anfitrión: el hipervisor.
Una forma de hacerlo sería utilizar la red virtual establecida por el hipervisor - esencialmente utilizando Ethernet y TCP/IP para comunicarse. Sin embargo, este método no es fiable y requiere la configuración de interfaces de red en el invitado.
Por eso se añadió VSOCK al kernel de Linux. VSOCK facilita las comunicaciones entre el huésped y el anfitrión. Puede ser utilizado por aplicaciones a nivel de usuario en la máquina virtual. Es compatible con TCP y UDP, y en Linux la familia de protocolos se define como AF_VSOCK.
SMP y condiciones de carrera
El otro aspecto clave que debe comprender sobre la virtualización de nivel empresarial es que depende en gran medida de las características del procesador: para empezar, la virtualización debe ser compatible con el hardware de la CPU. Además, para gestionar eficientemente las demandas que compiten por las capacidades del procesador, la virtualización depende de la tecnología de procesadores de vanguardia, incluida la capacidad de gestionar cargas de trabajo a través de múltiples procesadores en un sistema.
Para ello, utiliza el multiprocesamiento simétrico (SMP). En pocas palabras, el sistema operativo (o el hipervisor) gestiona procesos simultáneos en varias CPU de un mismo sistema que comparten la misma memoria.
El SMP puede resultar complejo, sobre todo en lo que respecta al acceso a datos compartidos. Puede ocurrir que dos o más procesos intenten acceder a los mismos datos, pero que no esté claro cuál de los procesos será el primero en acceder a estos datos. Ambos procesos están "compitiendo" para acceder a los datos, lo que crea lo que se llama una condición de carrera.
Las condiciones de carrera pueden ser explotadas por los hackers para interferir con un proceso que de otro modo sería seguro y es por eso que la nueva vulnerabilidad AF_VSOCK puede volverse peligrosa: la implementación incorrecta del código introducida en noviembre de 2019 crea la oportunidad de que surja una condición de carrera.
Funciones de seguridad SMAP/SMEP
Dada la necesidad de facilitar las comunicaciones entre sistemas operativos, el código AF_VSOCK se ejecuta a un nivel muy bajo. Esto puede crear una condición en la que los atacantes que explotan el código a un nivel tan bajo pueden ganar rápidamente poder sobre un sistema.
Las últimas series de CPU de Intel incorporan funciones de protección frente a vulnerabilidades a nivel de procesador, denominadas protección de ejecución en modo supervisor (SMEP) y prevención de acceso en modo supervisor (SMAP). Linux es compatible con estas funciones, que tienen por objeto impedir que el núcleo acceda involuntariamente a la memoria del espacio de usuario.
Sin embargo, las condiciones que se desarrollan debido a la vulnerabilidad recién descubierta en AF_VSOCK permiten a un atacante eludir SMEP y SMAP. Esto, a su vez, abre la puerta a un ataque de escalada de privilegios.
El impacto
Actualmente no hay exploits in the wild y es difícil predecir con exactitud el impacto de esta nueva vulnerabilidad. No obstante, dadas las operaciones de bajo nivel implicadas y el claro potencial de un ataque de escalada de privilegios, aconsejamos que las organizaciones se tomen en serio esta vulnerabilidad. Es probable que esté en camino un parche y cuanto antes lo aplique su organización, mejor.
¿Qué está en peligro?
En resumen, y suele ser el caso, la respuesta es que todo está en riesgo. La nueva vulnerabilidad AF_VSOCK podría ser el punto de entrada a una brecha a gran escala en sus redes. Mediante un ataque de escalada de privilegios, un intruso puede obtener acceso sin restricciones a un PC o a un servidor.
Esto puede ser un trampolín para un acceso mucho más amplio: el sistema comprometido puede estar en un rol de confianza, y el atacante podría abusar de estos privilegios para lograr sus objetivos.
¿A quién afecta?
Todos los que dependan de una distribución principal que utilice un kernel publicado después de noviembre de 2019 hasta principios de febrero de 2021. Esto incluye Red Hat Enterprise Linux (RHEL) 8, CentOS 8 y Ubuntu 20.10.
No importa en qué parte de su organización esté desplegado el sistema operativo, ni la importancia de ese despliegue: su organización está en peligro mientras esta vulnerabilidad siga sin parchear.
¿Qué otras vulnerabilidades AF_VSOCK existen?
En el momento de escribir estas líneas, la comunidad tiene conocimiento de otras dos vulnerabilidades que afectan a AF_VSOCK en el kernel de Linux:
- CVE-2013-3237. En esta vulnerabilidad, identificada en 2013, los investigadores descubrieron que la función vsock_stream_sendmsg no inicializa una variable de longitud específica. A su vez, esta omisión permite a un usuario local utilizar una llamada al sistema recvfrom o recvmsg específicamente crafteada para obtener información sensible de la memoria de pila del kernel.
- CVE-2018-14625. Descubierta en 2018, esta vulnerabilidad AF_VSOCK también implica la aparición de una condición de carrera - esta vez entre dos funciones, connect() y close(). Al explotar esta vulnerabilidad, un atacante podría realizar una lectura incontrolada de la memoria del kernel desde el interior de una máquina virtual huésped.
Ninguna de estas vulnerabilidades ha recibido mucha cobertura y no hay exploits conocidos - pero eso no significa que no se encuentre ningún exploit, ni que no haya ningún exploit desconocido que se esté utilizando activamente en la naturaleza.
Parchee rápido y a fondo
Las dos vulnerabilidades AF_VSOCK que enumeramos anteriormente ya han sido parcheadas y esperamos que la vulnerabilidad recién descubierta también vea una solución en breve. A su vez, las distintas distribuciones que dependen del actual kernel de Linux publicarán parches para el sistema operativo que garanticen que la nueva vulnerabilidad no suponga un peligro.
Sin embargo, los parches deben aplicarse para ser efectivos. Como organización, debe asegurarse de que los parches del kernel se aplican en todos sus equipos Linux. Debe hacerlo con rapidez y coherencia. Una sola máquina sin parchear puede dejar todo su parque tecnológico expuesto a un ataque.
Considere la posibilidad de aplicar parches en directo con KernelCare
Dicho esto, en KernelCare somos conscientes de lo difícil que resulta aplicar parches de forma sistemática. La aplicación de parches requiere tiempo y recursos, y ambos pueden escasear. Peor aún, la aplicación de parches puede ser perjudicial, ya que los reinicios del servidor provocan tiempos de inactividad del servicio y usuarios y clientes descontentos.
KernelCare ofrece parches automatizados para varias distribuciones de Linux. Este servicio de aplicación de parches en tiempo real no requiere reiniciar el servidor, sino que la aplicación de parches se realiza sin interrumpir los servicios. En otras palabras, su organización puede aplicar parches de forma coherente, sin costes de mano de obra ni interrupciones.
Conclusión
El rincón relativamente oscuro del núcleo de Linux en el que se descubrió la nueva vulnerabilidad pone de manifiesto lo amplio e impredecible que es el panorama actual de las vulnerabilidades. Realmente no se puede predecir dónde y cuándo puede surgir una nueva amenaza.
No obstante, existen métodos probados para protegerse de las vulnerabilidades emergentes. La aplicación periódica de parches es una vía clara hacia la seguridad continua de las operaciones. ¿Considera que la aplicación de parches lleva mucho tiempo o es demasiado molesta? Eche un vistazo a la aplicación de parches automatizada y sin reinicios de KernelCare aquí.
