
CVE-2026-31431 Copy Fail — testeur LPE du noyau Linux via MCP
📖 Guide d'installation — démarrage rapide, configuration manuelle et dépannage
CVE-2026-31431 — la pire vulnérabilité Linux jamais découverte. Désormais contrôlable via MCP.
732 octets de Python. Pas de compilation. Pas de condition de concurrence. Pas d'offsets par distribution. Une seule exécution, root universel sur tous les noyaux Linux construits depuis 2017.
Cet outil est un serveur MCP et un tableau de bord web qui teste tout système Linux accessible pour détecter la vulnérabilité. Il a été créé parce que le PoC original est déjà trivial à utiliser — celui-ci ajoute simplement une interface utilisateur, l'analyse réseau et le suivi de flotte.
AVERTISSEMENT : Il s'agit d'une véritable élévation de privilèges au niveau du noyau. À n'utiliser que sur des systèmes que vous possédez ou pour lesquels vous disposez d'une autorisation écrite explicite de test. Toute utilisation non autorisée constitue une infraction pénale dans la plupart des juridictions.
1. Elle a été trouvée par une IA en une heure.
La plateforme Xint Code de Theori a analysé le sous-système crypto/ de Linux avec
une seule invite d'opérateur. Une heure plus tard, elle avait une LPE universelle qui
avait échappé à tous les relecteurs humains, outils d'analyse statique et fuzzers
pendant neuf ans. Le bug existait depuis 2017 et nécessitait un raisonnement
inter-sous-systèmes (provenance des sockets AF_ALG + comportement d'écriture d'espace
de travail d'authencesn) — exactement le genre de connexion dans lequel les outils
natifs des LLM excellent. Le coût de la découverte était négligeable. Les implications
pour le paysage des vulnérabilités sont existentielles.
2. L'exploit tient en 732 octets de pur Python, sans dépendances. Aucune chaîne d'outils de compilation nécessaire. Aucune bibliothèque à installer. Aucun offset spécifique à l'architecture. Il fonctionne à l'identique sur les serveurs x86_64, les routeurs aarch64, les NAS ARM et tout autre matériel Linux exécutant Python 3.10+. Vous pouvez le coller dans un shell web, le transmettre via netcat ou l'écrire depuis une clé USB. La barrière à l'armement est effectivement nulle.
3. Il ne laisse aucune trace sur le disque.
L'exploit ne corrompt que le cache de pages en mémoire du noyau. Le binaire sur disque
de /usr/bin/su n'est jamais modifié. Tous les outils d'intégrité de fichiers qui
comparent les sommes de contrôle sur disque — AIDE, Tripwire, dm-verity — ne voient
rien d'anormal. La corruption disparaît au redémarrage. La seule façon de détecter
qu'un exploit a été exécuté est de l'attraper en cours d'exécution via auditd ou
eBPF. Sur le plan forensique, l'exploit est invisible.
4. Des milliards d'appareils ne seront jamais corrigés.
Les grandes distributions (Ubuntu, RHEL, Debian, SUSE) ont diffusé des correctifs sous
72 heures. Mais le bug du noyau est intégré dans chaque appareil Linux construit depuis
2017 avec CONFIG_CRYPTO_USER_API_AEAD=y — c'est-à-dire pratiquement tous. Les routeurs
OpenWrt (aucun correctif à la date du 2026-05-02). Les caméras IP fonctionnant avec des
noyaux constructeurs de 2019. Les téléviseurs intelligents avec des branches de firmware
figées. Les pompes à perfusion médicales qui exigent une re-certification FDA pour chaque
mise à jour. Les contrôleurs industriels avec des cycles de support de 10 ans. Les
appareils Android sont protégés par une restriction de politique SELinux accidentelle
— pas par un correctif du noyau — et les appareils rootés/ROM personnalisées, les
anciennes tablettes Fire et les sticks Android TV sont entièrement exposés. Le nombre
total n'est pas de millions. Il est de milliards. Et pour la plupart d'entre eux, le
correctif n'arrivera jamais.
Il s'agit d'un outil de test et de sensibilisation à la sécurité construit autour du PoC public. Il ne fait rien que le script original de 732 octets ne fasse pas déjà. Ce qu'il ajoute :
L'exploit lui-même est public, trivialement copiable, et ne peut pas redevenir inconnu. Cet outil existe pour rendre les tests rapides et sûrs pour les personnes autorisées à tester.
git clone https://github.com/sandraschi/copy-fail-mcp
cd copy-fail-mcp
just
Cela ouvre un tableau de bord interactif affichant toutes les commandes disponibles.
Lancez just bootstrap pour installer les dépendances, puis just serve ou just dev pour démarrer.
Si vous n'avez pas just installé :
pip install copy-fail-mcp
copy-fail check --host 192.168.1.100
copy-fail serve --http --port 10955
User → AF_ALG socket (authencesn) → splice() target file → HMAC fails
↓
4 bytes written past AEAD boundary
↓
Into page cache of /usr/bin/su
↓
su is now corrupted in memory
↓
Run su → root shell
Le bug : deux comportements de sous-systèmes, inoffensifs individuellement, deviennent mortels une fois combinés. Le chemin splice d'AF_ALG expose les pages du cache de pages comme sortie inscriptible. authencesn écrit 4 octets au-delà de la limite AEAD légitime comme espace de travail. Combinez les deux et vous pouvez corrompre la représentation en mémoire de n'importe quel fichier lisible avec des données précisément contrôlées. L'exploit cible la vérification des permissions de /usr/bin/su.
MIT. Le script d'exploit est de Taeyang Lee / Theori / Xint Code Research Team (PoC original).
| Propriété | Copy Fail | Dirty COW (2016) | Dirty Pipe (2022) |
|---|
| Taille de l'exploit | 732 octets (bibliothèque standard Python) | ~200 lignes C | ~100 lignes C |
| Compilation requise | Non — Python pur | Oui — compilation C | Oui — compilation C |
| Condition de concurrence | Non — déterministe | Oui — fenêtre de concurrence | Non |
| Offsets par distribution | Aucun — même script partout | Aucun | Aucun |
| Trace sur disque | Non — cache de pages uniquement, sommes de contrôle propres | Non | Non |
| Évasion de conteneur | Oui — cache de pages partagé | Oui | Oui |
| Versions du noyau | >= 4.14 (2017–présent) | >= 2.6.22 (2007–2018) | >= 5.8 (2020–2022) |
| Appareils concernés | Des milliards (toujours en augmentation) | Corrigé en 2018 | Corrigé en 2022 |
| Ne sera jamais corrigé | Des milliards d'appareils IoT/embarqués/routeurs | En grande partie corrigé | En grande partie corrigé |
| Découvert par | IA (Xint Code, analyse d'1 heure) | Chercheur humain | Chercheur humain |
| Coût de la découverte | ~6 $ en calcul cloud | Des mois d'effort humain | Des mois d'effort humain |
| Outil | Description | Voie d'accès |
|---|
cf_scan_network | Sonde un sous-réseau /24 à la recherche d'hôtes SSH, identifie Linux | Direct (TCP asynchrone) |
cf_check_target | Vérifie le noyau, la config AEAD, l'état du correctif de la distribution | Agent SSH |
cf_run_exploit | Déploie le PoC via SSH, exécute, rapporte root | Agent SSH |
cf_assess | Vérification + exploitation en une seule étape | Agent SSH |
cf_apply_mitigation | Liste noire de modules ou liste noire d'initcalls | Agent SSH |
cf_get_exploit_script | Renvoie le PoC brut de 732 octets sous forme de texte | Tout canal |
cf_exploit_local | Écrit le PoC dans un chemin local pour un déploiement manuel | Shell local |