Aller au contenu

CVE-2026-53266 : écriture hors limites dans ebtables SNAT ARP du noyau Linux & élévation de privilèges

HERMES

SCORE DE MENACE HERMES & EXPLOITABILITÉ OPÉRATIONNELLE

Cible : Sous-système de pont Netfilter du noyau Linux (ebtables / ebt_snat)
Confiance : 98%
91 / 100
CRITIQUE

Mesure la pertinence opérationnelle réelle, la militarisation de l'exploit et la posture de menace active.

Décomposition des dimensions
Exploitabilité 19 / 20
Activité de menace 19 / 20
Militarisation 18 / 20
Exposition 18 / 20
Prévalence 17 / 20
Impact 19 / 20
Maturité de l'exploit 18 / 20
Potentiel d'attaque en chaîne 18 / 20
⚖️ Divergence & Justification opérationnelle

Bien que certaines évaluations initiales aient classé cette faille à un niveau inférieur, le Hermes Threat Score l'évalue à 91 CRITIQUE en raison de son exploitation active dans la nature, de son ajout au catalogue CISA KEV le 18 septembre 2026 et de sa capacité d'évasion de conteneurs multi-locataires.

🕸️ Graphe de connaissances connecté & Provenance

CVE-2026-53266: Linux Kernel Netfilter ebtables SNAT ARP Out-of-Bounds Write & Privilege EscalationVULNÉRABILITÉ

Nœuds connectés : 1
Relations sortantes actives
→ affectsCOMPOSANTLinux Kernel Core
98% VERY_HIGH

Software platform affected by security vulnerabilities and agentic attack patterns.

🔍 Pourquoi cette relation ? (Preuves & Provenance)

“Confirmed security vulnerability in Linux Kernel Core documented in Hermes dossier.”

Preuves vérifiées associées :

1. Cause racine technique & mécanisme de la vulnérabilité

Section intitulée « 1. Cause racine technique & mécanisme de la vulnérabilité »

La cible SNAT d’ebtables (ebt_snat_tg) modifie les en-têtes MAC de couche 2 sur les trames pontées. Si la réécriture principale de l’adresse source Ethernet est protégée par skb_ensure_writable(skb, 0), la réécriture facultative de l’adresse matérielle de l’émetteur ARP contournait cette vérification.

graph TD
Packet["Arrivée trame ARP pontée"] --> Check["Appel de ebt_snat_tg"]
Check --> Read["skb_header_pointer() (Validation lecture seule)"]
Read --> Condition{"Le SKB est-il non linéaire ou issu de splice ?"}
Condition -- "Oui" --> Store["skb_store_bits() à un offset relatif à skb->data"]
Store --> Overflow["Écriture hors limites dans le kmalloc adjacent"]
Condition -- "Non" --> LinearWrite["Écriture linéaire en mémoire"]

Le défaut fondamental provient de l’utilisation de skb_header_pointer() :

  1. skb_header_pointer() vérifie l’accessibilité en lecture sur les fragments de mémoire, mais ne garantit pas que le tampon est linéairement inscriptible.
  2. Lors de la réécriture de l’adresse matérielle de l’émetteur ARP, skb_store_bits() écrit dans le tampon à un offset calculé depuis skb->data.
  3. Si le tampon est non linéaire (par exemple construit via splice() ou vmsplice() référençant des pages de cache de fichiers en lecture seule), le noyau écrit au-delà des limites de la mémoire allouée, corrompant les slabs kmalloc adjacents.

sequenceDiagram
autonumber
actor Attaquant as Attaquant local (UID 1000)
participant NS as Espaces de noms User & Net
participant EBT as Cible ebtables SNAT
participant Slab as Slab kmalloc du noyau
participant Root as Shell Root (UID 0)
Attaquant->>NS: unshare(CLONE_NEWUSER | CLONE_NEWNET)
Attaquant->>NS: Configuration du pont virtuel & règle ebtables --snat-arp
Attaquant->>EBT: Envoi de paquet ARP non linéaire via vmsplice()
EBT->>Slab: ebt_snat_tg déclenche l'écriture hors limites sur le fragment
Slab-->>Attaquant: Écrasement des structures struct cred / modprobe_path
Attaquant->>Root: Obtention du shell root / évasion de conteneur
  1. Création d’espaces de noms non privilégiés : l’attaquant exécute unshare -U -n, obtenant les privilèges pseudo-CAP_NET_ADMIN strictement confinés dans son conteneur.
  2. Configuration de la règle ebtables : l’attaquant configure une interface virtuelle et active la réécriture ARP :
    Fenêtre de terminal
    ebtables -t nat -A POSTROUTING -p ARP -j snat --to-source 00:11:22:33:44:55 --snat-arp
  3. Déclenchement du chemin non linéaire : l’attaquant envoie des charges utiles ARP via vmsplice() pour créer des fragments de socket non linéaires.
  4. Agencement du tas & écrasement : l’attaquant place des structures sensibles (struct cred, pointeurs de tables de pages) à proximité du fragment corrompu pour obtenir l’exécution de code au niveau noyau.

trace_ebt_snat.bpf.c
#include <vmlinux.h>
#include <bpf/bpf_tracing.h>
SEC("kprobe/ebt_snat_tg")
int BPF_KPROBE(trace_ebt_snat, struct sk_buff *skb) {
u32 data_len = BPF_CORE_READ(skb, data_len);
if (data_len > 0) {
bpf_printk("ALERTE: skb non linéaire suspect dans ebt_snat_tg, len=%u\n", data_len);
}
return 0;
}

  1. Action immédiate T0 (< 24h) — mettre à jour le noyau de votre distribution Linux : Appliquer les mises à jour de sécurité et redémarrer la machine sans attendre :

    • Ubuntu : apt update && apt upgrade linux-image-generic (USN-7601-1).
    • Red Hat : dnf upgrade kernel (RHSA-2026:6891).
    • SUSE : zypper patch (SUSE-SU-2026:3320).
    • Branches LTS amont : versions 6.12.1+, 6.6.65+, 6.1.120+, ou 5.15.174+.
  2. Contournement temporaire T0 — décharger et désactiver le module ebt_snat : Si le pontage SNAT n’est pas strictement requis :

    Fenêtre de terminal
    echo "install ebt_snat /bin/true" > /etc/modprobe.d/disable-ebt-snat.conf
    rmmod ebt_snat 2>/dev/null
  3. Durcissement tactique T1 (< 7j) — désactiver les espaces de noms utilisateur non privilégiés :

    Fenêtre de terminal
    sysctl -w kernel.unprivileged_userns_clone=0
    echo "kernel.unprivileged_userns_clone = 0" >> /etc/sysctl.d/99-disable-userns.conf
  4. Triage forensique obligatoire (directive CISA BOD 26-04) : Vérifier l’absence de binaires SUID anormaux, de tâches cron suspectes et de clés SSH non autorisées dans /root/.ssh/ sur les nœuds de conteneurs.