CVE-2026-46331 Pedit COW, faille d'élévation de privilèges locale dans le noyau Linux (act_pedit)

CVE-2026-46331, surnommée « Pedit COW », est une vulnérabilité d’écriture hors limites (out-of-bounds write) dans le sous-système traffic-control (tc) du noyau Linux, plus précisément dans l’action act_pedit. Elle permet à un utilisateur local non privilégié d’obtenir un accès root complet. Publiée le 16 juin 2026, elle a vu apparaître un PoC fonctionnel sur GitHub en moins de 24 heures.

Résumé technique

La faille réside dans la fonction tcf_pedit_act() du fichier net/sched/act_pedit.c. Cette fonction calcule la plage de copy-on-write (COW) pour skb_ensure_writable() une seule fois, avant la boucle de traitement des clés, en s’appuyant sur la valeur tcfp_off_max_hint.

Le problème : ce « hint » ne prend pas en compte le décalage d’en-tête (header offset) ajouté au moment de l’exécution par les clés typées. Une partie de la zone d’écriture peut donc rester non « COW-ée ». L’attaquant peut ainsi écrire en dehors de la limite copy-on-write prévue et corrompre des données dans la mémoire partagée du page cache.

Le caractère particulièrement dangereux de cette faille tient à un point : l’attaque cible le cache mémoire du système et non les fichiers réellement stockés sur disque. Les contrôles d’intégrité de fichiers traditionnels (AIDE, Tripwire, etc.) sont donc inopérants face à ce vecteur.

CaractéristiqueDétail
IdentifiantCVE-2026-46331
SurnomPedit COW
ComposantNoyau Linux — net/sched/act_pedit.c (sous-système tc)
TypeÉcriture hors limites → élévation de privilèges locale (LPE)
ImpactAccès root pour un utilisateur local non privilégié
Date de publication16 juin 2026
PrérequisCAP_NET_ADMIN (obtenable via user namespaces non privilégiés)

Distributions et versions impactées

La vulnérabilité touche un très large éventail de branches du noyau, depuis la 4.19 jusqu’aux versions récentes tant qu’elles ne sont pas patchées.

DistributionVersions concernéesStatut
Debian11 (Bullseye), 12 (Bookworm), 13 (Trixie)Vulnérable — correctif disponible pour Trixie
Ubuntu18.04 → 26.04Vulnérable — 26.04 dispose d’une mitigation AppArmor
RHEL8, 9, 10Affecté (ainsi que RHOSP, RHV et RHEL CoreOS)

Côté branches du noyau amont, sont notamment concernées : 4.19.244+, 5.4.195+, 5.10.117+, 5.15.41+, 5.17.9+, ainsi que la 5.18 et ultérieures tant que le correctif n’est pas appliqué.

Preuve de concept (PoC) pas à pas

Un PoC public surnommé packet_edit_meme a été publié sur GitHub moins de 24 heures après l’assignation de la CVE. La chaîne d’exploitation suit la logique ci-dessous. Elle est présentée à des fins pédagogiques et défensives uniquement.

  1. Obtenir CAP_NET_ADMIN — L’attaquant crée un user namespace non privilégié, ce qui lui octroie la capability CAP_NET_ADMIN à l’intérieur de ce namespace sans nécessiter de droits root réels.
    unshare -Ur (ou via clone() avec CLONE_NEWUSER | CLONE_NEWNET).
  2. Charger le module act_pedit — La simple configuration d’une règle tc pedit déclenche généralement le chargement automatique du module.
  3. Configurer une action pedit via tc — Mise en place d’un qdisc puis d’un filtre avec une action pedit utilisant des clés typées (ex. décalages d’en-tête TCP/UDP) afin de provoquer un off_max_hint sous-évalué par rapport au décalage runtime réel.
    tc qdisc add dev lo clsact
    tc filter add dev lo egress matchall action pedit ex munge ...
  4. Cibler la copie en cache d’un binaire setuid — L’attaquant vise la version cachée en mémoire d’un binaire setuid-root, typiquement /bin/su ou /usr/bin/sudo.
  5. Déclencher l’écriture hors limites — En faisant transiter un paquet forgé à travers la règle pedit, l’écriture déborde de la plage COW et corrompt la page du page cache correspondant au binaire visé, y injectant du shellcode ou modifiant son comportement.
  6. Exécuter le binaire empoisonné — L’exécution du binaire setuid compromis fournit un shell root, le tout sans jamais modifier le fichier sur disque.

Correctifs et atténuations

L’installation d’un noyau corrigé suivie d’un redémarrage est la seule solution complète. Le correctif déplace la vérification d’écriture (skb_ensure_writable()) à l’intérieur de la boucle par clé et ajoute une protection contre les débordements d’entier sur le calcul de l’offset.

Atténuations temporaires (en attendant le patch)

  • Blacklister le module act_pedit si votre environnement n’utilise pas de règles tc pedit :
    echo "install act_pedit /bin/true" > /etc/modprobe.d/disable-act_pedit.conf
  • Désactiver les user namespaces non privilégiés (coupe le vecteur d’obtention de CAP_NET_ADMIN) :
    sysctl -w kernel.unprivileged_userns_clone=0 (Debian/Ubuntu)
    ou sysctl -w user.max_user_namespaces=0.
  • Vérifier l’impact de ces mesures sur vos conteneurs (Docker, LXC) qui peuvent dépendre des user namespaces.

Vérifier sa version de noyau

uname -r
# Comparer avec la version corrigée annoncée par votre distribution

Divulgation responsable. Cet article est publié à des fins d’information, de sensibilisation et de défense. Les détails d’exploitation sont volontairement présentés à un niveau conceptuel et reposent sur des informations déjà publiques (NVD, avis éditeurs, PoC déjà diffusés). N’effectuez jamais de test sur des systèmes dont vous n’êtes pas propriétaire ou pour lesquels vous n’avez pas d’autorisation écrite explicite. Appliquez les correctifs sans délai.

Laisser un commentaire