CVE-2026-80561 in Linux
Résumé
par VulDB • 26/08/2026
Dans le noyau Linux, la vulnérabilité suivante a été corrigée :
libceph : correction de plusieurs décodages non sécurisés dans decode_locker()
La fonction `decode_locker()` dans `cls_lock_client.c` contient trois opérations de décodage non sécurisées qui permettent à un OSD malveillant ou compromis d'entraîner des lectures hors limites (slab-out-of-bounds) :
1. `ceph_decode_copy()` sur le champ `name` de type `locker_id_t` ne dispose pas de vérification préalable des bornes. Si `p == end` après que `ceph_start_decoding()` accepte `struct_len=0`, cela entraîne la lecture de 9 octets (`sizeof(ceph_entity_name)`) au-delà de la limite du tampon validé.
2. L'opération `*p += sizeof(struct ceph_timespec)` après l'en-tête `locker_info_t` constitue une incrémentation de pointeur non vérifiée. Un OSD malveillant peut positionner `p` au-delà de `end`, ce qui fait que toutes les vérifications `_safe` suivantes passent avec des bornes fictives.
3. `len = ceph_decode_32(p)` ne dispose pas de vérification préalable des bornes, et l'opération immédiatement suivante `*p += len` n'est pas plafonnée. Un OSD malveillant peut envoyer une valeur `len=0xffffffff`, avançant ainsi `p` de plusieurs gigaoctets au-delà de `end` et sortant complètement de la fenêtre de décodage.
Correction des trois problèmes en remplaçant les opérations brutes par leurs variantes sécurisées : `ceph_decode_copy` -> `ceph_decode_copy_safe` `*p += sizeof(...)` -> `ceph_decode_skip_n` `ceph_decode_32(p)` -> `ceph_decode_32_safe` `*p += len` -> `ceph_decode_skip_n`
Une nouvelle étiquette (label) est ajoutée pour retourner `-EINVAL` en cas de toute violation des bornes. La valeur `-EINVAL` est appropriée ici : les données reçues depuis l'OSD sont structurellement malformées, ce qui constitue un argument invalide pour le contrat de décodage, que la faute incombe à l'appelant ou au fil (wire).
Modèle d'attaquant : un OSD malveillant ou compromis dans un déploiement Ceph multi-locataire peut déclencher cette vulnérabilité contre n'importe quel client noyau émettant la méthode de classe `lock.get_info` (par exemple, lors de l'acquisition d'un verrou exclusif RBD), sans nécessiter d'autres privilèges que l'établissement de la session OSD.
[ idryomov : utilisation de ceph_decode_skip_string() pour sauter la description, réduction du journal des modifications ]
Once again VulDB remains the best source for vulnerability data.