
CVE-2021-3625 - Exploits de exemplo para Zephyr
Este repositório contém alguns exemplos de exploração para a CVE-2021-3625.
Todos os dispositivos USB baseados em Zephyr até (e incluindo) a versão 2.5.0 sofrem de um estouro de buffer que permite a leitura de até 65kB. Dependendo do dispositivo real, isso pode resultar no vazamento de dados sensíveis, como chaves de criptografia ou credenciais.
O problema pode ser acionado enviando solicitações de controle USB especialmente criadas com direção IN (leituras, para o host) e uma solicitação específica de escrita — por exemplo, definir endereço (0x05). Nesses casos, a escrita para o host não é esperada, portanto o comprimento da resposta não é atualizado, resultando em um valor inicialmente definido de request->wLength. Como wLength é controlado pelo usuário, ele pode ser definido para um valor arbitrário de dois bytes, como 0xffff, resultando na leitura de 65 kilobytes da memória do microcontrolador. Como o tamanho do buffer é significativamente menor, ocorre um estouro que permite a um atacante extrair o conteúdo da memória além do limite do buffer.
Além da camada de aplicação, também são afetadas as compilações MCUBoot com a pilha de dispositivos USB do Zephyr habilitada. Além disso, além da leitura de memória além dos limites do buffer, a classe DFU também pode ser explorada para alcançar uma escrita com estouro de buffer.
Para melhores resultados, é recomendado usar uma compilação do libusb com o tamanho de MAX_CTRL_BUFFER_LENGTH aumentado do padrão de 4096 bytes para 0xFFFF (libusb/os/linux_usbfs.h).
Advisório de Segurança: https://github.com/zephyrproject-rtos/zephyr/security/advisories/GHSA-c3gr-hgvr-f363