Aller au contenu

CVE-2026-31431 : LPE 'Copy-Fail' sur le noyau Linux

Comme détaillé dans les bulletins de menace de SOCPrime et Tenable, la CVE-2026-31431 (CVSS 7.8 - Élevé) représente un contournement sévère des mécanismes fondamentaux de contrôle d’accès discrétionnaire (DAC) du noyau Linux.

Rappelant les tristement célèbres vulnérabilités Dirty COW (CVE-2016-5195) ou Dirty Pipe (CVE-2022-0847), Copy-Fail exploite une condition de course (race condition) et une mauvaise gestion d’état au sein de la couche du système de fichiers virtuel (VFS) du noyau. Plus précisément, elle cible les appels système de transfert de données hautement optimisés (comme copy_file_range ou splice). Un attaquant local peut militariser cette faille pour injecter des données malveillantes arbitraires dans des fichiers système sensibles, élevant ainsi de manière transparente ses privilèges vers root sans nécessiter d’accès administratif interactif préalable.

Le cœur de la vulnérabilité “Copy-Fail” réside dans une désynchronisation d’état entre le cache de pages (page cache) du noyau Linux et les vérifications de permissions d’écriture du système de fichiers.

La cause profonde : contournement des protections du cache de pages

Section intitulée « La cause profonde : contournement des protections du cache de pages »

Les noyaux Linux modernes optimisent fortement les opérations de copie de fichiers. Au lieu de copier les données de l’espace noyau vers l’espace utilisateur puis de nouveau vers l’espace noyau, des appels système comme copy_file_range() déplacent directement les données entre les descripteurs de fichiers au sein du noyau.

La vulnérabilité se produit lorsqu’un utilisateur mappe un fichier cible en lecture seule (ex: /etc/passwd) en mémoire en utilisant mmap() avec l’option PROT_READ, tout en ouvrant simultanément un fichier source malveillant adossé à un système de fichiers temporaire (tmpfs).

En raison d’une vérification de permission manquante lors d’une condition de course spécifique dans le sous-système de gestion de la mémoire du noyau (CWE-362), l’attaquant peut forcer le noyau à raccorder (splice) les pages malveillantes dans le cache de pages du fichier en lecture seule. Le noyau marque à tort ces pages mémoire comme “sales” (dirty — modifiées et nécessitant une synchronisation avec le disque). Lorsque les threads d’écriture en arrière-plan (flusher threads) du noyau s’exécutent, ils écrivent ces pages sales contrôlées par l’attaquant sur le disque physique, écrasant silencieusement le fichier appartenant à root malgré l’absence de permissions WRITE pour l’attaquant.

En se basant sur le PoC GitHub de rootsecdev, l’exploitation est hautement fiable et ne prend que quelques millisecondes à s’exécuter.

  1. Sélection de la cible : l’attaquant sélectionne un fichier système critique qu’il souhaite écraser, généralement /etc/passwd.
  2. Mappage de fichier : l’attaquant ouvre /etc/passwd en mode lecture seule (O_RDONLY) et le mappe dans l’espace mémoire de son processus à l’aide de mmap().
  3. Préparation de la charge utile : l’attaquant génère une charge utile malveillante (ex: ajouter un nouvel utilisateur hacker:x:0:0::/root:/bin/bash sans mot de passe).
  4. Déclenchement de la condition de course : l’attaquant génère deux threads concurrents. Le Thread A tente continuellement de raccorder (splice) la charge utile malveillante dans la mémoire mappée. Le Thread B appelle de manière répétée madvise(MADV_DONTNEED) pour forcer le noyau à abandonner les pages mises en cache.
  5. L’écrasement (Copy-Fail) : la condition de course est gagnée. Le noyau contourne la protection en écriture, marque la page injectée comme “sale”, et valide (commit) la charge utile malveillante dans /etc/passwd.
  6. Élévation de privilèges : l’attaquant exécute simplement su hacker pour obtenir un shell root sans aucune invite de mot de passe.

CVE-2026-31431 : Flux d'exploitation vers root

Étant donné que c’est le noyau lui-même qui écrit les données sur le disque, les outils de traçage standard en mode utilisateur pourraient ne pas capter l’opération d’écrasement réelle comme provenant d’un processus malveillant. Les analystes DFIR doivent rechercher des indicateurs de compromission (IOC) secondaires.

Anomalies du système de fichiers

Examinez les dates de modification (mtime) et de changement d’état (ctime) des fichiers critiques tels que /etc/passwd, /etc/shadow, /etc/sudoers et /root/.ssh/authorized_keys. Toute modification inattendue en dehors des fenêtres de maintenance connues est un indicateur critique.

Journaux Auditd

Si l’audit Linux (auditd) est activé, recherchez l’exécution de la commande su par des utilisateurs inattendus immédiatement après des modifications de fichiers anormales, ou recherchez des appels système mmap ou copy_file_range excessifs provenant de binaires non autorisés dans /tmp/ ou /dev/shm/.

Détecter les exploits d’élévation locale de privilèges nécessite de chasser les conséquences de l’attaque plutôt que l’exploitation du bug mémoire lui-même.

sigma_linux_copyfail_passwd_mod.yaml
title: Modification suspecte de /etc/passwd (Copie-Fail LPE potentiel)
id: 9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d
status: experimental
description: Détecte la modification non autorisée du fichier /etc/passwd par des processus non administratifs, ce qui constitue le principal indicateur de post-exploitation de la vulnérabilité CVE-2026-31431 (Copy-Fail).
logsource:
category: file_event
product: linux
detection:
selection:
TargetFilename: '/etc/passwd'
Action: 'modified'
filter_legit:
# Exclure les binaires légitimes de gestion des utilisateurs
Image|endswith:
- '/usr/sbin/usermod'
- '/usr/sbin/useradd'
- '/usr/sbin/vipw'
- '/usr/bin/passwd'
condition: selection and not filter_legit
level: critical
tags:
- attack.privilege_escalation
- attack.t1068
- cve.2026-31431

Comme il s’agit d’une vulnérabilité au cœur du noyau, il existe peu de solutions de contournement efficaces qui n’impactent pas sévèrement les performances ou la stabilité du système.

  1. Application de correctifs au noyau (Patching) : la priorité absolue est de mettre à niveau le noyau Linux vers les versions corrigées fournies par les mainteneurs de votre distribution (ex: Debian, Ubuntu, RHEL). Consultez l’avis de sécurité de votre fournisseur spécifique pour connaître la version exacte du noyau corrigé.
  2. Redémarrage du système : l’application d’un correctif du noyau nécessite un redémarrage complet du système pour charger la nouvelle image du noyau en mémoire.
  3. Filtres Seccomp (Solution de contournement temporaire) : pour les environnements conteneurisés hautement restreints (comme Docker ou Kubernetes), les administrateurs peuvent appliquer des profils seccomp restrictifs pour bloquer l’appel système copy_file_range, bien que cela puisse interrompre des applications légitimes s’appuyant sur la copie de fichiers optimisée.