Osegi
Software·2 min de lectura

Ubuntu 26.04: una actualización del kernel rompe los contenedores

Un parche de seguridad del kernel de Ubuntu 26.04 cambia cómo AppArmor apila perfiles: los contenedores rechazan señales y gosu, PostgreSQL y Percona se bloquean.

Server rack with terminal output showing AppArmor denied signal errors from a container running on an Ubuntu host.
Imagen: Хабр

Una reciente actualización del kernel de Ubuntu 26.04 puede dejar fuera de servicio cargas de trabajo en contenedores sin previo aviso. Un ingeniero que se topó con el fallo al redimensionar un grupo de nodos de Kubernetes explica cómo una corrección de seguridad de AppArmor hace que los contenedores rechacen señales, incluso entre procesos del mismo usuario.

Qué ocurre

El problema afecta a Ubuntu 26.04 o a kernels con el backport desde 7.0.0-41, incluidas compilaciones en la nube como linux-aws y linux-azure. Requiere el parámetro kernel.apparmor_restrict_unprivileged_unconfined=1, que es el valor por defecto en 26.04, y containerd o Docker con el perfil AppArmor estándar. Eso abarca casi cualquier host con Kubernetes, k3s, RKE2 o Docker.

Los síntomas: Permission denied en kill dentro del contenedor pese a coincidir el uid y sin seccomp; gosu y otros binarios de Go que llaman a setuid consumen el 100 % de CPU sin registros ni arranque del servicio; PostgreSQL muestra «could not signal for checkpoint: Permission denied». El registro del kernel incluye apparmor="DENIED" operation="signal" con el peer cri-containerd.apparmor.d//&unconfined.

El autor lo detectó cuando varios pods de Percona Operator for MySQL (PXC) no arrancaban tras reiniciar los nodos. Como solución rápida, desactivó AppArmor en el recurso personalizado o envió la señal desde el nodo como root. Después, los pods de la aplicación quedaron bloqueados por gosu, lo que obligó a modificar un chart de Helm.

El mecanismo

Desde febrero de 2025 Ubuntu impide que un proceso unconfined sin CAP_MAC_OVERRIDE cambie de perfil sin más: el nuevo perfil se apila sobre unconfined. El commit 08c2f7c8d4b1 (CVE-2026-90231) cerró una vía de evasión y ahora fuerza ese apilado también en exec. Como runc elimina las capabilities antes del exec, cada contenedor con el perfil estándar se ejecuta bajo la etiqueta compuesta cri-containerd.apparmor.d//&unconfined (docker-default//&unconfined en Docker).

La plantilla de perfil de containerd solo permite señales y ptrace desde el nombre exacto cri-containerd.apparmor.d. La etiqueta compuesta no coincide, así que el kernel deniega señales incluso entre hilos del mismo contenedor.

Cronología y estado

El último kernel no afectado es el 7.0.0-38.38. La versión 7.0.0-42.42 llegó a resolute-updates y ese mismo día se abrieron informes de error y containerd#14485; hay una corrección del perfil propuesta en la PR #14487 de containerd. Al pasar a resolute-security, unattended-upgrades empezó a instalarla y surgieron caídas tras reiniciar nodos. La 7.0.0-43.43 mantiene los síntomas y la 7.0.0-44.44 está en proposed. Los informes difieren sobre si la primera versión defectuosa es la 7.0.0-41 o solo la -42.

Apps que merecen la pena

SUMO: el puzle de números

Toca las casillas correctas, suma y alcanza el objetivo. Fácil de aprender, difícil de dominar. Gratis, para todas las edades.

Etiquetas:ubuntuapparmorkubernetescontainerdlinux kerneldocker

Más de este día

Ver todas →

Más en: Software

Ver todas →