Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
CVE-2021-40154 — PoC для тестирования уязвимости BootROM, обнаруженной в LPC55S69 и серии K82 | Kitploit
Инструменты/GitHubGitHub/jeromeyoung/cve-2021-40154
Безопасность встроенных системАнализ уязвимостейЭксплуатацияФаззингАппаратная БезопасностьЭксплуатация Бинарных Файлов
GitHubjeromeyoung/cve-2021-40154

CVE-2021-40154

PoC для тестирования уязвимости BootROM, обнаруженной в LPC55S69 и серии K82

Репозиторий
633 лет назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

CVE-2021-40154

Уязвимости чтения за пределами буфера в USB-режиме внутрисистемного программирования (ISP) для LPC55S69 и K82

POC для проверки уязвимости BootROM, обнаруженной в LPC55S69 и K82 Series Revision A2. Уязвимость устранена в новых устройствах с Revision A3 для LPC55S69.

Уязвимые устройства:

Подтверждено: микроконтроллеры серий LPC55S69 и K82

Предположительно: другие серии микроконтроллеров NXP с аналогичным стеком USB ISP – серии Kinetis K и RT

Краткое описание уязвимости:

Уязвимость чтения за пределами буфера была обнаружена в режиме USB-внутрисистемного программирования (ISP) микроконтроллеров NXP LPC55s69 и Kinetis K82. При эксплуатации уязвимость позволяет злоумышленнику прочитать 16 КБ (LPC55S69) и 64 КБ (K82) данных из защищенной флеш-памяти.

Технические подробности:

Микроконтроллеры NXP LPC55S69 и K82 предоставляют режимы внутрисистемного программирования (ISP) для полевого обновления прошивки с помощью периферийных интерфейсов, таких как USB, SPI, UART и I2C. Режим USP ISP предоставляет встроенный хост для обновления прошивки с помощью документированных команд обновления NXP.

ISP является частью BootROM LPC55S69 и K82 и запускается в зависимости от значений определенных битов регистров, вывода ISP и определения заголовка образа. Для LPC55S69 используется класс USB HID для загрузки образа через порт USB0/1, а для K82 загрузчик Kinetis в ROM поддерживает загрузку данных во флеш-память через USB-периферию как класс USB HID.

Микросхемы серий LPC55S69 и K82 используют три (3) конечные точки USB ISP, которые перечислены ниже:

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

Уязвимость чтения за пределами буфера была обнаружена для контрольной конечной точки USB 0, используемой для перечисления хоста USB.

Доказательство концепции

Цель 1: LPC55S69

Уязвимость чтения за пределами буфера наблюдается при запросе GET Descriptor Configuration от встроенного USB-хоста. Злоумышленник может запросить до 16 КБ данных ответа, сформировав USB-запрос на отправку GET Descriptor Configuration, изменив значение «wlength» на 65535 байт. LPC556S9 ограничивает и сбрасывает, когда 16 КБ данных копируется в TX-буфер USB и успешно передается хосту.

Детали устройства:

Целевая плата: LPC55S69 – EVK RevA2 USB-хост: Ubuntu 20.04 или Raspberry-pi 4 Model B

Шаги для воспроизведения уязвимости:

  1. На плате разработки LPC55S69 – EVK RevA2 USB ISP запускается нажатием кнопки ISP и кнопки сброса.
  2. Подключите порт USB 1 High Speed к ноутбуку с Ubuntu или Raspberry-pi.
  3. Плата LPC определяется как составное USB-устройство, как показано на Рисунке 1.

Рисунок 1: Утилита dmesg в Ubuntu, показывающая детали USB-устройства

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. Подключите USB-анализатор между целевой платой и ПК или используйте модуль ядра Linux «usbmon» для захвата USB-пакетов:
    • Если используется USBmon в Ubuntu, выполните команду «sudo modprobe usbmon».
    • При использовании «lsusb» запишите номер шины и адрес устройства.
    • Запустите «sudo wireshark», подключитесь к интерфейсу USBMON1/2, используя номер шины из «lsusb».
  2. В Wireshark отфильтруйте адрес USB-устройства по номеру шины из «lsusb».
  3. Запустите Proof of Concept (PoC) «sudo python3 LPC_USB.py» в Ubuntu. Для успешного выполнения Python-скрипта на USB-хосте необходимы следующие требования: a. Установите Python 3+ b. Установите модуль «pyusb»
root@kitploit:~
sudo python3 LPC_USB.py 
  1. Проверьте переполнение буфера, просмотрев запрос и ответ из USB-трассировок, как показано на Рисунке 2; Рисунок 3, в свою очередь, показывает трассировку USB-анализатора. Ответ USB будет 4 КБ.

Рисунок 2

Рисунок 3

Примечание 1: Чтение за пределами буфера объемом 4 КБ может быть запрошено в системе Ubuntu из-за ограничения Libusb «MAX_CTRL_BUFFER_LENGTH». Это можно изменить в системе Raspberry-pi, и можно запросить 16 КБ. Прилагаемая прошивка «LPC.bin» получена с платы LPC55s69-EVK с использованием raspberry-pi 4 model b.

Если вы хотите отправлять запросы больше 4 КБ, используйте этот замечательный скрипт, созданный Horac на Raspi, и запустите PoC с измененным wlength на 65535 (0xffff).

Цель 2: Kinetis K82

Уязвимость чтения за пределами буфера наблюдается при запросе GET Status-Other от встроенного USB-хоста. Злоумышленник может запросить до 64 КБ данных ответа, сформировав USB-запрос на отправку GET status-Other, изменив значение «wlength» на 65535 байт. USB-устройство K82 успешно отправляет 64 КБ данных.

Детали устройства:

Целевая плата: FRDM-K82F USB-хост: ноутбук с Ubuntu или Raspberry-pi

root@kitploit:~
sudo python3 K82_USB.py 

Примечание 1: Чтение за пределами буфера объемом 4 КБ может быть запрошено в системе Ubuntu из-за ограничения Libusb «MAX_CTRL_BUFFER_LENGTH». Это можно изменить в Raspberry-pi, и можно запросить 64 КБ.

Примечание 2: уязвимость в K82 воспроизводится только тогда, когда USB-запросы на GET status-Device, Interface, Endpoint и другие происходят последовательно, чтобы вызвать уязвимость. Это можно достичь путем запуска разработанных PoC-скриптов после нескольких сбросов ISP.

Если вы хотите отправлять запросы больше 4 КБ, используйте этот замечательный скрипт, созданный Horac на Raspi, и запустите PoC с измененным wlength на 65535 (0xffff).

Скачать инструмент