CVE-2026-31720CVE-2026-31720 是 Linux 内核 USB Gadget 子系统中的一个高危栈溢出漏洞。该漏洞位于 `f_uac1_legacy` 驱动的 `f_audio_complete()` 函数中。由于代码未对主机控制的 `req->length` 进行校验,直接将其作为参数调用 `memcpy` 向仅 4 字节的栈变量拷贝数据,导致栈越界写。低权限本地攻击者可利用此缺陷破坏内核内存,可能导致权限提升或系统崩溃。
该漏洞的根源在于 Linux 内核源码 `drivers/usb/gadget/function/f_uac1_legacy.c` 中的 `f_audio_complete()` 函数。该函数定义了一个 4 字节的栈变量 `u32 data`,并使用 `memcpy(&data, req->buf, req->length)` 填充数据。问题在于 `req->length` 直接源自 USB 控制请求,攻击者可通过恶意 USB 设备或主机将该值设置为远大于 4 的数值。由于缺乏对 `req->actual` 与预期负载大小的验证,`memcpy` 会向栈上写入过量数据,覆盖返回地址或关键变量。鉴于 CVSS 向量为 AV:L/AC:L/PR:L,攻击者只需本地低权限即可触发,造成严重的内核安全威胁。