
Kit éducatif et défensif pour deux LPE Linux de corruption du cache de pages (DirtyClone CVE-2026-43503, pedit COW CVE-2026-46331) : durcissement, détection, vérification, seccomp + harnais de validation. Détection et prévention uniquement — aucun code d'exploitation. TLP:CLEAR.
Détectez, contenez et vérifiez les défenses contre deux élévations de privilèges locales par corruption du cache de pages Linux — DirtyClone (CVE-2026-43503) et pedit COW (CVE-2026-46331) — sur des hôtes et des conteneurs.
Ceci est un kit de sécurité éducatif et défensif. Il explique comment les deux vulnérabilités fonctionnent au niveau des appels système et fournit des outils de durcissement, de détection, de vérification et de seccomp — plus un harnais de validation qui prouve que les outils fonctionnent sur de vrais noyaux. Il ne contient ni exploit, ni shellcode, ni offsets cibles, par conception.
Les deux CVE permettent à un utilisateur local non privilégié de devenir root en corrompant le cache de pages (la copie
en RAM) d'un binaire setuid-root tel que /usr/bin/su — sans jamais toucher au fichier sur le disque. Cela les rend
furtives : la surveillance de l'intégrité des fichiers reste verte, la forensique disque ne trouve rien, et la
corruption disparaît au redémarrage.
Corriger le noyau est le vrai remède. Mais pendant la fenêtre de déploiement — et en défense en profondeur ensuite — vous devez fermer les chemins d'attaque, surveiller la chaîne d'attaque et vérifier votre posture. C'est ce que fournit ce kit, avec chaque contrôle rattaché à une étape documentée de la chaîne d'exploit afin que vous puissiez voir pourquoi cela fonctionne.
Les deux bogues appartiennent à la même classe de défauts : le noyau écrit dans un tampon qu'il croit privé alors que ce tampon est toujours adossé à de la mémoire de cache de pages partagée et adossée à un fichier. Deux portes structurelles régissent toutes les variantes des deux chaînes :
Corrigé en amont dans les versions ponctuelles stables (DirtyClone ≥ 6.12.91 / 7.0.10 ; pedit COW 6.12.94 / 7.0.13) ainsi que dans les backports des fournisseurs ; la version principale 7.1 est définitive. Confirmez votre noyau auprès du suivi de votre distribution — voir docs/analysis.md §8.
Hôtes Linux uniquement. Ces scripts lisent et écrivent dans l'état réel du noyau. Exécutez le durcissement sur un hôte que vous contrôlez ; exécutez le harnais de validation destructif sur une VM jetable. Voir Prérequis.
# 1. Aperçu des modifications de confinement de l'hôte (n'écrit rien)
sudo ./kit/harden-pagecache-lpe.sh --dry-run
# 2. Applique les restrictions userns + les blocages des modules vulnérables
sudo ./kit/harden-pagecache-lpe.sh
# 3. Vérifie la posture — exécute la sonde fonctionnelle en tant qu'utilisateur NON PRIVILÉGIÉ
sudo -u nobody ./kit/verify-pagecache-lpe.sh # code de sortie : 0=RÉUSSITE 1=AVERTISSEMENT 2=ÉCHEC
# 4. (Facultatif) Surveillez la chaîne d'attaque en direct avec eBPF
sudo bpftrace ./kit/detect-pagecache-lpe.bt
Pour les conteneurs, appliquez la surcouche seccomp
(kit/seccomp-pagecache-lpe.json) :
docker run --security-opt seccomp=kit/seccomp-pagecache-lpe.json <image>
Nouveau ici ? Lisez START-HERE.md — une visite guidée, de type cours magistral, depuis la
cause racine jusqu'à une exécution complète de validation.
.
├── START-HERE.md Visite guidée — le point d'entrée recommandé
├── docs/ Le « pourquoi » : analyse et guide pour les opérateurs
│ ├── analysis.md Analyse de cause racine, chaînes d'attaque, ingénierie de détection
│ ├── HARDENING-GUIDE.md Guide de confinement pour les opérateurs (hôte → systemd → Docker → Kubernetes)
│ └── plain-language-summary.md Aperçu plus doux et en langage clair des deux bogues
├── kit/ Le « ce que vous exécutez » : quatre artefacts autonomes
│ ├── harden-pagecache-lpe.sh Applique le confinement de l'hôte (sysctl + blocages de modules)
│ ├── verify-pagecache-lpe.sh Vérification de posture en lecture seule (RÉUSSITE/AVERTISSEMENT/ÉCHEC)
│ ├── detect-pagecache-lpe.bt Télémétrie bpftrace/eBPF pour la chaîne de préparation
│ └── seccomp-pagecache-lpe.json Surcouche seccomp pour conteneurs refusant les appels système de la chaîne
└── testkit/ La « preuve » : harnais de validation + écriture SHOWCASE.md
harden, verify) : un hôte Linux avec bash, sysctl, modprobe
et unshare. Root pour le durcissement ; exécutez la sonde de vérification en tant qu'utilisateur non root.detect-pagecache-lpe.bt) : root, bpftrace ≥ 0.16 et BTF du noyau
(/sys/kernel/btf/vmlinux). Certains kprobes peuvent être inlinés sur un noyau donné — l'en-tête du script
explique comment s'adapter.testkit/) : une VM Linux jetable — il écrit de vrais fichiers de configuration et décharge
des modules du noyau. Le lanceur EC2 nécessite l'AWS CLI v2 et jq ; aucun SSH n'est utilisé (le transport est AWS
SSM). Les utilisateurs de macOS peuvent exécuter le test de fumée Docker local, mais la validation complète nécessite Linux.TLP:CLEAR — distribution publique et sans restriction. Ce dépôt est uniquement dédié à la détection et à la prévention. Il inclut délibérément :
…et exclut délibérément :
Les limites honnêtes de cette approche — ce que la validation prouve et ne prouve pas — sont documentées dans
testkit/SHOWCASE.md §8. Utilisez ce kit uniquement sur des systèmes que vous possédez ou êtes autorisé à
tester. Le durcissement est un confinement, pas un remède : corrigez votre noyau.
START-HERE.md — la visite guidée (commencez ici)docs/analysis.md — l'analyse technique complètedocs/plain-language-summary.md — un
aperçu plus doux, en langage clairLes issues et les demandes de tirage sont les bienvenues — voir CONTRIBUTING.md. Étant donné que les contrôles
sont répliqués dans plusieurs fichiers (la liste des modules, les réglages userns, la bitmap de détection), veuillez
lire les invariants de synchronisation de ce guide avant de modifier la surface d'attaque.
Sous licence Apache 2.0.
| Porte | Ce que c'est | Force en tant que contrôle |
|---|
| 1. Chemin de capacité | CAP_NET_ADMIN obtenu via des espaces de noms utilisateur non privilégiés (unshare(CLONE_NEWUSER|CLONE_NEWNET)) | Goulot d'étranglement robuste — toutes les variantes doivent passer par ici, connues et inconnues. Fermez-le en premier. |
| 2. Surface des modules | Modules vulnérables : act_pedit, esp4/esp6, rxrpc, xt_TEE, nf_dup_ipv4/nf_dup_ipv6 | Défense en profondeur — n'élimine que les primitives connues ; un nouveau sink pourrait la contourner. |
| Composant | Rôle |
|---|
docs/analysis.md | Source de vérité : cause racine, chaînes d'attaque comportementales, ingénierie de détection, durcissement, tableau comparatif. |
docs/HARDENING-GUIDE.md | Confinement en couches pour les hôtes, les unités systemd, Docker/Podman et Kubernetes. |
kit/ | Les quatre livrables. Copiez ce répertoire sur un hôte pour le défendre. |
testkit/ | Validation reproductible sur de vrais noyaux (Docker local + EC2 jetable), et SHOWCASE.md — une évaluation honnête de ce que les tests prouvent et ne prouvent pas. |