Osegi
Logiciels·2 min de lecture

Ubuntu 26.04 : une mise à jour du noyau casse les conteneurs

Un correctif de sécurité du noyau Ubuntu 26.04 modifie l'empilement des profils AppArmor : les conteneurs refusent les signaux et gosu, PostgreSQL ou Percona se bloquent.

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

Une récente mise à jour du noyau d'Ubuntu 26.04 peut interrompre sans prévenir des services conteneurisés. Un ingénieur confronté au problème en redimensionnant un groupe de nœuds Kubernetes explique comment un correctif de sécurité d'AppArmor pousse les conteneurs à rejeter des signaux, même entre processus du même utilisateur.

Les symptômes

Sont concernés Ubuntu 26.04 ou les noyaux intégrant le rétroportage à partir de 7.0.0-41, y compris les builds cloud comme linux-aws et linux-azure. Il faut aussi le paramètre kernel.apparmor_restrict_unprivileged_unconfined=1, activé par défaut en 26.04, et containerd ou Docker avec le profil AppArmor standard : autrement dit presque tout hôte Kubernetes, k3s, RKE2 ou Docker.

On observe un Permission denied sur kill dans le conteneur malgré un uid identique et sans seccomp ; gosu et les binaires Go appelant setuid tournent à 100 % de CPU sans journaux ni démarrage du service ; PostgreSQL signale « could not signal for checkpoint: Permission denied ». Le journal du noyau affiche apparmor="DENIED" operation="signal" avec le pair cri-containerd.apparmor.d//&unconfined.

L'auteur l'a découvert quand plusieurs pods Percona Operator for MySQL (PXC) ne redémarraient pas après le redémarrage des nœuds. Une solution rapide consiste à désactiver AppArmor dans la ressource personnalisée, ou à envoyer le signal depuis le nœud en root. Les pods applicatifs sont ensuite restés bloqués à cause de gosu, ce qui a imposé de modifier un chart Helm.

Le mécanisme

Depuis février 2025, Ubuntu empêche un processus unconfined sans CAP_MAC_OVERRIDE de simplement changer de profil : le nouveau profil est empilé au-dessus d'unconfined. Le commit 08c2f7c8d4b1 (CVE-2026-90231) a corrigé un contournement et impose désormais cet empilement aussi lors de l'exec. Comme runc abandonne les capabilities avant l'exec, tout conteneur au profil standard s'exécute sous l'étiquette composite cri-containerd.apparmor.d//&unconfined (docker-default//&unconfined avec Docker).

Le modèle de profil de containerd n'autorise signaux et ptrace que depuis le nom exact cri-containerd.apparmor.d. L'étiquette composite n'y correspond pas : le noyau refuse donc les signaux, même entre threads d'un même conteneur.

Chronologie et état

Le dernier noyau épargné est le 7.0.0-38.38. La version 7.0.0-42.42 est arrivée dans resolute-updates, avec l'ouverture le même jour de rapports de bogue et de containerd#14485 ; un correctif de profil est proposé dans la PR containerd #14487. Lorsque la 7.0.0-42.42 est passée dans resolute-security, unattended-upgrades l'a installée, d'où des pannes après redémarrage des nœuds. La 7.0.0-43.43 conserve les symptômes ; la 7.0.0-44.44 est en proposed. Les rapports divergent : la première version fautive serait la 7.0.0-41 ou seulement la -42.

Des apps à découvrir

SUMO : le puzzle de nombres

Touche les bonnes cases, additionne, atteins l'objectif. Facile à apprendre, difficile à maîtriser. Gratuit, pour tous les âges.

Mots-clés:ubuntuapparmorkubernetescontainerdlinux kerneldocker

Plus d'actus de ce jour

Tout voir →

Plus dans: Logiciels

Tout voir →