
Introduction
Quelques jours seulement aprĂšs la divulgation de Dirty Frag (cf. l’article dĂ©taillĂ©e que j’ai rĂ©digĂ© ici), une nouvelle vulnĂ©rabilitĂ© du noyau Linux est apparue, j’ai nommĂ© Fragnesia (CVE-2026-46300).
Cette faille permet Ă un utilisateur local non privilĂ©giĂ© dâobtenir les droits root en exploitant une corruption logique du page cache du noyau Linux Ă travers le sous-systĂšme XFRM ESP-in-TCP.
Contrairement à de nombreuses LPE (Local Privilege Escalation) historiques reposant sur des race conditions complexes ou des primitives mémoire instables, Fragnesia fournit un mécanisme particuliÚrement fiable et déterministe pour modifier des fichiers pourtant montés en lecture seule.
Dans cet article, nous allons détailler :
- le contexte technique de la vulnérabilité
- le fonctionnement interne du page cache Linux
- le rĂŽle des structures
sk_buff - lâerreur logique dans
skb_try_coalesce() - la maniĂšre dont lâĂ©criture arbitraire devient une Ă©lĂ©vation de privilĂšges
- les implications sécurité pour les environnements modernes (containers, CI/CD, multi-tenant)
- les mitigations et correctifs
Contexte : aprĂšs Dirty Frag, Fragnesia
Fragnesia appartient Ă la mĂȘme famille de vulnĂ©rabilitĂ©s que Dirty Frag : une classe de bugs permettant dâĂ©crire dans le page cache de fichiers protĂ©gĂ©s.
Le chercheur William Bowling a découvert la vulnérabilité dans le sous-systÚme :
xfrmESP-in-TCP- gestion des fragments réseau (
skb fragments)
La vulnérabilité est décrite comme un bug logique dans la gestion des fragments partagés (shared frags) lors des opérations de coalescing de buffers réseau.
Le nom « Fragnesia » provient du fait que le noyau « oublie » quâun fragment mĂ©moire est partagĂ© (nos chers puristes français pourraient nommĂ©e cette vulnĂ©rabilitĂ© « amnĂ©sique du fragment »).
Rappel fondamental : le page cache Linux
Avant dâexpliquer lâexploitation, il faut comprendre un Ă©lĂ©ment clĂ© du noyau Linux :
Le page cache
Le noyau Linux maintient en mémoire des pages correspondant aux fichiers récemment utilisés :
Disque <---> Page Cache <---> Processus
Quand un binaire est exécuté :
/usr/bin/su
son contenu est chargé dans le page cache.
Les processus lisent généralement les données depuis ce cache mémoire plutÎt que directement depuis le disque.
Propriété critique : le page cache est partagé
Le page cache est :
- global au systĂšme
- partagé entre processus
- partagé entre containers
- partagé entre namespaces
Cela signifie que si un attaquant réussit à modifier une page du cache associée à :
/usr/bin/su
alors tous les processus utilisant ce fichier verront la version modifiée.
Câest prĂ©cisĂ©ment ce qui rend Fragnesia extrĂȘmement dangereux.
Le sous-systĂšme XFRM et ESP-in-TCP
La vulnérabilité réside dans :
net/xfrm/
XFRM
XFRM est lâinfrastructure Linux utilisĂ©e pour :
- IPsec
- encapsulation ESP
- politiques de transformation réseau
ESP (Encapsulating Security Payload) peut ĂȘtre transportĂ© via TCP :
ESP-in-TCP
Le traitement des paquets utilise intensivement les structures :
struct sk_buff
Ce n’est pas un hasard si le nom de cette structure vous dit quelque chose si vous avez suivi l’actualitĂ© des vulnĂ©rabilitĂ©s du kernel Linux !
Les structures sk_buff
Sous Linux, quasiment tout le trafic réseau passe par :
struct sk_buff
Cette structure représente un paquet réseau.
Elle contient notamment :
- les données du paquet
- des pointeurs vers des fragments mémoire
- des métadonnées réseau
- des flags de gestion mémoire
Simplification :
struct sk_buff {
...
skb_shared_info *shinfo;
...
}
Les fragments partagés
Pour éviter les copies mémoire coûteuses, Linux réutilise des fragments :
Page mémoire
â
skb A
skb B
skb C
Plusieurs buffers peuvent rĂ©fĂ©rencer la mĂȘme page physique.
Le noyau utilise alors des flags comme :
SKBFL_SHARED_FRAG
afin dâindiquer :
Attention, ce fragment est partagé, ne pas le modifier directement.
Le bug : perte du flag SHARED_FRAG
Le cĆur de Fragnesia se situe dans :
skb_try_coalesce()
Cette fonction fusionne plusieurs fragments rĂ©seau afin dâamĂ©liorer les performances.
Le problĂšme :
- pendant certaines opérations de coalescing
- le flag
SKBFL_SHARED_FRAGnâest pas correctement propagĂ© - le noyau croit alors que le fragment est privĂ©
- il effectue une écriture directe dans une page partagée
Autrement dit :
Fragment réellement partagé
â
Flag perdu
â
Le noyau pense que la mémoire est privée
â
Ăcriture autorisĂ©e
â
Corruption du page cache
Pourquoi câest catastrophique
Normalement, modifier un fichier root-owned comme :
/usr/bin/su
nécessite :
- les permissions root
- ou un accÚs disque privilégié
Mais Fragnesia ne modifie pas le fichier sur disque.
Elle modifie la copie mémoire du fichier présente dans le page cache.
Le VFS et les permissions UNIX sont donc totalement contournés.
De lâĂ©criture arbitraire Ă root
Lâexploitation suit gĂ©nĂ©ralement ce schĂ©ma :
1. Préparation du fragment partagé
Lâattaquant force la crĂ©ation dâun skb rĂ©fĂ©rençant une page du page cache.
2. Coalescing vulnérable
Le noyau fusionne des buffers réseau :
skb_try_coalesce()
Le flag SKBFL_SHARED_FRAG disparaĂźt.
3. Ăcriture dans le page cache
Le noyau autorise une écriture dans une page qui :
- appartient en réalité au page cache
- correspond Ă un fichier systĂšme
- est supposée read-only
4. Corruption dâun binaire SUID
Le PoC public cible :
/usr/bin/su
Le shellcode ou le patch injectĂ© transforme le binaire afin dâobtenir :
euid=0
Pourquoi lâexploitation est particuliĂšrement fiable
Beaucoup dâexploits kernel historiques reposent sur :
- UAF fragiles
- race conditions
- heap feng shui
- sprays mémoire complexes
Fragnesia est plus simple.
Le chercheur indique explicitement :
without requiring any race condition
Cela change Ă©normĂ©ment la stabilitĂ© de lâexploitation :
| Vulnérabilité | Stabilité |
|---|---|
| Dirty COW | dĂ©pend dâune race condition |
| Heap overflow kernel | souvent instable |
| UAF kernel | dépend du layout mémoire |
| Fragnesia | déterministe |
Pourquoi les containers sont fortement exposés
Fragnesia est particuliÚrement problématique dans les environnements :
- Kubernetes
- CI runners
- build farms
- PaaS multi-tenant
- hébergeurs mutualisés
Pourquoi ? Parce que le page cache est partagé entre containers !
Un container non privilĂ©giĂ© peut donc modifier le page cache visible par lâhĂŽte, mĂȘme sans accĂšs root dans le container.
Câest exactement le type de primitive recherchĂ© pour :
- container escape
- breakout Kubernetes
- élévation de privilÚges cloud
Différence entre Dirty Frag et Fragnesia
Bien quâils appartiennent Ă la mĂȘme famille, les bugs diffĂšrent.
Dirty Frag
Dirty Frag utilisait plusieurs vulnérabilités chaßnées :
- RXRPC
- XFRM
- corruption du page cache
Fragnesia
Fragnesia :
- exploite uniquement ESP/XFRM
- repose sur un bug logique distinct
- ne nécessite pas la chaßne Dirty Frag complÚte
- possĂšde son propre patch
Le correctif
Le patch proposĂ© est extrĂȘmement petit, seulement 2 lignes, selon les premiĂšres analyses publiques.
Le correctif consiste essentiellement Ă :
- préserver correctement le flag
SKBFL_SHARED_FRAG - pendant les opérations de coalescing.
En simplifiant :
if (frag_is_shared)
propagate_shared_flag();
Mitigations temporaires
En attendant les patches kernel :
modprobe -r esp4
modprobe -r esp6
modprobe -r rxrpc
ou blacklist des modules concernés.
Attention : patcher ne suffit pas toujours
Point trĂšs important :
Si la machine a déjà été compromise, le page cache peut contenir des binaires corrompus.
Certaines distributions recommandent :
echo 3 > /proc/sys/vm/drop_caches
Cela permet alors de purger le cache mémoire.
Pourquoi cette série de vulnérabilités inquiÚte autant
Copy Fail â Dirty Frag â Fragnesia.
Trois vulnérabilités majeures du noyau Linux révélées en peu de temps.
Le point commun : corruption de mémoire liée à des chemins réseau complexes.
Cela montre plusieurs tendances :
1. Les surfaces réseau du kernel sont gigantesques
Le noyau Linux contient :
- des décennies de compatibilité
- de multiples protocoles
- des optimisations mémoire agressives
2. Les optimisations « zero-copy » deviennent dangereuses
Pour gagner en performances :
- réutilisation de pages
- partage de fragments
- coalescing
- référence-counting complexe
Mais plus les optimisations mémoire augmentent, plus les invariants deviennent fragiles.
3. Les outils dâaudit assistĂ©s par IA accĂ©lĂšrent la dĂ©couverte
Plusieurs discussions publiques mentionnent lâusage dâoutils automatisĂ©s et dâanalyse assistĂ©e par IA dans la dĂ©couverte de ces bugs.
Cela pourrait annoncer une augmentation massive du volume de vulnérabilités kernel découvertes dans les prochaines années.
Détection et forensic
Détecter Fragnesia est difficile car :
- le disque nâest pas modifiĂ©
- seule la mĂ©moire cache lâest
- la compromission peut disparaĂźtre aprĂšs reboot
Indicateurs possibles :
- corruption mémoire de binaires SUID
- comportement anormal de
su,sudo,passwd - modules XFRM chargés inutilement
- traces dâexploitation locales
- crashs réseau inhabituels
Microsoft indique également que les signatures utilisées pour Dirty Frag détectent certains PoC Fragnesia.
Conclusion
Fragnesia est un excellent exemple de vulnérabilité moderne du noyau Linux :
- bug logique subtil ;
- corruption indirecte ;
- exploitation déterministe ;
- contournement complet du modĂšle UNIX ;
- impact majeur sur les infrastructures cloud et containerisées.
Cette vulnérabilité rappelle surtout une réalité fondamentale :
la sécurité du noyau dépend désormais fortement de la cohérence des optimisations mémoire internes.
Les mĂ©canismes modernes de performance – page cache partagĂ©, zero-copy, coalescing, rĂ©fĂ©rences partagĂ©es – deviennent des cibles privilĂ©giĂ©es pour les chercheurs offensifs.
Et avec lâĂ©mergence des outils dâaudit automatisĂ©s assistĂ©s par IA, il est probable que ce type de vulnĂ©rabilitĂ© ne soit quâun dĂ©but.