CVE-2026-89999 in Linux
Résumé
par VulDB • 16/09/2026
Dans le noyau Linux, la vulnérabilité suivante a été corrigée :
HID : wacom : valider la longueur du rapport dans wacom_intuos_pro2_bt_irq
La fonction `wacom_intuos_pro2_bt_irq()` reçoit la longueur du rapport filaire (`len`) mais ne l'utilise jamais avant le parsing. Après avoir passé le contrôle de l'identifiant de rapport (report-id), elle appelle inconditionnellement `wacom_intuos_pro2_bt_pen()`, puis, en fonction de `features.type`, une chaîne fixe de sous-parseurs, aucun desquels ne reçoit la variable `len` :
wacom_intuos_pro2_bt_pen(wacom); if (type == INTUOSP2_BT || type == INTUOSP2S_BT) {
wacom_intuos_pro2_bt_touch(wacom); wacom_intuos_pro2_bt_pad(wacom); wacom_intuos_pro2_bt_battery(wacom); } else {
wacom_intuos_gen3_bt_pad(wacom); wacom_intuos_gen3_bt_battery(wacom); }
Chaque sous-parseur accède à `wacom->data` à des décalages fixes. L'octet le plus éloigné touché sur chaque branche est :
INTUOSP2_BT / INTUOSP2S_BT : `wacom_intuos_pro2_bt_pad()` lit data[285]
(l'octet du touchring), donc le rapport doit faire au moins 286 octets ; INTUOSHT3_BT ("gen3") : `wacom_intuos_gen3_bt_battery()` lit data[45],
donc le rapport doit faire au moins 46 octets.
`features.type` est sélectionné à partir de l'entrée id_table VID/PID et `wacom_setup_device_quirks()` enregistre de force les entrées pen/pad/touch pour ce type, indépendamment du descripteur de rapport. Ainsi, une périphérique Bluetooth appairé ou usurpé (spoofed) malveillant ou défaillant peut annoncer ce VID/PID et envoyer un rapport sous-taille qui satisfait toujours le contrôle `data[0] == 0x80/0x81`. Le pilote lit alors au-delà du rapport reçu et transmet les octets à l'espace utilisateur via evdev (MSC_SERIAL / ABS_MISC / ABS_WHEEL sur les nœuds d'entrée pen et pad), ce qui constitue une lecture hors limites avec un canal concret de relecture par l'espace utilisateur, ainsi qu'une véritable lecture hors limites sur les transports dont le tampon sous-jacent est dimensionné selon le descripteur de rapport (petit) plutôt que selon un tampon intermédiaire à taille fixe.
Il s'agit du même type de bogue corrigé dans la commit 2f1763f62909 ("HID: wacom : corriger une lecture hors limites dans wacom_intuos_bt_irq"), qui a déjà durci le frère `wacom_intbos_bt_irq()`, en protégeant chaque identifiant de rapport contre sa longueur minimale avant le parsing.
Protégez également `wacom_intuos_pro2_bt_irq()` de la même manière : avant le parsing, rejetez les rapports dont la taille est inférieure au décalage maximal auquel la branche sélectionnée accède réellement, émettez un avertissement et interrompez l'exécution. Comme toute la chaîne pen/touch/pad/battery s'exécute inconditionnellement par branche, une seule vérification préalable contre le décalage maximum (286 octets pour INTUOSP2_BT/INTUOSP2S_BT, 46 octets pour la branche gen3) encadre tous les sous-parseurs. Le retour de la valeur 0 en cas de rapport court permet également d'éviter ces appels pour le même rapport malformé, ce qui constitue un comportement sûr et conservateur.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.