
Analyseur passif de systèmes Linux qui classe l’exposition à CVE-2026-31431 via la version du noyau, le journal des modifications de la distribution, l’état des modules et l’accessibilité d’AF_ALG, avec sortie JSON pour l’intégration SIEM.
Auteurs/Contributeurs : Patrick Doyle (Auteur/Mainteneur), Effie Renard (Co-auteure), Kimberly-Lee Banks (Co-auteure), Chris F. (Support/Revue de code)
Divulgation IA : Claude Code a été utilisé pour la rédaction des fichiers de tests, la rédaction des données de test et une revue de sécurité du code. Toutes les modifications ont été auditées manuellement par l'un des contributeurs.
Binaire Go unique à liaison statique qui classe l'exposition d'un hôte Linux à la CVE-2026-31431.
L'outil est passif. Il n'exploite pas la faille. La sonde de mécanisme (voir la déclaration de sécurité ci-dessous) émet exactement deux appels système et ne touche jamais au chemin de code vulnérable.
| Signal | Source | Option |
|---|---|---|
| Version du noyau par rapport au correctif en amont | uname(2) | --kernel-version |
| Le journal des modifications de la distribution mentionne la CVE | apt/rpm/apk ou changelog.Debian.gz sur disque | --changelog |
Statut du module algif_aead | /proc/modules, modprobe.d, /lib/modules | --module |
| Surface vulnérable accessible | socket(AF_ALG) + bind(authencesn(...)) | --mechanism |
| Compilé dans vmlinux | /boot/config-$(uname -r) ou /proc/config.gz | (partie de --module) |
Si aucune option de vérification n'est fournie, les quatre sont exécutées.
| Mode | Déclencheur | Cas d'utilisation |
|---|---|---|
| Style élégant (par défaut) | Sortie TTY, sans remplacement --format, sans variable d'environnement NO_COLOR | Exécutions en shell interactif |
| Texte brut | Sortie non-TTY, OU --format=text, OU NO_COLOR=1, OU --no-color | Scripts shell, tubes |
| JSON | --format=json | Ingestion Syslog/SIEM, scripts shell |
| Silencieux | --quiet | Code de sortie uniquement (automatisation/scripts) |
Forcer le style élégant lors d'un tube : cvecheck --pretty | tee report.txt.
Forcer le texte brut dans un TTY : cvecheck --no-color ou NO_COLOR=1 cvecheck.
La sonde émet exactement deux appels système socket(AF_ALG, SOCK_SEQPACKET, 0) et bind(fd, &SockaddrALG{Type:"aead", Name:"authencesn(hmac(sha256), cbc(aes))"}). Elle est ensuite suivie de close(fd). Elle n'effectue aucun setsockopt pour une clé, aucun accept, aucun sendmsg, aucun splice et aucune création de tube. Le chemin de code vulnérable nécessite un sendmsg de données cryptographiques combiné à un splice depuis un descripteur de fichier adossé au cache de pages ; aucune de ces opérations ne se produit, la faille ne peut donc pas se déclencher.
Une sonde réussie signifie que la surface est accessible. La présence ou non de la faille dans le noyau est déterminée par les signaux de version du noyau et de journal des modifications.
Effet secondaire : un bind réussi charge automatiquement algif_aead via le chargeur automatique de modules du noyau. La vérification du module s'exécute avant la sonde de mécanisme, de sorte que le rapport d'état de chargement est pré-sonde. Pour supprimer entièrement le chargement automatique, mettez d'abord algif_aead sur liste noire.
| Code | Signification |
|---|---|
0 | PATCHED / NOT_VULNERABLE / MITIGATED / LIKELY_NOT_EXPLOITABLE |
2 | VULNERABLE ou MECHANISM_REACHABLE (analyse partielle, version du noyau non vérifiée) |
3 | INCONCLUSIVE (signaux insuffisants) |
| Distribution | Détection | Paquet noyau | Remarques |
|---|---|---|---|
| Ubuntu / Debian / Mint / Pop!_OS | apt | linux-image-$(uname -r) | La lecture du journal des modifications sur disque en priorité évite la fragilité réseau de apt changelog sur les noyaux signés |
| RHEL / CentOS / Rocky / Alma / Fedora / Amazon Linux | rpm | kernel | Fournit algif_aead intégré (CONFIG_..._AEAD=y) ; la mitigation par liste noire n'est pas efficace |
| Oracle Linux | rpm | kernel ou kernel-uek | UEK détecté via la sous-chaîne uek dans uname -r |
| openSUSE / SLES | rpm | kernel-default | |
| Alpine | apk | linux-lts / linux-virt / etc. | La variante est choisie à partir du suffixe de version |
| Arch / CachyOS / Manjaro / Endeavour / Gentoo | aucun | n/a | Roulante/source : repose sur la vérification de la version du noyau |
Détecte automatiquement votre architecture, télécharge le binaire approprié dans $(pwd) et vérifie son SHA-256 par rapport aux SHA256SUMS publiés :
curl -fsSL https://copyfail.pcdoyle.dev/install.sh | sh
Le script se termine avec un code non nul en cas de non-concordance de la somme de contrôle et supprime le fichier défectueux.
Choisissez le binaire correspondant à l'architecture de votre hôte :
| Architecture | Binaire |
|---|---|
Intel/AMD 64 bits (x86_64) | cvecheck-linux-x86_64 |
ARM 64 bits (aarch64) | cvecheck-linux-arm64 |
Intel/AMD 32 bits (i?86) | cvecheck-linux-x86 |
Vérifiez avant d'exécuter :
curl -LO https://github.com/pcdoyle/copy-fail-cve-2026-31431/releases/latest/download/cvecheck-linux-x86_64
curl -LO https://github.com/pcdoyle/copy-fail-cve-2026-31431/releases/latest/download/SHA256SUMS
sha256sum --ignore-missing -c SHA256SUMS
chmod +x cvecheck-linux-x86_64
make build # bin/cvecheck-linux-{x86_64,arm64,x86}
# SCP(SFTP) vers le serveur :
scp ./bin/cvecheck-linux-x86_64 host:/tmp/ # Moins de 4 Mo, statique, sans dépendance glibc
# SSH :
ssh <host>
# Exécution du binaire :
/tmp/cvecheck-linux-x86_64 # Sortie élégante et lisible par l'humain.
/tmp/cvecheck-linux-x86_64 --format=json # Adapté aux scripts, Syslog et SIEM
/tmp/cvecheck-linux-x86_64 --format=text # Adapté aux scripts et aux tubes
ssh <host> /tmp/cvecheck-linux-x86_64 # En exécution directe, utilise --format=text par défaut
ssh <host> /tmp/cvecheck-linux-x86_64 --format=json # Adapté à Syslog/SIEM
Montez la racine de l'hôte quelque part en lecture seule et passez --root :
docker run --rm -v /:/host:ro alpine /tmp/cvecheck --root /<host-path>
--root contrôle toutes les recherches sur disque (/etc/os-release, modprobe.d, /lib/modules, /boot/config-*, fichiers de journal des modifications). Les sondes de version du noyau et de mécanisme touchent toujours le noyau en cours d'exécution via uname(2) et socket(AF_ALG, ...).
Résolue dans cet ordre (la première correspondance l'emporte) :
PATCHED : le journal des modifications de la distribution référence l'ID de la CVE.NOT_VULNERABLE : le noyau en cours d'exécution est >= à la version corrigée en amont.MITIGATED : algif_aead est sur liste noire et non chargé et non intégré dans vmlinux.LIKELY_NOT_EXPLOITABLE : AF_ALG indisponible et module absent du disque.MECHANISM_REACHABLE : surface accessible mais version du noyau non vérifiée.VULNERABLE : noyau dans la plage vulnérable et mécanisme accessible.INCONCLUSIVE : aucune des conditions ci-dessus ne correspond.Si --mechanism s'exécute en parallèle de --kernel-version et que les deux signalent un problème, le résultat est VULNERABLE avec une suggestion de remédiation.