Se ha descubierto una vulnerabilidad en el núcleo de Linux, similar a las vulnerabilidades Copy Fail, Dirty Frag y Fragnesia, que permite a un usuario no privilegiado obtener derechos de root al sobrescribir datos en la caché de páginas. La vulnerabilidad ha sido apodada DirtyDecrypt (el problema también se menciona como DirtyCBC). Se encuentra disponible un prototipo de exploit.
No se menciona el identificador CVE en la nota del exploit, solo se indica que los investigadores identificaron el problema el 9 de mayo, después de lo cual informaron a los desarrolladores del núcleo, quienes respondieron que su hallazgo duplicaba otro informe sobre una vulnerabilidad ya corregida. Dado que el parche con la corrección ya se ha incluido en el núcleo, los investigadores decidieron publicar el exploit que desarrollaron. Según la descripción del exploit, este utiliza la vulnerabilidad CVE-2026-31635, cuya corrección fue aceptada en el núcleo en abril y se incluyó en la versión 7.0.0, lanzada el 18 de abril como parte de la versión 6.18.23. El problema se manifiesta a partir del núcleo 6.16.
Al igual que en la serie de vulnerabilidades Dirty Frag, la nueva vulnerabilidad está presente en el controlador RxRPC, que implementa la familia de sockets AF_RXRPC y el protocolo RPC del mismo nombre, que funciona sobre UDP. El problema es causado por un error en la verificación del tamaño de los datos en la función rxgk_verify_response(): en lugar de comprobar «if (auth_len > len)», el código verifica «if (auth_len < len)», lo que lleva a que se pasen a la función rxgk_decrypt_skb() datos con un tamaño mayor del permitido. Al ejecutar la función rxgk_decrypt_skb(), la desencriptación de los datos se realiza inyectando cambios directamente en la caché de páginas para evitar un almacenamiento en búfer innecesario. Debido a la incorrecta verificación del tamaño, se abría la posibilidad de sobrescribir datos en la caché de páginas en un desplazamiento elegido.
La explotación de la vulnerabilidad se reduce a leer un archivo de programa con el flag suid root (para que se mantenga en la caché de páginas) y reemplazar en la caché de páginas parte del código del programa con un código para ejecutar /usr/bin/sh. La posterior ejecución del programa hará que se cargue en memoria no el archivo ejecutable original desde el almacenamiento, sino una copia modificada de la caché de páginas. Como programas suid, el exploit prevé el uso de «/usr/bin/su», «/bin/su», «/usr/bin/mount», «/usr/bin/passwd» y «/usr/bin/chsh».
Para explotar la vulnerabilidad, debe estar activada la opción CONFIG_RXGK en la construcción del núcleo, y el módulo del núcleo rxrpc.ko debe estar disponible para el arranque automático (en algunos sistemas no se compila). El estado de la corrección de vulnerabilidades en las distribuciones se puede evaluar en las siguientes páginas: Debian, Ubuntu, SUSE/openSUSE, RHEL, Arch, Fedora. Como solución alternativa de protección, se puede bloquear la carga del módulo del núcleo rxrpc:
sh -c «printf 'install rxrpc /bin/false\n' > /etc/modprobe.d/dirtydecrypt.conf; rmmod rxrpc 2>/dev/null; true»
Además, se puede mencionar la publicación en la lista de correo de los desarrolladores del núcleo de Linux de parches que deshabilitan completamente las optimizaciones en el API crypto (AF_ALG) que utilizan acceso directo a la caché de páginas durante la descifrado con los algoritmos 'skcipher' y 'aead'. Las optimizaciones eliminan el almacenamiento en búfer innecesario de datos, pero crean riesgos de vulnerabilidades graves. Se supone que su desactivación solo resultará en una disminución insignificante del rendimiento debido a la operación adicional de copia a un búfer separado. Los parches han sido aceptados por el mantenedor del subsistema crypto API e incluidos en la rama 'cryptodev', donde se desarrollan las capacidades para su inclusión en futuras versiones principales del núcleo de Linux.
Fuente: opennet.ru
