Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2021-40154 — POC zum Testen der BootROM-Sicherheitslücke, die in der LPC55S69- und K82-Serie gefunden wurde. | Kitploit
Tools/GitHubGitHub/jeromeyoung/cve-2021-40154
Embedded-System-SicherheitSchwachstellenanalyseExploitationFuzzingHardware-SicherheitBinary-Exploitation
GitHubjeromeyoung/cve-2021-40154

CVE-2021-40154

POC zum Testen der BootROM-Sicherheitslücke, die in der LPC55S69- und K82-Serie gefunden wurde.

Repository anzeigen
63vor 3 JahrenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

CVE-2021-40154

LPC55S69 und K82 USB In-System Programming (ISP) Puffer-Überlese-Schwachstellen

POC zum Testen der BootROM-Sicherheitslücke in LPC55S69 und K82 Serie Revision A2. Die Sicherheitslücke ist in neueren Geräten mit der neueren Revision A3 für LPC55S69 behoben.

Betroffene Geräte:

Bestätigt: LPC55S69 und K82 Serie MCUs

Vermutet: andere NXP-Serien MCUs mit ähnlichem USB-ISP-Stack - Kinetis K-Serie und RT-Serie

Zusammenfassung der Sicherheitslücke:

Eine Puffer-Überlese-Sicherheitslücke wurde im USB In-System Programming (ISP)-Modus der NXP LPC55S69 und Kinetis K82 Mikrocontroller-Serien beobachtet. Bei Ausnutzung ermöglicht die Sicherheitslücke einem Angreifer, 16KB (LPC55S69) und 64KB (K82) Daten aus geschütztem Flash-Speicher zu lesen.

Technische Details:

NXP LPC55S69 und K82 MCUs bieten In-System Programming (ISP)-Modi für die Feldaktualisierung der Firmware der MCUs mittels Peripheriegeräten wie USB, SPI, UART und I2C. Der USP ISP-Modus bietet einen eingebetteten Host zur Aktualisierung der Firmware über die dokumentierten Update-Befehle von NXP.

Der ISP ist Teil des LPC55S69 und K82 BootROM und wird ausgelöst abhängig von den Werten bestimmter Registerbits, des ISP-Pins und der Image-Header-Definition. Für LPC55S69 wird die USB HID-Klasse verwendet, um ein Image des USB0/1-Ports herunterzuladen, und ähnlich unterstützt für K82 der Kinetis Bootloader im ROM das Laden von Daten in den Flash über das USB-Peripheriegerät als USB HID-Klasse.

Sowohl der LPC55S69 als auch der K82 Serie ICs USB ISP verwenden drei (3) Endpunkte, die unten aufgeführt sind:

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

Die Puffer-Überlese-Sicherheitslücke wurde für den USB Control Endpunkt 0 beobachtet, der für die USB-Host-Enumeration verwendet wird.

Proof of Concept

Ziel 1: LPC55S69

Die Puffer-Überlese-Sicherheitslücke wird bei der GET Descriptor Configuration-Anfrage des eingebetteten USB-Hosts beobachtet. Ein Angreifer kann bis zu 16KB Antwortdaten anfordern, indem er eine USB-Anfrage zum Senden von GET Descriptor Configuration erstellt und den Wert „wlength“ auf 65535 Bytes ändert. LPC556S9 begrenzt und setzt zurück, wenn 16KB Daten in den USB-TX-Puffer kopiert und erfolgreich an den Host übertragen werden.

Gerätedetails:

Target Dev Board: LPC55S69 – EVK RevA2 USB Host: Ubuntu 20.04 oder Raspberry Pi 4 Model B

Schritte zur Reproduktion der Sicherheitslücke:

  1. Beim LPC55S69 – EVK RevA2 Entwicklungsboard wird der USB ISP durch Drücken des ISP- und Reset-Knopfs ausgelöst.
  2. Verbinden Sie den USB 1 High-Speed-Port mit einem Ubuntu-Laptop oder Raspberry Pi.
  3. Das LPC-Board wird als USB-Composite-Gerät erkannt, wie in Abbildung 1 dokumentiert.

Abbildung 1: Ubuntu dmesg-Dienstprogramm zeigt USB-Gerätedetails

root@kitploit:~
[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. Schließen Sie einen USB-Analyzer zwischen Zielboard und PC an oder verwenden Sie das Linux-Kernelmodul „usbmon“, um USB-Pakete zu erfassen:
  • Wenn Sie USBmon in Ubuntu verwenden, führen Sie den Befehl „sudo modprobe usbmon“ aus.
  • Notieren Sie bei Verwendung von „lsusb“ die Bus- und Geräteadresse.
  • Führen Sie „sudo wireshark“ aus und verbinden Sie sich mit dem USBMON1/2-Interface unter Bezugnahme auf die Busnummer von „lsusb“.
  1. Filtern Sie in Wireshark die USB-Geräteadresse unter Bezugnahme auf die Busnummer von „lsusb“.
  2. Führen Sie den Proof of Concept (PoC) „sudo python3 LPC_USB.py“ in Ubuntu aus. Für die erfolgreiche Ausführung des Python-Skripts sind auf dem USB-Host-PC die folgenden Anforderungen erforderlich: a. Installieren Sie Python 3+ b. Installieren Sie das „pyusb“-Modul
root@kitploit:~
sudo python3 LPC_USB.py 
  1. Überprüfen Sie den Pufferüberlauf, indem Sie die Anfrage und Antwort aus den USB-Traces prüfen, wie in Abbildung 2 dokumentiert; Abbildung 3 zeigt stattdessen den USB-Analyzer-Trace. Die USB-Antwort wäre 4KB.

Abbildung 2

Abbildung 3

Hinweis 1: Der Pufferüberlese von 4KB kann im Ubuntu-System aufgrund der Einschränkung von Libusb „MAX_CTRL_BUFFER_LENGTH“ angefordert werden. Dies kann in einem Raspberry Pi System geändert werden und 16KB können angefordert werden. Beigefügte Firmware „LPC.bin“, die vom LPC55s69-EVK-Board mit einem Raspberry Pi 4 Model B abgerufen wurde.

Wenn Sie Anfragen größer als 4KB stellen möchten, verwenden Sie dieses großartige Skript von Horac auf einem Raspi und führen Sie den POC mit auf 65535 (0xffff) geändertem wlength aus.

Ziel 2: Kinetis K82

Die Puffer-Überlese-Sicherheitslücke wird bei der GET Status-Other-Anfrage eines eingebetteten USB-Hosts beobachtet. Ein Angreifer kann bis zu 64KB Antwortdaten anfordern, indem er eine USB-Anfrage zum Senden von GET Status-Other erstellt und den Wert „wlength“ auf 65535 Bytes ändert. Das K82-USB-Gerät sendet erfolgreich 64KB Daten.

Gerätedetails:

Target Dev Board: FRDM-K82F USB Host: Ubuntu Laptop oder Raspberry Pi

root@kitploit:~
sudo python3 K82_USB.py 

Hinweis 1: Der Pufferüberlese von 4KB kann im Ubuntu-System aufgrund der Einschränkung von Libusb „MAX_CTRL_BUFFER_LENGTH“ angefordert werden. Dies kann in einem Raspberry Pi geändert werden und 64KB können angefordert werden.

Hinweis 2: Die Sicherheitslücke in K82 wird nur reproduziert, wenn die USB-Anfragen nach GET status-Device, Interface, Endpoint und andere nacheinander erfolgen, um die Sicherheitslücke auszulösen. Dies kann erreicht werden, indem die entwickelten PoC-Skripte nach mehreren ISP-Resets ausgeführt werden.

Wenn Sie Anfragen größer als 4KB stellen möchten, verwenden Sie dieses großartige Skript von Horac auf einem Raspi und führen Sie den POC mit auf 65535 (0xffff) geändertem wlength aus.

Tool herunterladen