Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2021-40154 — POC para testar a vulnerabilidade BootROM encontrada nas séries LPC55S69 e K82. | Kitploit
Ferramentas/GitHubGitHub/jeromeyoung/cve-2021-40154
Segurança de Sistemas EmbarcadosAnálise de VulnerabilidadesExploraçãoFuzzingSegurança de HardwareExploração de Binários
GitHubjeromeyoung/cve-2021-40154

CVE-2021-40154

POC para testar a vulnerabilidade BootROM encontrada nas séries LPC55S69 e K82.

Ver Repositório
6310há 4 anosAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

CVE-2021-40154

Vulnerabilidades de Buffer Over Read na Programação no Sistema (ISP) via USB do LPC55S69 e K82

POC para testar a vulnerabilidade de BootROM encontrada na Revisão A2 das séries LPC55S69 e K82. A vulnerabilidade é corrigida em dispositivos mais novos com a nova Revisão A3 para o LPC55S69.

Dispositivos Vulneráveis:

Confirmados: MCUs das séries LPC55S69 e K82

Suspeitos: outros MCUs da série NXP com stack de USB ISP semelhante - séries Kinetis K e RT

Resumo da Vulnerabilidade:

Uma vulnerabilidade de buffer over read foi observada no modo de Programação no Sistema (ISP) via USB das séries de microcontroladores NXP LPC55s69 e Kinetis K82. Quando explorada, a vulnerabilidade permite que um atacante leia 16KB (LPC55S69) e 64KB (K82) de dados da memória flash protegida.

Detalhes Técnicos:

Os MCUs NXP LPC55S69 e K82 fornecem modos de Programação no Sistema (ISP) para atualização em campo do firmware do MCU usando periféricos como USB, SPI, UART e I2C. O modo USP ISP fornece um host embarcado para atualizar o firmware por meio dos comandos de atualização documentados da NXP.

O ISP faz parte do BootROM do LPC55S69 e K82 e é acionado dependendo dos valores de certos bits de registradores, do pino ISP e da definição do cabeçalho da imagem. Para o LPC55S69, a classe USB HID é usada para baixar uma imagem da porta USB0/1 e, de forma semelhante, para o K82, o Kinetis Bootloader na ROM suporta carregar dados na flash via periférico USB como uma classe USB HID.

O USB ISP dos ICs das séries LPC55S69 e K82 usa três (3) endpoints, listados abaixo:

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

A vulnerabilidade de buffer over read foi observada no endpoint 0 de controle USB, que é usado para enumeração do host USB.

Prova de Conceito

Alvo 1: LPC55S69

A vulnerabilidade de buffer over read é observada na solicitação GET Descriptor Configuration de um host USB embarcado. Um atacante pode solicitar até 16KB de dados de resposta ao criar uma solicitação USB para enviar GET Descriptor Configuration, modificando o valor de “wlength” para 65535 bytes. LPC556S9 limita e reinicia quando 16KB de dados são copiados para o buffer TX USB e transmitidos com sucesso ao host.

Detalhes do Dispositivo:

Placa de desenvolvimento alvo: LPC55S69 – EVK RevA2 Host USB: Ubuntu 20.04 ou Raspberry-pi 4 Model B

Passos para reproduzir a vulnerabilidade:

  1. Na placa de desenvolvimento LPC55S69 – EVK RevA2, o USB ISP é acionado pressionando o botão ISP e o botão de reset.
  2. Conecte a porta USB 1 de alta velocidade a um laptop Ubuntu ou a um Raspberry-pi.
  3. A placa LPC é detectada como um dispositivo composto USB, conforme documentado na Figura 1.

Figura 1: Utilitário dmesg do Ubuntu mostrando detalhes do dispositivo 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. Conecte um analisador USB entre a placa alvo e o PC, ou use o módulo do kernel Linux “usbmon” para capturar pacotes USB:
  • Se estiver usando o USBmon no Ubuntu, execute este comando “sudo modprobe usbmon”.
  • Ao usar “lsusb”, anote o barramento e o endereço do dispositivo.
  • Execute “sudo wireshark”, conecte-se à interface USBMON1/2 de acordo com o número do barramento do “lsusb”.
  1. No Wireshark, filtre o endereço do dispositivo USB de acordo com o número do barramento do “lsusb”.
  2. Execute a Prova de Conceito (PoC) “sudo python3 LPC_USB.py” no Ubuntu. Para executar o script Python com sucesso, os requisitos abaixo são necessários no PC host USB: a. Instale o Python 3+ b. Instale o módulo “pyusb”
sudo python3 LPC_USB.py 
  1. Verifique o buffer overflow verificando a solicitação e a resposta dos traces USB, conforme documentado pela Figura 2; a Figura 3 mostra, em vez disso, o trace do analisador USB. A resposta USB seria de 4KB.

Figura 2

Figura 3

Nota 1: A leitura de buffer over read de 4KB pode ser solicitada no sistema Ubuntu devido à restrição do Libusb “MAX_CTRL_BUFFER_LENGTH”. Isso pode ser modificado em um sistema Raspberry-pi e 16KB podem ser solicitados. O firmware anexado “LPC.bin” foi recuperado da placa LPC55s69-EVK usando um raspberry-pi 4 model b.

Se você quiser emitir solicitações maiores que 4KB, use este script incrível criado por Horac em um Raspi e execute a POC com wlength alterado para 65535(0xffff).

Alvo 2: Kinetis K82

A vulnerabilidade de buffer over read é observada na solicitação GET Status-Other de um host USB embarcado. Um atacante pode solicitar até 64KB de dados de resposta ao criar uma solicitação USB para enviar GET status-Other, modificando o valor de “wlength” para 65535 bytes. O dispositivo USB K82 envia com sucesso 64KB de dados.

Detalhes do Dispositivo:

Placa de desenvolvimento alvo: FRDM-K82F Host USB: laptop Ubuntu ou Raspberry-pi

sudo python3 K82_USB.py 

Nota 1: A leitura de buffer over read de 4KB pode ser solicitada no sistema Ubuntu devido à restrição do Libusb “MAX_CTRL_BUFFER_LENGTH”. Isso pode ser modificado em um Raspberry-pi e 64KB podem ser solicitados.

Nota 2: a vulnerabilidade no K82 é reproduzida somente quando as solicitações USB para GET status-Device, Interface, Endpoint e outras ocorrem subsequentemente para acionar a vulnerabilidade. Isso pode ser alcançado executando os scripts de POC desenvolvidos após múltiplos resets de ISP.

Se você quiser emitir solicitações maiores que 4KB, use este script incrível criado por Horac em um Raspi e execute a POC com wlength alterado para 65535(0xffff).

Baixar ferramenta