CVE-2026-97559 in Linux
Résumé
par VulDB • 25/09/2026
Dans le noyau Linux, la vulnérabilité suivante a été corrigée :
smb: client: échouer la réécriture de la DACL lorsque la nouvelle DACL dépasse 64 Ko
Les fonctions `replace_sids_and_copy_aces()` et `set_chmod_dacl()` accumulent la taille de la DACL qu'elles construisent dans un entier non signé sur 16 bits (`u16`). Cet accumulateur peut déborder (wraparound).
La fonction `validate_dacl()` limite le nombre d'ACE à `(dacl_size - sizeof(struct smb_acl)) / 20`, soit 3276 pour une DACL de taille maximale, tandis que chaque ACE réécrit peut atteindre la taille de `struct smb_ace` (76 octets) une fois son SID remplacé par un SID comportant le nombre maximal d'autorités subordonnées (`SID_MAX_SUB_AUTHORITIES`). Le pire des cas est donc sizeof(struct smb_acl) + 3276 * 76 = 248984 octets, bien au-delà de ce qu'un `u16` peut contenir. Un débordement se produit avec 863 ACE.
Après le dépassement, la taille dans `ndacl_ptr->size` devient sans signification et l'offset pointera n'importe où dans le tableau d'ACE. Par conséquent, nous observerons une corruption de la DACL, qui sera ensuite envoyée au serveur. Il ne s'agit pas d'une écriture hors limites (out-of-bounds write) car l'allocation couvre désormais l'expansion du pire des cas ; les écritures iront donc toujours dans le tampon.
Le code a été ajusté pour utiliser un entier non signé sur 32 bits (`u32`) en interne et renvoyer `-EOVERFLOW` en cas de dépassement. L'opération doit être refusée, car une DACL ne peut contenir que $2^{16}-1$ octets sur le fil réseau (on the wire) ; les DACL plus volumineuses ne peuvent pas être représentées.
La fonction `set_chmod_dacl()` présente le même schéma et est corrigée de la même manière. Elle déborde uniquement lorsque la source DACL se situe à environ 380 octets du plafond des 64 Ko, mais le mode d'échec est identique.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.