Detectaron varias vulnerabilidades en el Kernel de Linux
Hace poco se dio a conocer la noticia de que fueron detectadas varias vulnerabilidades catalogadas como peligrosas en el kernel de Linux y que permiten a un usuario local elevar sus privilegios en el sistema.
La primera de las vulnerabilidades es la CVE-2022-0995 y está presente en el subsistema de seguimiento de eventos «watch_queue» y esta provoca que los datos se escriban en un área de la memoria del kernel fuera del búfer asignado. El ataque puede ser llevado a cabo por cualquier usuario sin privilegios y hacer que su código se ejecute con privilegios de kernel.
La vulnerabilidad está presente en la función watch_queue_set_size() y está asociada con un intento de borrar todos los punteros de la lista, incluso si no se les ha asignado memoria. El problema se manifiesta al construir el kernel con la opción «CONFIG_WATCH_QUEUE=y», que es utilizada por la mayoría de las distribuciones de Linux.
Se menciona que la vulnerabilidad se solucionó en un cambio agregado al kernel el 11 de marzo.
La segunda vulnerabilidad que se dio a conocer es la CVE-2022-27666 que está presente en los módulos del kernel esp4 y esp6 que implementan transformaciones de carga útil de seguridad encapsulada (ESP) para IPsec que se usa cuando se usa IPv4 e IPv6.
La vulnerabilidad permite que un usuario local con privilegios normales sobrescriba objetos en la memoria del kernel y eleve sus privilegios en el sistema. El problema se debe a la falta de conciliación entre el tamaño de la memoria asignada y los datos realmente recibidos, dado que el tamaño máximo del mensaje podría exceder el tamaño máximo de la memoria asignada para la estructura skb_page_frag_refill.
Se menciona que la vulnerabilidad se corrigió en el kernel el 7 de marzo (corregido en 5.17, 5.16.15, etc.), ademas de que se ha publicado un prototipo funcional de un exploit que permite a un usuario normal obtener acceso de root en Ubuntu Desktop 21.10 en la configuración predeterminada en GitHub.
Se afirma que con cambios menores, el exploit también funcionará en Fedora y Debian. Cabe señalar que el exploit se preparó originalmente para la competencia pwn2own 2022, pero los desarrolladores del kernel identificaron y corrigieron el error asociado, por lo que se decidió revelar los detalles de la vulnerabilidad.
Otras de las vulnerabilidades que se dieron a conocer son las CVE-2022-1015 y CVE-2022-1016 en el subsistema netfilter en el módulo nf_tables que alimenta el filtro de paquetes nftables. El investigador que identificó los problemas anunció la preparación de exploits funcionales para ambas vulnerabilidades, que se planea publicar unos días después de que las distribuciones publiquen las actualizaciones de los paquetes del kernel.
El primer problema permite que un usuario local sin privilegios logre una escritura fuera de los límites en la pila. Se produce un desbordamiento en el procesamiento de expresiones de nftables bien formadas que se procesan durante la fase de validación de los índices proporcionados por un usuario que tiene acceso a las reglas de nftables.
La vulnerabilidad se debe al hecho de que los desarrolladores dieron a entender que el valor de «enum nft_registers reg» es de un byte, mientras que cuando se habilitan ciertas optimizaciones, el compilador, de acuerdo con la especificación C89, puede usar un valor de 32 bits para ello. Debido a esta peculiaridad, el tamaño utilizado para verificar y asignar memoria no se corresponde con el tamaño real de los datos en la estructura, lo que lleva a la imposición de la cola de la estructura en los punteros de la pila.
El problema se puede explotar para ejecutar código a nivel de kernel, pero un ataque exitoso requiere acceso a nftables.
Se pueden obtener en un espacio de nombres de red separado (espacios de nombres de red) con derechos CLONE_NEWUSER o CLONE_NEWNET (por ejemplo, si puede ejecutar un recipiente aislado). La vulnerabilidad también está estrechamente relacionada con las optimizaciones utilizadas por el compilador, que, por ejemplo, están habilitadas cuando se compila en el modo «CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y». La explotación de la vulnerabilidad es posible a partir del kernel de Linux 5.12.
La segunda vulnerabilidad en netfilter se produce al acceder a un área de memoria ya liberada (use-after-free) en el controlador nft_do_chain y puede provocar una fuga de áreas de memoria del núcleo no inicializadas que se pueden leer manipulando con expresiones nftables y usar, por ejemplo, para determinar las direcciones de puntero durante las explotaciones de desarrollo para otras vulnerabilidades. La explotación de la vulnerabilidad es posible a partir del kernel de Linux 5.13.
Las vulnerabilidades se corrigieron en las actualizaciones correctivas del Kernel que fueron liberadas hace poco.