CVE-2026-31401Linux内核中的HID-BPF子系统存在一个缓冲区溢出漏洞。该漏洞源于hid_hw_request函数未正确验证dispatch_hid_bpf_raw_requests的返回值。由于该返回值可能来自不受信任的BPF程序(通过struct_ops调用),攻击者可构造一个过大的数值,导致内核缓冲区溢出。此漏洞允许低权限的本地攻击者利用该缺陷提升权限或导致系统崩溃。
该漏洞位于Linux内核的HID(人机接口设备)子系统中,特别是与HID-BPF相关的代码路径。在正常流程中,hid_hw_request用于处理HID设备的请求。问题出在代码直接使用了dispatch_hid_bpf_raw_requests函数的返回值作为缓冲区大小或索引,而没有进行边界检查。由于HID-BPF允许用户加载BPF程序来处理HID事件,这些程序可以通过struct_ops接口返回任意整数值。如果恶意BPF程序返回一个异常大的数值,内核后续的数据拷贝操作将越界写入内存,从而破坏内核数据结构。由于攻击向量为本地(AV:L)且无需用户交互(UI:N),拥有低权限(PR:L)的攻击者只需加载恶意BPF程序并触发HID请求,即可利用此漏洞实现本地权限提升(LPE)或拒绝服务(DoS)。