Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2021-40154 — POC pour tester la vulnérabilité BootROM trouvée dans LPC55S69 et la série K82 | Kitploit
Outils/GitHubGitHub/jeromeyoung/cve-2021-40154
Sécurité des Systèmes EmbarquésAnalyse des VulnérabilitésExploitationFuzzingSécurité MatérielleExploitation de Binaires
GitHubjeromeyoung/cve-2021-40154

CVE-2021-40154

POC pour tester la vulnérabilité BootROM trouvée dans LPC55S69 et la série K82

Voir le dépôt
6310il y a 4 ansPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

CVE-2021-40154

Vulnérabilités de dépassement de lecture dans la programmation en système (ISP) USB des LPC55S69 et K82

POC pour tester la vulnérabilité BootROM trouvée dans les séries LPC55S69 et K82 révision A2. La vulnérabilité est corrigée dans les appareils plus récents avec la nouvelle révision A3 pour le LPC55S69.

Appareils vulnérables :

Confirmé : les MCU des séries LPC55S69 et K82

Suspecté : d’autres MCU des séries NXP avec une pile USB ISP similaire - séries Kinetis K et RT

Résumé de la vulnérabilité :

Une vulnérabilité de dépassement de lecture a été observée dans le mode de programmation en système (ISP) USB des microcontrôleurs NXP LPC55S69 et Kinetis K82. Lorsqu’elle est exploitée, la vulnérabilité permet à un attaquant de lire 16KB (LPC55S69) et 64KB (K82) de données depuis la mémoire flash protégée.

Détails techniques :

Les MCU NXP LPC55S69 et K82 fournissent des modes de programmation en système (ISP) pour la mise à jour sur le terrain du firmware des MCU à l’aide de périphériques tels que USB, SPI, UART et I2C. Le mode USP ISP fournit un hôte embarqué pour mettre à jour le firmware via les commandes de mise à jour documentées par NXP.

L’ISP fait partie du BootROM des LPC55S69 et K82, et est déclenché en fonction des valeurs de certains bits de registres, de la broche ISP et de la définition de l’en-tête d’image. Pour le LPC55S69, la classe USB HID est utilisée pour télécharger une image du port USB0/1 et, de même, pour le K82, le Kinetis Bootloader dans la ROM prend en charge le chargement de données dans la flash via le périphérique USB en tant que classe USB HID.

Les ISP USB des IC des séries LPC55S69 et K82 utilisent tous deux trois (3) endpoints, énumérés ci-dessous :

  • Control (0)
  • Interrupt IN (1)
  • Interrupt OUT (2)

La vulnérabilité de dépassement de lecture a été observée pour l’endpoint USB Control 0, qui est utilisé pour l’énumération de l’hôte USB.

Preuve de concept

Cible 1 : LPC55S69

La vulnérabilité de dépassement de lecture est observée lors de la requête GET Descriptor Configuration de l’hôte USB embarqué. Un attaquant peut demander jusqu’à 16KB de données de réponse, en élaborant une requête USB pour envoyer GET Descriptor Configuration, en modifiant la valeur « wlength » à 65535 octets. Le LPC556S9 limite, puis réinitialise, lorsque 16KB de données sont copiés dans le tampon TX USB et transmis avec succès à l’hôte.

Détails de l’appareil :

Carte de développement cible : LPC55S69 – EVK RevA2 Hôte USB : Ubuntu 20.04 ou Raspberry-pi 4 Model B

Étapes pour reproduire la vulnérabilité :

  1. Sur la carte de développement LPC55S69 – EVK RevA2, l’ISP USB est déclenché en appuyant sur le bouton ISP et le bouton de réinitialisation.
  2. Connectez le port USB 1 haute vitesse à un ordinateur portable Ubuntu ou à un Raspberry-pi.
  3. La carte LPC est détectée comme un périphérique composite USB, comme le documente la Figure 1.

Figure 1 : l’utilitaire dmesg d’Ubuntu affichant les détails du périphérique USB

[43295.318228] usb 1-1.4: USB disconnect, device number 95
[43296.175536] usb 1-1.4: new full-speed USB device number 96 using xhci_hcd
[43296.397315] usb 1-1.4: New USB device found, idVendor=1fc9, idProduct=0021, bcdDevice= 3.00
[43296.397331] usb 1-1.4: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[43296.397337] usb 1-1.4: Product: USB COMPOSITE DEVICE
[43296.397342] usb 1-1.4: Manufacturer: NXP SEMICONDUCTOR INC.
[43296.400768] hid-generic 0003:1FC9:0021.0055: hiddev0,hidraw4: USB HID v1.00 Device [NXP SEMICONDUCTOR INC. USB COMPOSITE DEVICE] on usb-0000:00:14.0-1.4/input0
  1. Connectez un analyseur USB entre la carte cible et le PC, ou utilisez le module noyau Linux « usbmon » pour capturer les paquets USB :
  • Si vous utilisez usbmon dans Ubuntu, exécutez cette commande « sudo modprobe usbmon ».
  • En utilisant « lsusb », notez l’adresse du bus et du périphérique.
  • Exécutez « sudo wireshark », connectez-vous à l’interface USBMON1/2 en référence au numéro de bus indiqué par « lsusb ».
  1. Dans Wireshark, filtrez l’adresse du périphérique USB en référence au numéro de bus indiqué par « lsusb ».
  2. Exécutez la preuve de concept (PoC) « sudo python3 LPC_USB.py » dans Ubuntu. Pour exécuter correctement le script Python, les prérequis suivants sont nécessaires sur le PC hôte USB : a. Installer Python 3+ b. Installer le module « pyusb »
sudo python3 LPC_USB.py 
  1. Vérifiez le dépassement de tampon en examinant la requête et la réponse dans les traces USB, comme le documente la Figure 2 ; la Figure 3 montre quant à elle la trace de l’analyseur USB. La réponse USB serait de 4KB.

Figure 2

Figure 3

Note 1 : Le dépassement de lecture de 4KB peut être demandé sur un système Ubuntu en raison de la restriction « MAX_CTRL_BUFFER_LENGTH » de Libusb. Celle-ci peut être modifiée sur un système Raspberry-pi et 16KB peuvent être demandés. Le firmware « LPC.bin » joint a été récupéré depuis la carte LPC55s69-EVK à l’aide d’un raspberry-pi 4 model b.

Si vous souhaitez émettre des requêtes de plus de 4KB, utilisez cet excellent script créé par Horac sur un Raspi et exécutez la PoC avec wlength modifié à 65535(0xffff).

Cible 2 : Kinetis K82

La vulnérabilité de dépassement de lecture est observée lors de la requête GET Status-Other d’un hôte USB embarqué. Un attaquant peut demander jusqu’à 64KB de données de réponse, en élaborant une requête USB pour envoyer GET Status-Other, en modifiant la valeur « wlength » à 65535 octets. Le périphérique USB K82 envoie avec succès 64KB de données.

Détails de l’appareil :

Carte de développement cible : FRDM-K82F Hôte USB : ordinateur portable Ubuntu ou Raspberry-pi

sudo python3 K82_USB.py 

Note 1 : Le dépassement de lecture de 4KB peut être demandé sur un système Ubuntu en raison de la restriction « MAX_CTRL_BUFFER_LENGTH » de Libusb. Celle-ci peut être modifiée sur un Raspberry-pi et 64KB peuvent être demandés.

Note 2 : la vulnérabilité du K82 n’est reproduite que lorsque les requêtes USB pour GET Status-Device, Interface, Endpoint, et autres se produisent ensuite afin de déclencher la vulnérabilité. Cela peut être réalisé en exécutant les scripts PoC développés après plusieurs réinitialisations de l’ISP.

Si vous souhaitez émettre des requêtes de plus de 4KB, utilisez cet excellent script créé par Horac sur un Raspi et exécutez la PoC avec wlength modifié à 65535(0xffff).

Télécharger l’outil