
Correctifs du noyau pour la vulnérabilité Dirty Frag (CVE-2026-43284, CVE-2026-43500)
Série de correctifs pour la classe de vulnérabilité Dirty Frag découverte par Hyunwoo Kim (@v4bel).
Dirty Frag permet à un utilisateur local non privilégié d'écraser des octets arbitraires du cache de pages de fichiers en lecture seule (par ex. /usr/bin/su, /etc/passwd), conduisant à une élévation de privilèges locale vers root sur toutes les principales distributions Linux.
Les correctifs de ce dépôt n'ont PAS été écrits par le mainteneur de ce dépôt.
- CVE-2026-43284 (correctif ESP) : rédigé par Hyunwoo Kim (@v4bel) et Kuan-Ting Chen. Fusionné dans la branche principale du noyau Linux au commit
f4c50a4034e6.- CVE-2026-43500 (correctif RxRPC) : rédigé par Hyunwoo Kim (@v4bel). Soumis à la liste de diffusion netdev à
afKV2zGR6rrelPC7@v4bel, en attente de fusion.Ce dépôt est un miroir formaté de ces correctifs, rassemblés ici pour plus de commodité au format prêt pour
git am. Tout le crédit revient aux auteurs originaux. Recherche originale et PoC : https://github.com/V4bel/dirtyfrag
4.10 (commit cac2661c53f3, 2017-01-17) jusqu'à 6.x avant f4c50a4034e66.4 (commit 2dc334f1a63a, 2023-06-08) jusqu'à la branche principale (aucun correctif fusionné pour l'instant)git clone https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
cd linux
# Appliquer le correctif 1 (ESP — CVE-2026-43284)
git am 0001-net-xfrm-fix-page-cache-write-via-esp-splice-CVE-2026-43284.patch
# Appliquer le correctif 2 (RxRPC — CVE-2026-43500)
git am 0002-net-rxrpc-fix-page-cache-write-via-rxkad-splice-CVE-2026-43500.patch
patch (si git am échoue en raison d'une dérive de contexte)patch -p1 < 0001-net-xfrm-fix-page-cache-write-via-esp-splice-CVE-2026-43284.patch
patch -p1 < 0002-net-rxrpc-fix-page-cache-write-via-rxkad-splice-CVE-2026-43500.patch
Si vous ne pouvez pas appliquer le correctif immédiatement, mettez sur liste noire les modules vulnérables :
sudo sh -c "printf 'install esp4 /bin/false\ninstall esp6 /bin/false\ninstall rxrpc /bin/false\n' \
> /etc/modprobe.d/dirtyfrag.conf && \
rmmod esp4 esp6 rxrpc 2>/dev/null; \
echo 3 > /proc/sys/vm/drop_caches"
Avertissement : La suppression de
esp4/esp6désactive IPsec ESP. Évaluez l'impact avant d'appliquer sur des systèmes de production.
Les deux variantes partagent la même cause racine : le chemin splice() zéro-copie du noyau place une page du cache de pages en lecture seule directement dans un fragment skb sans sémantique de copie à l'écriture. Les opérations cryptographiques ultérieures en place écrivent ensuite dans cette page du cache de pages, modifiant de manière permanente le contenu du fichier en cache.
splice(fd_fichier → pipe → socket)
│
▼
skb->frags[0].page = &page_cache_page_P <- pas de CoW !
│
▼
[esp_input / rxkad_verify_packet_1]
déchiffrement AEAD/fcrypt en place src == dst == &P
│
▼
STORE vers page_cache_page_P <- écriture arbitraire dans le cache de fichiers en lecture seule
| Fichier | CVE | Sous-système | Statut |
|---|
0001-net-xfrm-fix-page-cache-write-via-esp-splice-CVE-2026-43284.patch | CVE-2026-43284 | net/ipv4/esp4.c, net/ipv6/esp6.c, net/ipv4/ip_output.c, net/ipv6/ip6_output.c | ✅ Fusionné dans la branche principale (f4c50a4034e6) |
0002-net-rxrpc-fix-page-cache-write-via-rxkad-splice-CVE-2026-43500.patch | CVE-2026-43500 | net/rxrpc/call_event.c, net/rxrpc/conn_event.c | ⏳ Soumis à la ML netdev (afKV2zGR6rrelPC7@v4bel), en attente de fusion |
| Variante | Approche |
|---|
| ESP | Marquer les fragments splice avec SKBFL_SHARED_FRAG ; vérifier ce drapeau dans esp_input()/esp6_input() pour forcer skb_cow_data() avant la cryptographie en place |
| RxRPC | Étendre la condition skb_cloned() à (skb_cloned(skb) || skb->data_len) afin que les skbs non linéaires (qui peuvent contenir des fragments splice) soient toujours copiés avant le déchiffrement en place |