# CVE-2026-23111: un solo carácter en nf_tables abre la puerta a root en Linux

- **Publicado el:** 2026-02-05
- **Categoría:** Seguridad
- **Página original:** https://linuxgratis.com/articulos/cve-2026-23111-nf-tables-privesc-root-kernel-linux

Una condición invertida en nft_map_catchall_activate() del kernel Linux provoca un use-after-free explotable para escalar de usuario sin privilegios a root. Te explicamos a quién afecta, su gravedad y cómo mitigarlo.

---

El subsistema **netfilter nf_tables** del kernel Linux se encarga del filtrado de paquetes y es lo que hay debajo de `nftables`. Acaba de sumar otro fallo serio: **CVE-2026-23111**, un *use-after-free* (uso de memoria ya liberada) con el que un usuario local sin privilegios escala hasta **root**. Lo llamativo es que el error nace y se arregla con **un único carácter** de código.

## Qué es la vulnerabilidad

El bug está en la función `nft_map_catchall_activate()`, dentro del fichero `net/netfilter/nf_tables_api.c`. Cuando se aborta una transacción de nftables, esa función arrastra una **condición invertida**: procesa los elementos *activos* y se salta los inactivos. Es justo al revés de lo que hace la función correcta, `nft_mapelem_activate()`.

El efecto es discreto, pero peligroso. Al abortar una operación `DELSET`, ya no se vuelve a llamar a `nft_setelem_data_activate()` para el elemento *catchall*. Con elementos de veredicto `NFT_GOTO`, eso significa que nunca se restaura el contador de referencias `chain->use`. **Cada ciclo de aborto decrementa ese contador de forma permanente.** Cuando `chain->use` llega a cero, una operación `DELCHAIN` libera la cadena mientras los elementos catchall siguen apuntando a ella, y ahí aparece el use-after-free.

A partir de ahí, un atacante puede filtrar la dirección base del kernel, luego una dirección de heap y, por último, lanzar una cadena ROP que pivota sobre objetos `msg_msg` hasta hacerse con privilegios de root.

## A quién afecta

El fallo toca muchas ramas del kernel Linux: desde la serie 5.4 hasta la **6.18.10**, pasando por 5.10, 5.15, 6.1, 6.6 y 6.12. En la práctica los sistemas vulnerables son los que llevan activadas `CONFIG_USER_NS` (espacios de nombres de usuario) y `CONFIG_NF_TABLES`, algo habitual tanto en escritorios como en servidores. La explotación se ha demostrado en **Debian Bookworm, Debian Trixie, Ubuntu 22.04 LTS y Ubuntu 24.04 LTS**.

Esto pesa porque los espacios de nombres de usuario dejan que alguien sin privilegios manipule nftables dentro de su propio namespace. Cae así la barrera clásica de "necesitas ser root para tocar netfilter".

## Gravedad

El **CVSS 3.1 es 7.8 (alta)**, con vector `AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H`. Hace falta acceso local y privilegios bajos, sin que el usuario tenga que hacer nada. El riesgo real sube porque, después de publicarse el parche el 5 de febrero de 2026, salieron **exploits funcionales públicos** y pruebas de concepto que reproducen la escalada a root sin fallar.

## Mitigación y parche

El parche *upstream*, aplicado el 5 de febrero de 2026, se reduce literalmente a **quitar un signo de negación (`!`)** para que la comprobación cuadre con `nft_mapelem_activate()`: saltarse los elementos activos y procesar los inactivos.

Qué hacer ya:

- **Actualiza el kernel** a una versión parcheada (por ejemplo 5.10.249, 6.1.162, 6.6.122 o 6.12.71 o posteriores) y reinicia.
- Si no puedes parchear ahora mismo, **desactiva los espacios de nombres de usuario no privilegiados** cuando no los uses: `sysctl -w kernel.unprivileged_userns_clone=0` (en kernels Debian/Ubuntu) o `sysctl -w user.max_user_namespaces=0`.
- Plantéate cargar módulos de seguridad como SELinux o AppArmor para recortar la superficie de ataque de procesos comprometidos.

Como esta vulnerabilidad se apoya en los espacios de nombres de usuario, viene bien conocer esa tecnología en nuestro artículo sobre [namespaces y cgroups](/articulos/namespaces-y-cgroups-kernel), y apuntalar la contención de procesos con [SELinux y AppArmor](/articulos/selinux-y-apparmor).

Tienes la ficha del componente afectado en [/linux-kernel](/linux-kernel).

## Fuente

- NVD - NIST: [https://nvd.nist.gov/vuln/detail/CVE-2026-23111](https://nvd.nist.gov/vuln/detail/CVE-2026-23111)
