This repository contains a few example exploits for CVE-2021-3625.
All Zephyr-based usb devices up to (and including) version 2.5.0 suffer from
a buffer overflow allowing readout of up to 65kB. Depending on the actual device
this may result of leakage of sensitive data like encryption keys or credentials.
The issue may be triggered by issuing crafted usb control transfer requests
with IN direction (reads, to host) and a write specific request - in example
set address (0x05). In such cases write to host is not expected thus response
length is not updated resulting in a initially set value of request->wLength.
Since wLength is user controlled it can be set to an arbitrary two byte value like
0xffff resulting in readout of 65 kilobytes microcontroller memory. Since size of
buffer is significantly smaller a overflow takes place allowing an attacker
to extract memory contents past the buffer boundary.
Besides application layer also MCUBoot builds with Zephyr USB device stack enabled
are affected. Furthermore along memory readout past buffer bounaries the DFU class
may also be exloited to achive buffer overflow write.
For best results it is recommended to use a libusb build with MAX_CTRL_BUFFER_LENGTH
size increased from default 4096 bytes to 0xFFFF (libusb/os/linux_usbfs.h).
Security Advisory: https://github.com/zephyrproject-rtos/zephyr/security/advisories/GHSA-c3gr-hgvr-f363