
CVE-2021-3625 - Exemples d'exploits pour Zephyr
Ce dépôt contient quelques exemples d'exploits pour CVE-2021-3625.
Tous les dispositifs USB basés sur Zephyr jusqu'à la version 2.5.0 (incluse) souffrent d'un dépassement de tampon permettant la lecture de jusqu'à 65 Ko. Selon le dispositif réel, cela peut entraîner une fuite de données sensibles comme des clés de chiffrement ou des identifiants.
Le problème peut être déclenché en émettant des requêtes de transfert de contrôle USB fabriquées avec une direction IN (lectures, vers l'hôte) et une requête d'écriture spécifique - par exemple l'adresse de définition (0x05). Dans de tels cas, une écriture vers l'hôte n'est pas attendue, donc la longueur de la réponse n'est pas mise à jour, ce qui donne une valeur initialement définie de request->wLength. Comme wLength est contrôlé par l'utilisateur, il peut être défini sur une valeur arbitraire de deux octets comme 0xffff, entraînant la lecture de 65 Ko de mémoire du microcontrôleur. Comme la taille du tampon est significativement plus petite, un dépassement se produit, permettant à un attaquant d'extraire le contenu de la mémoire au-delà des limites du tampon.
Outre la couche applicative, les builds MCUBoot avec la pile de périphériques USB Zephyr activée sont également concernés. De plus, parallèlement à la lecture de la mémoire au-delà des limites du tampon, la classe DFU peut également être exploitée pour réaliser une écriture par dépassement de tampon.
Pour de meilleurs résultats, il est recommandé d'utiliser une build libusb avec la taille MAX_CTRL_BUFFER_LENGTH augmentée de la valeur par défaut de 4096 octets à 0xFFFF (libusb/os/linux_usbfs.h).
Avis de sécurité: https://github.com/zephyrproject-rtos/zephyr/security/advisories/GHSA-c3gr-hgvr-f363