Aller au contenu

CVE-2025-39964 : condition de concurrence dans l'API crypto du noyau Linux (af_alg_sendmsg)

HERMES

SCORE DE MENACE HERMES & EXPLOITABILITÉ OPÉRATIONNELLE

Cible : Interface Cryptographique Utilisateur du Noyau Linux (crypto/af_alg.c / af_alg_sendmsg)
Confiance : 97%
88 / 100
ÉLEVÉ

Mesure la pertinence opérationnelle réelle, la militarisation de l'exploit et la posture de menace active.

Décomposition des dimensions
Exploitabilité 18 / 20
Activité de menace 18 / 20
Militarisation 17 / 20
Exposition 18 / 20
Prévalence 18 / 20
Impact 18 / 20
Maturité de l'exploit 17 / 20
Potentiel d'attaque en chaîne 17 / 20
⚖️ Divergence & Justification opérationnelle

Le CVSS v3.1 classique a initialement classé cette vulnérabilité avec un score faible à modéré (3.3 à 5.5) en considérant théoriquement qu'elle ne provoquait qu'un déni de service local. Le score Hermes HTS la réévalue à 88 ÉLEVÉ suite à son armement effectif et à son ajout formel au catalogue KEV de la CISA le 18 septembre 2026.

🕸️ Graphe de connaissances connecté & Provenance

CVE-2025-39964: Linux Kernel Crypto AF_ALG Concurrent Write Race ConditionVULNÉRABILITÉ

Nœuds connectés : 1
Relations sortantes actives
→ affectsCOMPOSANTLinux Kernel Core
98% VERY_HIGH

Software platform affected by security vulnerabilities and agentic attack patterns.

🔍 Pourquoi cette relation ? (Preuves & Provenance)

“Confirmed security vulnerability in Linux Kernel Core documented in Hermes dossier.”

Preuves vérifiées associées :

1. Mécanisme technique & cause fondamentale (root cause)

Section intitulée « 1. Mécanisme technique & cause fondamentale (root cause) »

L’interface de socket AF_ALG permet aux processus de l’espace utilisateur d’accéder aux algorithmes cryptographiques accélérés du noyau (ex. AES, SHA, ChaCha20).

Lorsqu’un processus transmet des données via sendmsg(), le noyau route l’appel vers af_alg_sendmsg(). Dans les versions vulnérables, plusieurs threads pouvaient émettre concurremment des appels sendmsg() sur le même contexte de socket (struct af_alg_ctx) :

sequenceDiagram
autonumber
actor ThreadA as Thread A (Attaquant)
actor ThreadB as Thread B (Attaquant)
participant Socket as Socket AF_ALG (af_alg_ctx)
participant SGL as Allocateur de Buffers SGL
ThreadA->>Socket: sendmsg(size=4096)
ThreadB->>Socket: sendmsg(size=1024) [Concurrence non synchronisée]
Note over Socket: Compteur ctx->used et pointeurs sgl modifiés simultanément
Socket->>SGL: Allocation asymétrique de pages & libération partielle
ThreadA->>Socket: Le Thread A termine et libère prématurément le buffer
ThreadB->>Socket: Le Thread B écrit dans la page libérée (Use-After-Free)

En l’absence de verrou d’exclusion mutuelle à l’écriture :

  1. Les compteurs de mémoire ctx->used étaient mis à jour de manière non atomique.
  2. Les listes chaînées de buffers de pages (sgl) se désynchronisaient.
  3. Le thread le plus rapide libérait prématurément des pages mémoire pendant que le thread concurrent continuait à y écrire, provoquant une corruption de mémoire de type Use-After-Free (UAF).

2. Analyse du correctif noyau (commit 1b34cbbf4f01)

Section intitulée « 2. Analyse du correctif noyau (commit 1b34cbbf4f01) »

Les développeurs du noyau Linux ont corrigé la faille en introduisant un verrou de propriété exclusive d’écriture ctx->write :

// Extrait du correctif crypto/af_alg.c
if (ctx->write) {
err = -EBUSY;
goto unlock;
}
ctx->write = true;

Ce verrou garantit qu’un seul thread de l’espace utilisateur peut exécuter sendmsg() à la fois sur une instance de socket AF_ALG. Toute tentative d’écriture concurrente se voit renvoyer une erreur -EBUSY, empêchant toute corruption de l’état mémoire.


Rechercher des traces d’erreurs de comptage de références (refcount underflow) dans le sous-système cryptographique :

kernel BUG at crypto/af_alg.c:382!
refcount_t: underflow; use-after-free has been detected on af_alg socket.
Call Trace:
<TASK>
af_alg_free_resources+0x.../0x... [af_alg]
af_alg_release+0x.../0x... [af_alg]
sock_close+0x.../0x...
...

3.2 règle auditd pour la surveillance des sockets af_alg

Section intitulée « 3.2 règle auditd pour la surveillance des sockets af_alg »

Détecter la création suspecte de sockets cryptographiques par des utilisateurs non privilégiés :

Fenêtre de terminal
-a always,exit -F arch=b64 -S socket -F a0=38 -k crypto_af_alg_creation

(Sur architecture x86_64, la constante de famille de sockets 38 correspond à AF_ALG).

3.3 dépôt public d’exploitation militarisée (CVE-2025-39964_EXP)

Section intitulée « 3.3 dépôt public d’exploitation militarisée (CVE-2025-39964_EXP) »

Un exploit fonctionnel d’élévation locale de privilèges conçu par le chercheur n1k0oowang est disponible sur GitHub (n1k0oowang/CVE-2025-39964_EXP). Cet exploit orchestre des appels simultanés multithreadés à af_alg_sendmsg() sur des sockets cryptographiques AF_ALG partagées, désynchronisant les structures scatterlist sgl pour provoquer une utilisation après libération (UAF) du tas du noyau, puis manipule l’allocateur slab pour écraser les structures d’identifiants (commit_creds) et obtenir les privilèges root locaux.


  1. Application des versions noyau révisées : Mettre à jour vers les versions stables Linux 5.10.245, 5.15.194, 6.1.154, 6.6.108, 6.12.49 ou 6.16.9 (et ultérieures).
  2. Blacklistage du module cryptographique (mesure d’urgence) : Si vos applications n’interagissent pas directement avec l’accélération cryptographique noyau via socket :
    Fenêtre de terminal
    echo "blacklist af_alg" > /etc/modprobe.d/disable-af-alg.conf
    echo "install af_alg /bin/true" >> /etc/modprobe.d/disable-af-alg.conf
  3. Durcissement des conteneurs : S’assurer que les conteneurs suppriment les capacités superflues et interdisent l’appel système socket(AF_ALG) via des filtres seccomp.