Copy Fail — vulnerabilidad en el núcleo de Linux que permite obtener acceso root en la mayoría de las distribuciones

Investigadores de la compañía Xint han identificado una vulnerabilidad en el núcleo de Linux (CVE-2026-31431) que permite a un usuario no privilegiado obtener acceso root al sistema. La vulnerabilidad ha sido apodada Copy Fail. Se dispone de un prototipo del exploit. La posibilidad de explotar esta vulnerabilidad se ha demostrado en Ubuntu 24.04 LTS, Amazon Linux 2023, RHEL 10.1 y SUSE 16, aunque se ha señalado que los paquetes del núcleo de otras distribuciones, incluidos Debian, Arch, Fedora, Rocky y Alma, también son vulnerables, aunque no se han probado por separado.

La vulnerabilidad es causada por un error lógico en el API crypto (AF_ALG) del núcleo de Linux, introducido al realizar una optimización en 2017, que eliminó el exceso de buffering mediante la ejecución in-place de operaciones de cifrado de bloques AEAD (Cifrado Autenticado con Datos Asociados). El problema surgió debido al uso imprudente de la función splice(), que transfiere datos entre descriptores de archivos y pipes sin copiar, al pasar referencias a elementos en la caché de páginas. Después de la optimización, al enviar un archivo a un socket AF_ALG para su descifrado, se escribía en la estructura scatterlist no una referencia a un buffer separado, sino una referencia directa a los elementos de la caché de páginas del núcleo con los datos del archivo.

Durante el proceso de descifrado de AEAD, los datos de la etiqueta de autenticación ("authentication tag") se mezclaban con los datos autenticados que se copiaban al buffer RX (AAD, Datos Asociados Autenticados) y el texto cifrado, y el desplazamiento para la operación de escritura en la etiqueta de autenticación se calculaba en relación con los datos copiados sin las verificaciones adecuadas, lo que permitía sobrescribir áreas arbitrarias en la caché de páginas.

La vulnerabilidad permite sobrescribir 4 bytes en un desplazamiento seleccionado con cada solicitud, lo que permite al atacante, mediante el envío de una serie de solicitudes, alterar el contenido de cualquier archivo del sistema que sea legible, siempre que consiga que se coloque en la caché. Dado que en cualquier operación de lectura de archivos el contenido se devuelve en primer lugar desde la caché de páginas, después de reemplazar la información en la caché, el núcleo o el proceso al leer datos del archivo obtendrá datos alterados en lugar de los reales, lo que podría utilizarse para inyectar código en archivos ejecutables en ejecución o en bibliotecas compartidas que se cargan.

Para ejecutar código con privilegios de root, es suficiente cambiar la caché de la página para cualquier archivo ejecutable con el flag suid root.
En el exploit propuesto, se realiza una lectura del archivo ejecutable /usr/bin/su y se modifica el contenido de este archivo cargado en la caché de la página para insertar su propio código. Al ejecutar posteriormente la utilidad 'su', no se cargará en memoria el archivo ejecutable original desde el almacenamiento, sino una copia modificada de la caché de la página.

El exploit es universal, no requiere adaptación a distribuciones ni versiones del núcleo, y puede usarse con cualquier distribución. Dado que al utilizar aislamiento en contenedores todos los contenedores usan una caché de página compartida, la vulnerabilidad puede aprovecharse para obtener acceso al entorno host desde el contenedor (más adelante se promete publicar un exploit para eludir el aislamiento en Kubernetes).

La vulnerabilidad fue identificada con la ayuda de IA después de aproximadamente una hora de experimentación con el análisis del código del subsistema criptográfico del núcleo. El problema aparece a partir del núcleo Linux 4.14, lanzado en 2017, y fue corregido en los núcleos 6.18.22, 6.19.12 y 7.0. El estado de corrección de las vulnerabilidades en las distribuciones se puede evaluar en estas páginas: Debian, Ubuntu, SUSE/openSUSE, RHEL, Gentoo, Arch,
Fedora, ROSA.

Como una solución temporal, se puede desactivar el módulo del núcleo algif_aead, que se utiliza en OpenSSL cuando se activa explícitamente el motor afalg y en aplicaciones específicas (se puede verificar si hay aplicaciones así en ejecución con el comando 'lsof | grep AF_ALG'):

    echo 'install algif_aead /bin/false' > /etc/modprobe.d/disable-algif.conf
    rmmod algif_aead

    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