flawopen.com/Teardowns/cve-2026-31431-linux-algif-aead-copy-fail
CVE-2026-31431 : faille Copy Fail du noyau Linux
Copy Fail est une élévation locale de privilèges dans le chemin AEAD d’AF_ALG sous Linux. Une optimisation in-place confondait les mappages source et destination ; le correctif amont rétablit le traitement out-of-place et la CISA inscrit le CVE dans KEV.[1], [2], [5]
Imaginez un bibliothécaire chargé d’annoter une copie, mais dont le raccourci mène le crayon au livre original. Le raccourci in-place permettait à une écriture destinée au résultat d’atteindre une autre page mappée. Le correctif traite séparément source et destination.[3], [8]
Concepts Clés et Termes
AEAD- Chiffrement authentifié avec données associées : chiffre les données et authentifie des métadonnées supplémentaires non chiffrées.[8]
algif_aead- Implémentation AF_ALG des algorithmes AEAD, y compris le chemin source/destination vulnérable.[3]
Page cache- Cache mémoire du noyau pour les fichiers ; une écriture dans une page mappée peut affecter les lectures avant l’écriture disque.[8]
CWE-1288 / CWE-669- NVD répertorie
CWE-1288avecredhat-SADPcomme source du mappage ; la page de Red Hat répertorie également cette CWE. L’alerte du Centre canadien pour la cybersécurité classe le problème sousCWE-669. Ce sont des classifications attribuées à des sources distinctes, et non des étiquettes interchangeables.[11], [7], [5], [9], [10]
Correspondances de référentiels
- Référence CWE pour la faiblesse décrite dans ce guide : CWE-669 CWE-1288
- CISA KEV — ajouté le 2026-05-01 — CVE-2026-31431
Analyse de Cause Racine
La modification de 2017 72548b093ee3 a introduit une optimisation in-place dans algif_aead. Source et destination peuvent provenir de mappages différents. authencesn peut écrire des données temporaires hors de la sortie prévue ; la scatterlist in-place pouvait atteindre une page de cache associée à un fichier fourni via splice(). L’avis CVE Linux décrit la correction comme un retour au traitement out-of-place tout en conservant la copie des données associées. Accès local et chemin vulnérable activé sont nécessaires. CVSS 7,8 (AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H) ; pas d’entrée distante sans authentification.[1], [3], [8], [7], [9], [10]
Déroulement de l'Attaque Étape par Étape
L’écriture dépasse la sortie
Pendant authencesn, des données temporaires peuvent sortir de la zone prévue et atteindre le cache d’un fichier transmis par splice().[8]
Code Source : Vulnérable vs Sécurisé
Résumé conceptuel, pas code littéral du noyau ni correctif compilable. L’avis amont indique que le correctif revient en grande partie sur 72548b093ee3, sauf la copie des données associées, car les mappages source et destination diffèrent.[3], [2]
Extrait source: crypto/algif_aead.c (_aead_recvmsg)
/* Avant le correctif : effectuer l’opération cryptographique sur place. */
rsgl_src = areq->first_rsgl.sgl.sg;
if (ctx->enc) {
memcpy_sglist(areq->first_rsgl.sgl.sg, tsgl_src, processed);
af_alg_pull_tsgl(sk, processed, NULL, 0);
} else {
memcpy_sglist(areq->first_rsgl.sgl.sg, tsgl_src, outlen);
/* Construire et chaîner une scatterlist TX pour le tag d’authentification. */
areq->tsgl_entries = af_alg_count_tsgl(sk, processed, processed - as);
/* ... */
}
aead_request_set_crypt(&areq->cra_u.aead_req, rsgl_src,
areq->first_rsgl.sgl.sg, used, ctx->iv);
/* Après le correctif : conserver une scatterlist source par requête. */
processed = used + ctx->aead_assoclen;
areq->tsgl_entries = af_alg_count_tsgl(sk, processed);
/* Allouer et initialiser areq->tsgl, puis y ajouter les pages TX. */
af_alg_pull_tsgl(sk, processed, areq->tsgl);
tsgl_src = areq->tsgl;
/* Copier les données associées tout en séparant la source de la destination. */
rsgl_src = areq->first_rsgl.sgl.sg;
memcpy_sglist(rsgl_src, tsgl_src, ctx->aead_assoclen);
aead_request_set_crypt(&areq->cra_u.aead_req, tsgl_src,
areq->first_rsgl.sgl.sg, used, ctx->iv);
Liste de Contrôle de Sécurité pour l'Ingénierie
- ✓Mettez à jour via le canal pris en charge par la distribution et vérifiez dans l’avis du paquet que
CVE-2026-31431est corrigé ; une version amont générique ne suffit pas.[1], [5], [7] - ✓Priorisez les hôtes à noyau partagé avec des utilisateurs locaux non fiables : systèmes multi-tenant, workers de compilation et nœuds de conteneurs.[5], [7]
- ✓Si la mise à jour est impossible, appliquez uniquement une mesure documentée par l’éditeur et vérifiez son impact ; le code peut être intégré au noyau.[5], [7]
- ✓Vérifiez les paquets et leur provenance dans les images, y compris les images immuables et branches LTS avec correctifs rétroportés.[5], [7]
- ✓Les conteneurs partagent le noyau de l’hôte ; une élévation locale peut affaiblir l’isolation par namespaces.[5], [8]
- ✓Après correction, suivez les rétroportages et traitez les hôtes vulnérables comme travaux de remédiation ; KEV ne remplace pas le correctif.[1], [5]
Sources
- Linux kernel CVE notice for CVE-2026-31431
- Upstream stable patch: revert algif_aead to out-of-place operation
- Stable patch source with the algif_aead.c code diff
- CVE record and CVSS vector
- Canadian Centre for Cyber Security alert AL26-009
- CISA Known Exploited Vulnerabilities catalog entry
- Red Hat CVE analysis and affected product status
- Xint technical disclosure: Copy Fail — 732 Bytes to Root on Linux
- MITRE CWE-1288: Improper Validation of Consistency within Input
- MITRE CWE-669: Incorrect Resource Transfer Between Spheres
- NVD — CVE-2026-31431 weakness mapping (source: redhat-SADP)