← Volver a artículos
Seguridad· 3 min de lectura

FreeBSD parchea una escalada de privilegios en el Linuxulator vía LD_PRELOAD (CVE-2026-49413)

FreeBSD publicó el 9 de junio de 2026 el aviso SA-26:30, que corrige una escalada de privilegios local en el Linuxulator, la capa de compatibilidad que permite ejecutar binarios de Linux directamente sobre el kernel de FreeBSD. El fallo tiene asignado CVE-2026-49413 y afecta a cualquier sistema que cargue el módulo de compatibilidad Linux y tenga binarios Linux con el bit setuid o setgid.

El problema está en cómo el Linuxulator decide si un proceso está corriendo con privilegios elevados durante execve(2). Para protegerse de inyecciones, el cargador dinámico de Linux ignora variables como LD_PRELOAD cuando el binario es setuid o setgid. Esa decisión depende del valor del flag AT_SECURE que el kernel coloca en el vector auxiliar que se pasa al nuevo programa. Si AT_SECURE vale 1, el loader entra en modo seguro y descarta LD_PRELOAD.

Aquí estaba el error. El Linuxulator comprobaba el flag de proceso P_SUGID para decidir el valor de AT_SECURE, pero ese flag todavía no se ha establecido en el momento en que se construye el vector auxiliar dentro de la secuencia de execve. La comprobación llegaba demasiado pronto, así que AT_SECURE acababa puesto a cero incluso para un binario setuid. Con el loader convencido de que el proceso no era privilegiado, LD_PRELOAD se respetaba con normalidad.

A partir de ahí el ataque es directo. Un usuario local sin privilegios apunta LD_PRELOAD a una librería compartida propia y lanza un binario Linux set-user-ID o set-group-ID. La librería se carga en el espacio del proceso ya con los privilegios del binario, normalmente root, y el atacante ejecuta su código con esos permisos. Es una escalada local clásica: no permite acceso remoto, pero convierte una cuenta de usuario común en control total del sistema.

A quién afecta

El aviso marca como vulnerables todas las versiones soportadas en las ramas stable/15, releng/15.1, releng/15.0, stable/14, releng/14.4 y releng/14.3. La condición práctica es doble: hace falta tener cargado el módulo del Linuxulator (linux.ko o linux64.ko) y disponer de al menos un binario Linux con setuid o setgid. Un FreeBSD sin la capa de compatibilidad Linux activa, o sin esos binarios, no está expuesto a este vector concreto.

La gravedad es alta dentro de su categoría. No es remota ni da por sí sola el primer acceso, pero en sistemas multiusuario o que ejecutan software Linux setuid bajo el Linuxulator (por ejemplo ciertos paquetes de compatibilidad) ofrece un camino limpio a root.

Mitigación y parche

La corrección retrasa la lectura del estado de privilegios hasta que P_SUGID ya está fijado, de modo que AT_SECURE refleja correctamente que el binario es setuid y el loader descarta LD_PRELOAD.

Para aplicar el parche en sistemas con FreeBSD compilado a partir de binarios oficiales:

freebsd-update fetch
freebsd-update install

Después reinicia para que el kernel parcheado entre en uso. Si compilas el kernel desde fuentes, aplica el parche oficial de SA-26:30 y recompila e instala el kernel siguiendo el procedimiento habitual. Como mitigación temporal, descargar el módulo del Linuxulator o retirar el bit setuid/setgid de los binarios Linux elimina la vía de explotación hasta que puedas parchear.

Si gestionas FreeBSD, conviene revisar el conjunto completo de avisos publicados ese mismo 9 de junio, ya que el proyecto liberó varios parches a la vez. Puedes consultar la ficha de FreeBSD para ver el resto de información del sistema.

Fuente