本仓库包含针对 CVE-2021-3625 的几个示例漏洞利用。
所有基于 Zephyr 的 USB 设备,直至(含)2.5.0 版本,均存在 缓冲区溢出漏洞,允许读取最多 65kB 数据。根据实际设备的不同, 这可能导致敏感数据(如加密密钥或凭据)泄露。
该问题可通过发出特制的 USB 控制传输请求来触发, 请求方向为 IN(读取,至主机),并带有特定的写入请求——例如 设置地址(0x05)。在这种情况下,向主机的写入并非预期操作,因此响应 长度不会更新,导致 request->wLength 保持初始设置值。 由于 wLength 由用户控制,可将其设置为任意的两字节值,例如 0xffff,从而读取 65 千字节的微控制器内存。由于缓冲区大小 明显更小,会发生溢出,允许攻击者提取超出缓冲区边界的内存内容。
除了应用层外,启用了 Zephyr USB 设备栈的 MCUBoot 构建 也受到影响。此外,除了越界内存读取之外,DFU 类 也可能被利用来实现缓冲区溢出写入。
为获得最佳结果,建议使用将 MAX_CTRL_BUFFER_LENGTH 大小从默认的 4096 字节增加到 0xFFFF 的 libusb 构建(libusb/os/linux_usbfs.h)。
安全公告:https://github.com/zephyrproject-rtos/zephyr/security/advisories/GHSA-c3gr-hgvr-f363