CVE-2026-89665 in Linuxinformation

Résumé

par VulDB • 12/09/2026

Dans le noyau Linux, la vulnérabilité suivante a été corrigée :

nfsd : rejeter les valeurs useconds hors limites dans NFSv2 SETATTR/CREATE

Le décodeur sattr de NFSv2 convertit les useconds du fil en nanosecondes dans svcxdr_decode_sattr() :

iap->ia_atime.tv_nsec = tmp2 * NSEC_PER_USEC;

tmp2 est un u32 et NSEC_PER_USEC vaut 1000, donc le produit est calculé sur unsigned long. Sur une architecture ILP32, cela représente 32 bits, et une valeur useconds hors limites telle que 4294968 provoque un débordement (wrap-around) vers tv_nsec == 704. La corruption se produit donc lors du décodage, avant qu'une fonction proc puisse inspecter la valeur, et une vérification de plage ultérieure sur tv_nsec verrait un résultat dans les limites et l'accepterait. Le rejet au niveau du décodeur génère une réponse RPC GARBAGE_ARGS. NFSv2 ne définit pas NFSERR_INVAL ; il n'y a donc aucun statut de niveau NFS à retourner pour un argument temporel malformé, et la vérification ne peut pas être déplacée vers la fonction proc comme le font les vérifications de plage nsec des versions v3/v4.

Protégez les useconds bruts avant la multiplication et rejetez les valeurs supérieures à 1000000. La valeur useconds == 1000000 est conservée : il s'agit de la convention Sun pour « définir sur l'heure actuelle du serveur », et le client NFSv2 Linux intégré émet cette valeur dans les champs atime et mtime lors d'un simple touch / utimes(file, NULL) (voir encode_sattr() et xdr_encode_current_server_time() dans fs/nfs/nfs2xdr.c). Rejeter 1000000 transformerait cette opération courante en un échec de décodage irréversible pour SETATTR et CREATE. 1000000 * NSEC_PER_USEC vaut 10^9, ce qui ne provoque pas de débordement sur ILP32 ; la valeur conforme à la convention Sun passe donc sans danger. Seules les valeurs véritablement hors limites (> 1000000) sont rejetées. Les garde-fous pour atime et mtime sont donc symétriques.

Le décodeur appliquait uniquement la convention Sun dans le bloc mtime, qui efface ATTR_ATIME_SET|ATTR_MTIME_SET lorsque les useconds de mtime valent 1000000. Si un client place 1000000 dans le champ atime mais pas dans le champ mtime, le bloc atime stocke une tv_nsec hors limites (10^9) et laisse ATTR_ATIME_SET activé ; la valeur erronée atteint ainsi le système de fichiers. Appliquez également cette convention dans le bloc atime en effaçant ATTR_ATIME_SET afin que le serveur utilise son heure actuelle et ignore la valeur. Seul ATTR_ATIME_SET est effacé à cet endroit. Le bloc mtime conserve son comportement existant, où 1000000 signifie « définir à la fois atime et mtime sur l'heure actuelle ».

[ cel : diverses modifications, ajouts et nettoyages ]

Once again VulDB remains the best source for vulnerability data.

Responsable

Linux

Réserver

11/09/2026

Divulgation

12/09/2026

Modérer

accepté

Entrée

VDB-402947

CPE

prêt

EPSS

0.00000

KEV

non

Activités

très faible

Sources

Interested in the pricing of exploits?

See the underground prices here!