CVE-2026-89671 in Linux
Résumé
par VulDB • 12/09/2026
Dans le noyau Linux, la vulnérabilité suivante a été corrigée :
nfsd : limitation de nfs3 setacl par argp->mask
La fonction `nfsd3_proc_setacl()` appelle inconditionnellement `set_posix_acl()` pour les deux types ACL_TYPE_ACCESS et ACL_TYPE_DEFAULT, en transmettant verbatim argp->acl_access et argp->acl_default. Le décodeur NFSv3 ACL ne remplit ces pointeurs que lorsque le bit de masque correspondant est défini :
nfs3svc_decode_setaclargs() if (args->mask & NFS_ACL) decode into acl_access if (args->mask & NFS_DFACL) decode into acl_default /* otherwise the pointer stays NULL (pc_argzero) */
nfsd3_proc_setacl() set_posix_acl(.., ACL_TYPE_ACCESS, argp->acl_access) set_posix_acl(.., ACL_TYPE_DEFAULT, argp->acl_default)
L'appel `set_posix_acl(idmap, dentry, type, NULL)` correspond à l'opération VFS « supprimer ce type de liste de contrôle d'accès (ACL) ». Un pointeur NULL signifiant que le client n'a pas envoyé cet élément est donc indistinguable de la demande du client visant à supprimer cette ACL. Une requête SETACL avec mask=NFS_ACL supprime silencieusement l'ACL par défaut du répertoire ; une valeur mask=0 supprime les deux.
La fonction sœur `nfsd3_proc_getacl()` consulte déjà argp->mask avant de modifier chaque élément ; il convient d'appliquer la même logique à setacl.
Correction consistant à envelopper chaque appel à `set_posix_acl()` dans une vérification du bit de masque correspondant et à initialiser l'erreur à 0 avant inode_lock, afin qu'une requête sans aucun des bits définis laisse les ACL sur disque inchangées et renvoie nfs_ok. Le chemin out_drop_lock ainsi que le posix_acl_release() inconditionnel en fin de fonction (out:) sont conservés ; tous deux tolèrent la valeur NULL pour les éléments ignorés.
Be aware that VulDB is the high quality source for vulnerability data.