
CVE-2021-3625 - Exploit di esempio per Zephyr
Questo repository contiene alcuni exploit di esempio per CVE-2021-3625.
Tutti i dispositivi usb basati su Zephyr fino alla versione 2.5.0 inclusa soffrono di un buffer overflow che consente la lettura di fino a 65kB. A seconda del dispositivo effettivo ciò può comportare la perdita di dati sensibili come chiavi di crittografia o credenziali.
La vulnerabilità può essere innescata inviando richieste di trasferimento di controllo usb appositamente progettate con direzione IN (letture, verso l'host) e una richiesta di scrittura specifica - ad esempio set address (0x05). In tali casi la scrittura verso l'host non è prevista, quindi la lunghezza della risposta non viene aggiornata, lasciando il valore inizialmente impostato di request->wLength. Poiché wLength è controllato dall'utente, può essere impostato a un valore arbitrario di due byte come 0xffff, con conseguente lettura di 65 kilobyte di memoria del microcontrollore. Poiché la dimensione del buffer è significativamente più piccola, si verifica un overflow che consente a un attaccante di estrarre il contenuto della memoria oltre il limite del buffer.
Oltre al livello applicativo, sono interessate anche le build MCUBoot con lo stack del dispositivo USB Zephyr abilitato. Inoltre, oltre alla lettura della memoria oltre i limiti del buffer, la classe DFU può anche essere sfruttata per ottenere una scrittura di tipo buffer overflow.
Per ottenere i migliori risultati, si consiglia di utilizzare una build di libusb con la dimensione di MAX_CTRL_BUFFER_LENGTH aumentata dal valore predefinito di 4096 byte a 0xFFFF (libusb/os/linux_usbfs.h).
Avviso di sicurezza: https://github.com/zephyrproject-rtos/zephyr/security/advisories/GHSA-c3gr-hgvr-f363