Se han descubierto dos vulnerabilidades en el núcleo de Linux, que son similares a la vulnerabilidad Copy Fail revelada hace algunos días, pero que se manifiestan en otros subsistemas: xfrm-ESP y RxRPC. Se les ha asignado el nombre en clave Dirty Frag (también se menciona Copy Fail 2). Estas vulnerabilidades permiten a un usuario sin privilegios obtener derechos de root al sobrescribir datos del proceso en la caché de páginas. Hay un exploit disponible que funciona en todas las distribuciones de Linux actuales. La información sobre la vulnerabilidad se ha filtrado antes de la publicación de las soluciones, pero hay un método alternativo para bloquear el problema.
Dirty Frag abarca dos vulnerabilidades diferentes: la primera en el módulo xfrm-ESP, utilizado para acelerar las operaciones de cifrado en IPsec usando el protocolo ESP (Encapsulating Security Payload), y la segunda en el controlador RxRPC, que implementa el conjunto de sockets AF_RXRPC y el protocolo RPC del mismo nombre que funciona sobre UDP. Cada una de las vulnerabilidades por separado permite obtener derechos de root. La vulnerabilidad en xfrm-ESP está presente en el núcleo de Linux desde enero de 2017, mientras que la vulnerabilidad en RxRPC está presente desde junio de 2023. Ambos problemas son causados por optimizaciones que permiten la escritura directa en la caché de páginas.
Para explotar la vulnerabilidad en xfrm-ESP, el usuario debe tener permisos para crear espacios de nombres, y para explotar la vulnerabilidad en RxRPC, debe tener la capacidad de cargar el módulo del núcleo rxrpc.ko. Por ejemplo, en Ubuntu, las reglas de AppArmor prohíben a un usuario sin privilegios crear espacios de nombres, pero por defecto se carga el módulo rxrpc.ko. En algunas distribuciones, el módulo rxrpc.ko está ausente, pero no se bloquea la creación de espacios de nombres. El investigador que descubrió el problema ha preparado un exploit combinado que puede atacar el sistema a través de ambas vulnerabilidades, lo que permite explotar el problema en todas las principales distribuciones. El funcionamiento del exploit ha sido confirmado en Ubuntu 24.04.4 con núcleo 6.17.0-23, RHEL 10.1 con núcleo 6.12.0-124.49.1, openSUSE Tumbleweed con núcleo 7.0.2-1, CentOS Stream 10 con núcleo 6.12.0-224, AlmaLinux 10 con núcleo 6.12.0-124.52.3 y Fedora 44 con núcleo 6.19.14-300.
Al igual que con la vulnerabilidad Copy Fail, los problemas en xfrm-ESP y RxRPC son causados por la ejecución de la descifrado de datos en el lugar utilizando la función splice(), que transfiere datos entre descriptores de archivos y tuberías (pipe) sin copiar, mediante la transmisión de referencias a elementos en la caché de página. Los desplazamientos para la operación de escritura se calcularon sin las debidas verificaciones, teniendo en cuenta el uso de referencias directas a elementos en la caché de página, lo que permitía, mediante el envío de solicitudes especialmente formateadas, sobrescribir 4 bytes en el desplazamiento elegido y cambiar el contenido de cualquier archivo en la caché de página.
Todas las operaciones de lectura de archivos primero devuelven el contenido de la caché de página. En caso de modificación de datos en la caché de página, las operaciones de lectura de archivos devolverán información que no está realmente almacenada en el dispositivo, sino datos sustituidos. La explotación de la vulnerabilidad se reduce a modificar la caché de página para un archivo ejecutable con el flag suid root. Por ejemplo, para obtener derechos de root, se puede leer el archivo ejecutable /usr/bin/su para colocarlo en la caché de página, después de lo cual se puede lograr la inserción de código propio en el contenido cargado en caché de este archivo. La posterior ejecución de la utilidad 'su' hará que se cargue en la memoria no el archivo ejecutivo original desde el dispositivo, sino una copia modificada de la caché de página.
La divulgación de información sobre vulnerabilidades y el lanzamiento coordinado de actualizaciones para resolver los problemas estaba programado para el 12 de mayo, pero debido a la filtración de información, los detalles sobre la vulnerabilidad tuvieron que publicarse antes de la publicación de las correcciones. A finales de abril, se publicaron parches para rxrpc, ipsec y xfrm en la lista de correo pública netdev, sin mencionar que estaban relacionados con la corrección de la vulnerabilidad. El 5 de mayo, el mantenedor del subsistema IPsec aceptó en el repositorio git de netdev un cambio con la solución propuesta en el módulo xfrm-esp, cuya descripción repetía en gran medida la descripción del problema que condujo a la vulnerabilidad Copy Fail en el módulo algif_aead. Uno de los investigadores de seguridad se interesó por esta corrección, logró crear un exploit funcional y lo publicó, sin saber que había un embargo sobre la divulgación de información sobre el problema antes del 12 de mayo.
Actualizaciones con correcciones para el núcleo de Linux y paquetes de núcleo en las distribuciones aún no se han publicado, pero están disponibles parches que solucionan problemas: xfrm-esp y rxrpc. No se han asignado identificadores CVE, lo que complica el seguimiento de las actualizaciones de paquetes en las distribuciones. Como una solución alternativa de protección, se pueden bloquear la carga de los módulos del núcleo esp4, esp6 y rxrpc: sh -c "printf 'install esp4 /bin/false\ninstall esp6 /bin/false\ninstall rxrpc /bin/false\n' > /etc/modprobe.d/dirtyfrag.conf; rmmod esp4 esp6 rxrpc 2>/dev/null; true"
Fuente: opennet.ru
