En Netfilter, el subsistema del núcleo de Linux utilizado para filtrar y modificar paquetes de red, se ha detectado una vulnerabilidad (CVE-2024-1086) que permite a un usuario local ejecutar código a nivel de núcleo y elevar sus privilegios en el sistema. El problema es causado por una liberación de memoria doble (double-free) en el módulo nf_tables, que gestiona el filtrado de paquetes de nftables. El investigador de seguridad que descubrió la vulnerabilidad desarrolló y publicó un prototipo funcional del exploit.
El funcionamiento del exploit se ha demostrado en las versiones actuales de Debian y Ubuntu con núcleos de Linux desde 5.14 hasta 6.6, así como en un entorno con el núcleo KernelCTF (Capture the Flag), que incluye parches adicionales para bloquear métodos típicos de funcionamiento de exploits y que es utilizado por Google en su programa de recompensas por la detección de vulnerabilidades. La tasa de éxito del exploit se estima en un 99.4%. En el artículo acompaña, se detalla el proceso de creación de un complejo exploit de múltiples niveles y de cómo eludir los mecanismos de protección y respuesta contra exploits presentes en el núcleo.

El problema está relacionado con un error en la función nft_verdict_init(), que permite el uso de valores positivos como código de error para descartar paquetes (DROP) en hooks, lo que puede ser utilizado para invocar en la función nf_hook_slow() una operación de liberación de memoria repetida para un buffer que ya había sido liberado mediante la función free(). El problema surge cuando la operación NF_DROP se forma incorrectamente y el núcleo inicialmente interpreta NF_DROP, pero luego libera el buffer y retorna el estado NF_ACCEPT. Esta situación conduce a que, a pesar de la liberación del buffer asociado al paquete, su procesamiento no se detiene, sino que es pasado a otro manejador, que a su vez invoca la función de liberación de memoria por segunda vez.
La vulnerabilidad se manifiesta a partir de la versión 3.15 del núcleo de Linux, pero el exploit funciona con núcleos a partir de la versión 5.14. La corrección de la vulnerabilidad se ha propuesto en la versión 6.8-rc1 del núcleo de Linux y a finales de febrero se migró a las ramas estables 5.15.149, 6.1.76 y 6.6.15. En las distribuciones, se puede seguir la corrección de la vulnerabilidad en las páginas: Debian, Ubuntu, Gentoo, RHEL, SUSE, Fedora, Arch.
Adicionalmente, se puede destacar una serie de vulnerabilidades en el módulo ksmbd, que ofrece una implementación de archivos integrado en el núcleo de Linux. servidores basado en el protocolo SMB: La vulnerabilidad CVE-2024-26592 permite la ejecución remota de código con privilegios de núcleo en sistemas con el módulo ksmbd activado sin pasar por autenticación. El problema es causado por una condición de carrera en el código que maneja las conexiones TCP, que ocurre debido a la falta de bloqueos adecuados al trabajar con el objeto.
La vulnerabilidad CVE-2023-52440 también permite la ejecución remota de código con privilegios de núcleo, pero es provocada por un desbordamiento de búfer al procesar claves de sesión incorrectas debido a la falta de una adecuada verificación del tamaño de los datos recibidos del usuario antes de copiarlos en un búfer de tamaño fijo.
Las vulnerabilidades (1, 2, 3) CVE-2024-26594, CVE-2023-52442 y CVE-2023-52441 en ksmbd permiten determinar el contenido de la memoria del núcleo de manera remota sin autenticación. La vulnerabilidad CVE-2024-26594 se debe a una verificación incorrecta de los datos al procesar los tokens SMB2 Mech recibidos, lo que resulta en la devolución de datos fuera del límite del búfer. La vulnerabilidad CVE-2023-52442 se debe a la falta de verificación adecuada de los datos de entrada al procesar solicitudes encadenadas. La vulnerabilidad CVE-2023-52441 se debe a la falta de una verificación necesaria de los datos de entrada al procesar solicitudes de negociación de conexiones SMB2.
Las vulnerabilidades CVE-2024-26594 y CVE-2024-26592 han sido solucionadas en el núcleo 6.8 y en las actualizaciones del pasado de las ramas estables 6.1.75, 6.6.14, 6.7.2. Otras vulnerabilidades han sido solucionadas en el núcleo 6.5 y en las actualizaciones 5.15.145, 6.1.53, 6.4.16.
En conclusión, se puede mencionar la activación de un nuevo equipo de desarrolladores del núcleo de Linux, creado para analizar la existencia de vulnerabilidades y evaluar la relación de las correcciones realizadas en el núcleo con los problemas de seguridad. En febrero, los desarrolladores del núcleo establecieron su propio servicio CNA (CVE Numbering Authority), que obtuvo la autoridad para asignar de manera independiente identificadores CVE a las vulnerabilidades. Antes de esto, la asignación de CVE y el análisis de la relación de las correcciones con posibles vulnerabilidades recaían en los desarrolladores de distribuciones, y en el núcleo, las posibles vulnerabilidades no se destacaban y figuraban junto con correcciones comunes. Los resultados del trabajo de este nuevo servicio han superado todas las expectativas: diariamente, se marcan hasta varias decenas de nuevas vulnerabilidades en el núcleo que anteriormente no se habían etiquetado como problemas de seguridad. Por ejemplo, el 26 de marzo, se asignaron nuevos identificadores CVE a 14 vulnerabilidades que anteriormente no se consideraban problemas de seguridad, y el 25 de marzo, a 41 vulnerabilidades.
Fuente: opennet.ru
