Investigador de seguridad Asim Manizada ha revelado una vulnerabilidad CIFSwitch — elevación de privilegios local en la combinación del núcleo de Linux y el paquete del usuario cifs-utils. El problema afecta la ruta de procesamiento CIFS/SMB Kerberos/SPNEGO upcall, es decir, el mecanismo a través del cual el cliente CIFS del núcleo solicita al helper del usuario datos para la autenticación Kerberos al montar recursos SMB. La descripción se publicó tras la expiración del embargo de linux-distros; el identificador CVE aún no había sido asignado en el momento de la publicación.
La esencia de la vulnerabilidad es, que un usuario no privilegiado podría invocar request_key("cifs.spnego", …) y proporcionar una descripción de clave falsa. En un escenario normal, esta línea debería ser generada por el propio cliente CIFS del núcleo: contiene información sobre el servidor, UID, credential UID, PID, el objetivo del upcall y otros parámetros. Sin embargo, el núcleo no verificó que la descripción realmente provenía de la subsistema CIFS, y cifs.upcall, ejecutado como root mediante la regla estándar request-key, confiaba en estos campos como datos generados por el núcleo.
La vulnerabilidad no es un «agujero en cualquier Linux de serie». Para la explotación deben coincidir varias condiciones: la presencia de un núcleo vulnerable, cifs-utils instalado con la regla cifs.spnego, la posibilidad de que usuarios no privilegiados creen espacios de nombres user/mount, así como la ausencia de bloqueo por parte de SELinux, AppArmor o alguna otra política LSM. En el mensaje de oss-security se indica específicamente que en sistemas vulnerables esto da un camino desde un usuario local no privilegiado a la ejecución de código como root.
Técnicamente la cadena se construye en torno a que, cifs.upcall puede moverse a los espacios de nombres indicados en la descripción falsa y ejecutar una consulta NSS hasta el restablecimiento final de privilegios. Como resultado, un entorno controlado por el atacante puede influir en la carga del módulo NSS por el proceso root. Las descripciones públicas enfatizan que se trata de un error lógico en la frontera entre el núcleo y el espacio de usuario, y no de una clásica vulnerabilidad de corrupción de memoria.
La corrección en el núcleo resultó ser pequeña en volumen: para el tipo de claves cifs.spnego se agregó una verificación que rechaza las descripciones no creadas por el propio cliente CIFS con sus credenciales privadas spnego_. Este enfoque cierra la clase de ataques sin cambios sincrónicos obligatorios en cifs-utils, aunque el autor señala que un refuerzo adicional del espacio de usuario sigue siendo deseable.
AlmaLinux informó, que la lógica básica está presente en todas las versiones compatibles de AlmaLinux, y AlmaLinux 8, 9, 10 y Kitten 10 se consideran afectados si se tiene instalado cifs-utils. Los núcleos parcheados se han preparado en los repositorios de testing: para AlmaLinux 9 se indica el paquete kernel-5.14.0-687.5.4.el9_8 o superior, para AlmaLinux 10 — kernel-6.12.0-211.7.4.el10_2 o superior.
Como medida temporal antes de instalar el núcleo corregido, se sugiere eliminar cifs-utils si no se utiliza el cliente SMB/CIFS en el sistema, prohibir la carga del módulo cifs, redefinir la regla cifs.spnego en request-key o desactivar los espacios de nombres de usuario no privilegiados. Estas soluciones alternativas pueden romper la autenticación Kerberos para las monturas CIFS, por lo que deben aplicarse con cuidado en servidores donde realmente se utilicen comparticiones SMB autenticadas por Kerberos.
CIFSwitch es interesante también por el contexto de detección: el autor la describe como el resultado de la búsqueda de cadenas de múltiples pasos utilizando LLM y una representación gráfica de las relaciones entre objetos de seguridad. Pero la conclusión práctica para los administradores es bastante terrenal: verificar la existencia de cifs-utils, el estado de los espacios de nombres de usuario y las actualizaciones del núcleo, especialmente en sistemas donde hay usuarios locales o scripts de contenedores con capacidades extendidas de namespace.
Fuente: linux.org.ru
