Vulnerabilidad en el núcleo de Linux que afecta al protocolo de red CAN BCM.

Se ha detectado una vulnerabilidad en el núcleo de Linux (CVE-2021-3609) que permite a un usuario local elevar sus privilegios en el sistema. El problema es causado por una condición de carrera en la implementación del protocolo CAN BCM y se manifiesta en las versiones del núcleo de Linux desde 2.6.25 hasta 5.13-rc6. En las distribuciones, el problema aún no se ha corregido (RHEL, Fedora, Debian, Ubuntu, SUSE, Arch).

El investigador que identificó la vulnerabilidad logró preparar un exploit para obtener derechos de root en sistemas con núcleos Linux 5.4 y versiones más recientes, demostrando la posibilidad de llevar a cabo un ataque exitoso en Ubuntu 20.04.02 LTS. No se descarta la posibilidad de modificar el exploit para que funcione con núcleos más antiguos (en el núcleo 5.4, el código CAN BCM (net/can/bcm.c) fue trasladado de hrtimer_tasklet a HRTIMER_MODE_SOFT).

El protocolo CAN BCM permite registrar un manejador de mensajes propio que recibe mensajes a través del bus CAN (controller area network) y asociarlo a un socket de red específico. Cuando se recibe un mensaje entrante, se invoca la función bcm_rx_handler(). El atacante puede aprovechar la condición de carrera y lograr el cierre del socket de red al mismo tiempo que se ejecuta bcm_rx_handler(). Al cerrarse el socket, se llama a la función bcm_release(), en la cual se libera la memoria asignada para las estructuras bcm_op y bcm_sock, que continúan utilizándose en el manejador bcm_rx_handler() aún en ejecución. Se genera una situación que conduce a un acceso a un bloque de memoria ya liberado (use-after-free).

El ataque consiste en abrir dos sockets CAN BCM y asociarlos a la interfaz vcan. En el primer socket se llama a sendmsg() con la bandera RX_SETUP para configurar el manejador de mensajes entrantes de CAN, y en el segundo socket se realiza una llamada a sendmsg() para enviar un mensaje al primer socket. Tras la llegada del mensaje, se activa la llamada a bcm_rx_handler(), y el atacante elige el momento adecuado para cerrar el primer socket, lo que provoca la ejecución de bcm_release() y la liberación de las estructuras bcm_op y bcm_sock, aunque el trabajo de bcm_rx_handler() aún no ha finalizado.

A través de manipulaciones con el contenido bcm_sock, un atacante puede redefinir el puntero a la función sk->sk_data_ready(sk), redirigir la ejecución y, utilizando técnicas de programación orientada a retorno (ROP — Return-Oriented Programming), organizar la reescritura del parámetro modprobe_path y lograr la ejecución de su código con privilegios de root. Al utilizar la técnica ROP, el atacante no intenta colocar su código en la memoria, sino que opera con fragmentos de instrucciones de máquina ya existentes en las bibliotecas cargadas, que terminan con una instrucción de retorno (generalmente, esto son finalizaciones de funciones de biblioteca). El trabajo del exploit se reduce a construir una cadena de llamadas a bloques similares (

Vulnerabilidad en el núcleo de Linux que afecta al protocolo de red CAN BCM.

Para realizar el ataque se requiere acceso para crear sockets CAN y una interfaz de red vcan configurada. Los permisos necesarios para llevar a cabo el ataque pueden ser obtenidos por un usuario no privilegiado en contenedores creados en sistemas con el soporte activado para espacios de nombres de identificadores de usuario (user namespaces). Por ejemplo, los espacios de nombres de usuario están habilitados por defecto en Ubuntu y Fedora, pero no están activados en Debian y RHEL.

Fuente: opennet.ru

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster