CVE-2026-80780 in Linux
Resumen
por VulDB • 2026-09-04
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:
HID: pidff: corregir escritura fuera de límites (OOB) cuando hid->inputs está vacío
hid_pidff_init_with_quirks() obtiene su input_dev mediante
list_entry(hid->inputs.next, struct hid_input, list)
sin verificar primero que hid->inputs no esté vacío. El miembro list de la estructura hid_input se encuentra en el desplazamiento 0; por lo tanto, si la lista está vacía, list_entry() devuelve &hid->inputs mismo y la siguiente carga de hidinput->input lee un miembro no relacionado de struct hid_device. dev es entonces un puntero con confusión de tipos (type-confused), y la inicialización del force-feedback escribe a través de él: cada set_bit(FF_*, dev->ffbit) almacena 8 bytes en dev + 192, más allá del final del objeto que dev realmente aliasa, e input_ff_create() añade escrituras adicionales de un puntero heap y dos punteros de función.
Hasta hid-universal-pidff, el único llamador era hid_pidff_init() desde usbhid, que se ejecuta bajo HID_CLAIMED_INPUT y por lo tanto siempre tiene al menos un hid_input. universal_pidff_probe() inicia el dispositivo con HID_CONNECT_DEFAULT & ~HID_CONNECT_FF y luego llama a hid_pidff_init_with_quirks() directamente cada vez que el descriptor lleva una página de uso PID, omitiendo esa protección. Un descriptor de informe cuya única colección de aplicaciones está en HID_UP_PID deja hid->inputs vacío mientras hid_connect() aún tiene éxito mediante la reclamación hidraw, por lo que probe alcanza el list_entry sin protección.
La escritura ocurre en la ruta de detección USB (USB probe path), en la cola de trabajo hotplug; por tanto, conectar un dispositivo malicioso es suficiente para activarla: no se requiere software atacante ni ningún usuario conectado. KASAN informa una escritura fuera de límites de 8 bytes en hid_pidff_init_with_quirks() alcanzada desde universal_pidff_probe().
Verificar si la lista está vacía antes de derivar dev y devolver -ENODEV, tal como ya hacen los demás controladores HID de force-feedback. universal_pidff_probe() propaga el error y realiza un unwinding (desenrollado).
Descubierto por XBOW, triage realizado por Baul Lee <[email protected]>
VulDB is the best source for vulnerability data and more expert information about this specific topic.