Una vulnerabilidad recientemente descubierta, CVE-2024-53141, en el marco de conjuntos de IP del kernel de Linux ha expuesto una falla de seguridad crítica que permite a los atacantes locales escalar privilegios y potencialmente obtener acceso de root.
La vulnerabilidad, a la que se le asignó una puntuación CVSS de 7,8, descubierta por los investigadores st424204 y d4em0n, afecta específicamente al tipo de conjunto bitmap:ip dentro del subsistema netfilter.
La falla surge del manejo inadecuado de los parámetros IPSET_ATTR_CIDR cuando TB[IPSET_ATTR_IP_TO] no está presente.
«Cuando tb[IPSET_ATTR_IP_TO] no está presente pero tb[IPSET_ATTR_CIDR] existe, los valores de ip e ip_to se intercambian ligeramente. Por lo tanto, la verificación del rango de ip debe realizarse más tarde, pero falta esta parte», explica el aviso de seguridad de Ubuntu.
Las implicaciones de seguridad son graves. La cadena de exploits documentada en el repositorio de los investigadores demuestra cómo los atacantes pueden aprovechar esta falla para lograr:
- Acceso de escritura fuera de límites al montón del kernel, lo que permite la fuga de direcciones.
- Escritura de valores arbitrarios fuera de los límites de memoria asignados.
- Conversión de condiciones fuera de límites en vulnerabilidades de uso después de la liberación.
- Omisión de aleatorización del diseño del espacio de direcciones del kernel (KASLR).
- Redirección del flujo de ejecución del kernel al código controlado por el atacante.
El código de explotación apunta específicamente a la implementación de bitmap_ip en net/netfilter/ipset/ip_set_bitmap_ip.c, donde la vulnerabilidad ocurre en llamadas a funciones como ip_to_id, que pueden manipularse para devolver valores muy fuera de los rangos de memoria asignados.
El exploit PoC aprovecha varias primitivas avanzadas:
- Fuga de direcciones de montón: Al explotar la extensión de comentarios en ip_set_init_comment, los atacantes pueden filtrar direcciones de montón del kernel de fragmentos de memoria adyacentes.
- Escritura OOB arbitraria: Utilizando la extensión del contador en ip_set_init_counter, los atacantes pueden escribir valores controlados fuera de los límites asignados.
- Uso después de la liberación: Al manipular las estructuras msg_msgseg, las escrituras OOB se convierten en UAF, lo que permite una mayor explotación.
- Omisión de KASLR: El exploit utiliza dispersión de montón y reasignación de objetos para filtrar direcciones de texto del kernel y anular la aleatorización del diseño del espacio de direcciones del kernel.
- Control RIP y ejecución de la cadena ROP: Mediante una manipulación precisa del montón, el atacante obtiene el control del puntero de instrucción (RIP), redirigiendo la ejecución a una cadena ROP diseñada que sobrescribe la variable del kernel core_pattern y, en última instancia, genera un shell raíz.
La vulnerabilidad afecta a las versiones del kernel desde 2.6.39 hasta versiones anteriores a 4.19.325, 6.6.64, 6.11.11 y 6.12.2. El código de explotación en el repositorio apunta específicamente al kernel de Linux 6.6.62.
Los expertos en seguridad recomiendan la aplicación inmediata de parches como la mitigación más eficaz. La solución, que agrega comprobaciones de rango adecuadas a la función bitmap_ip_uadt, se incorporó a los kernels de Linux 4.19.325, 6.6.64, 6.11.11, 6.12.2 y posteriores.
«Esta vulnerabilidad proporciona a los actores de amenazas una poderosa cadena de explotación que, en última instancia, puede conducir a una escalada de privilegios, eludir KASLR y la ejecución completa de código a nivel de kernel», se lee en el aviso de seguridad.
Se recomienda a los administradores de sistemas que actualicen los sistemas afectados de inmediato, ya que la disponibilidad pública del código de explotación aumenta significativamente la probabilidad de ataques dirigidos a sistemas sin parches.