Encontraron vulnerabilidades en el subsistema eBPF que permiten la ejecución de código a nivel del kernel
Hace poco compartimos aquí en el blog la noticia sobre el interés que ha mostrado Microsoft sobre el subsistema eBPF, ya que ha construido un subsistema para Windows el cual utiliza el método de análisis estático de interpretación abstracta, que, en comparación con el verificador eBPF para Linux, demuestra una tasa de falsos positivos más baja, admite análisis de bucle y proporciona una buena escalabilidad.
El método tiene en cuenta muchos patrones de ejecución típicos obtenidos del análisis de programas eBPF existentes. Este subsistema eBPF se ha incluido en el kernel de Linux desde la versión 3.18 y permite procesar paquetes de red entrantes/salientes, reenviar paquetes, controlar el ancho de banda, interceptar llamadas al sistema, controlar el acceso y realizar el seguimiento.
Y es que hablando sobre ello, recientemente se dio a conocer que se han identificado dos nuevas vulnerabilidades en el subsistema eBPF, que permite ejecutar controladores dentro del kernel de Linux en una máquina virtual JIT especial.
Ambas vulnerabilidades brindan la oportunidad de ejecutar código con derechos de kernel, fuera de la máquina virtual eBPF aislada.
La información sobre los problemas fue publicada por el equipo Zero Day Initiative, que dirige la competencia Pwn2Own, durante la cual este año se demostraron tres ataques a Ubuntu Linux, en los que se utilizaron vulnerabilidades previamente desconocidas (si las vulnerabilidades en el eBPF están relacionadas con estos ataques no se informa).
Se descubrió que el seguimiento de límites de eBPF ALU32 para operaciones bit a bit (Y, O y XOR) no se actualizó los límites de 32 bits.
Manfred Paul (@_manfp) del equipo RedRocket CTF (@redrocket_ctf) trabajando con la iniciativa Zero Day de Trend Micro descubrió que esta vulnerabilidad se podría convertir en lecturas y escrituras fuera de los límites en el kernel. Esto ha sido reportado como ZDI-CAN-13590 y asignado CVE-2021-3490.
- CVE-2021-3490: la vulnerabilidad se debe a la falta de verificación fuera de límites para valores de 32 bits al realizar operaciones AND, OR y XOR bit a bit en eBPF ALU32. Un atacante puede aprovechar este error para leer y escribir datos fuera de los límites del búfer asignado. El problema con las operaciones XOR ha estado presente desde el kernel 5.7-rc1, y AND y OR desde 5.10-rc1.
- CVE-2021-3489: la vulnerabilidad es causada por un error en la implementación del búfer de anillo y está relacionada con el hecho de que la función bpf_ringbuf_reserve no verificó la posibilidad de que el tamaño del área de memoria asignada sea menor que el tamaño real del búfer ringbuf. El problema ha sido evidente desde el lanzamiento de 5.8-rc1.
Además, también podemos observar otra vulnerabilidad en el kernel de Linux: CVE-2021-32606, que permite a un usuario local elevar sus privilegios al nivel root. El problema se manifiesta desde el kernel de Linux 5.11 y es causado por una condición de carrera en la implementación del protocolo CAN ISOTP, que hace posible cambiar los parámetros de enlace al socket debido a la falta de configuración de los bloqueos adecuados en isotp_setsockopt( ) cuando se procesa la bandera CAN_ISOTP_SF_BROADCAST.
Una vez que se cierra el socket, ISOTP continúa enlazándose con el socket del receptor, que puede continuar usando las estructuras asociadas con el socket después de que se libera la memoria asociada (use-after-free debido a la llamada a la estructura isotp_sock ya liberada al llamar isotp_rcv (). Mediante la manipulación de datos, puede anular el puntero a la función sk_error_report() y ejecutar su código a nivel del kernel.
El estado de la reparación de las vulnerabilidades en las distribuciones se puede rastrear en estas páginas: Ubuntu, Debian, RHEL, Fedora, SUSE, Arch).
Las correcciones también están disponibles como parches (CVE-2021-3489 y CVE-2021-3490). La explotación del problema depende de la disponibilidad de la llamada al sistema eBPF para el usuario. Por ejemplo, en la configuración predeterminada en RHEL, la explotación de la vulnerabilidad requiere que el usuario tenga privilegios CAP_SYS_ADMIN.
Finalmente si deseas conocer más al respecto, puedes consultar los detalles en el siguiente enlace.