Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2021-40154 — LPC55S69 및 K82 시리즈에서 발견된 BootROM 취약점을 테스트하기 위한 POC | Kitploit
도구/GitHubGitHub/jeromeyoung/cve-2021-40154
Embedded Systems SecurityVulnerability AnalysisExploitationFuzzingHardware SecurityBinary Exploitation
GitHubjeromeyoung/cve-2021-40154

CVE-2021-40154

LPC55S69 및 K82 시리즈에서 발견된 BootROM 취약점을 테스트하기 위한 POC

저장소 보기
6324년 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2021-40154

LPC55S69 및 K82 USB 시스템 내 프로그래밍(ISP) 버퍼 오버 리드 취약점

LPC55S69 및 K82 시리즈 개정 A2에서 발견된 BootROM 취약점을 테스트하기 위한 POC입니다. 이 취약점은 LPC55S69의 새로운 개정 A3가 적용된 최신 장치에서 수정되었습니다.

취약한 장치:

확인됨: LPC55S69 및 K82 시리즈 MCU

의심됨: 유사한 USB ISP 스택을 가진 다른 NXP 시리즈 MCU - Kinetis K 시리즈 및 RT 시리즈

취약점 요약:

NXP LPC55s69 및 Kinetis K82 마이크로컨트롤러 시리즈의 USB 시스템 내 프로그래밍(ISP) 모드에서 버퍼 오버 리드 취약점이 관찰되었습니다. 악용될 경우, 이 취약점을 통해 공격자는 보호된 플래시 메모리에서 16KB(LPC55S69) 및 64KB(K82)의 데이터를 읽을 수 있습니다.

기술 세부 사항:

NXP LPC55S69 및 K82 MCU는 USB, SPI, UART 및 I2C와 같은 주변 장치를 사용하여 MCU 펌웨어의 현장 업데이트를 위한 시스템 내 프로그래밍(ISP) 모드를 제공합니다. USP ISP 모드는 NXP의 문서화된 업데이트 명령을 통해 펌웨어를 업데이트할 수 있는 내장 호스트를 제공합니다.

ISP는 LPC55S69 및 K82 BootROM의 일부이며, 특정 레지스터 비트, ISP 핀 및 이미지 헤더 정의 값에 따라 트리거됩니다. LPC55S69의 경우 USB HID 클래스를 사용하여 USB0/1 포트의 이미지를 다운로드하고, 마찬가지로 K82의 경우 ROM의 Kinetis 부트로더가 USB HID 클래스로 USB 주변 장치를 통해 플래시에 데이터를 로드하는 것을 지원합니다.

LPC55S69 및 K82 시리즈 IC의 USB ISP는 모두 세 개의 엔드포인트를 사용하며, 아래에 나열되어 있습니다:

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

버퍼 오버 리드 취약점은 USB 호스트 열거에 사용되는 USB 제어 엔드포인트 0에서 관찰되었습니다.

개념 증명

대상 1: LPC55S69

버퍼 오버 리드 취약점은 내장 USB 호스트로부터의 GET Descriptor Configuration 요청에서 관찰됩니다. 공격자는 "wlength" 값을 65535바이트로 수정하여 GET Descriptor Configuration을 보내는 USB 요청을 조작함으로써 최대 16KB의 응답 데이터를 요청할 수 있습니다. LPC556S9는 16KB의 데이터가 USB TX 버퍼에 복사되어 호스트로 성공적으로 전송될 때 제한을 두고 리셋됩니다.

장치 세부 사항:

대상 개발 보드: LPC55S69 – EVK RevA2 USB 호스트: Ubuntu 20.04 또는 Raspberry-pi 4 Model B

취약점 재현 단계:

  1. LPC55S69 – EVK RevA2 개발 보드에서 USB ISP는 ISP 버튼과 리셋 버튼을 눌러 트리거됩니다.
  2. USB 1 고속 포트를 Ubuntu 노트북 또는 Raspberry-pi에 연결합니다.
  3. LPC 보드는 그림 1에 문서화된 대로 USB 복합 장치로 감지됩니다.

그림 1: Ubuntu dmesg 유틸리티가 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. 대상 보드와 PC 사이에 USB 분석기를 연결하거나 Linux 커널 모듈 “usbmon”을 사용하여 USB 패킷을 캡처합니다:
  • Ubuntu에서 USBmon을 사용하는 경우, “sudo modprobe usbmon” 명령을 실행합니다.
  • “lsusb”를 사용하는 동안 버스 및 장치 주소를 기록합니다.
  • “sudo wireshark”를 실행하고 “lsusb”의 버스 번호를 참조하여 USBMON1/2 인터페이스에 연결합니다.
  1. Wireshark에서 “lsusb”의 버스 번호를 참조하여 USB 장치 주소를 필터링합니다.
  2. Ubuntu에서 개념 증명(PoC) “sudo python3 LPC_USB.py”를 실행합니다. Python 스크립트를 성공적으로 실행하려면 USB 호스트 PC에 아래 요구 사항이 필요합니다: a. Python 3+ 설치 b. “pyusb” 모듈 설치
root@kitploit:~
sudo python3 LPC_USB.py 
  1. 그림 2에 문서화된 대로 USB 트레이스에서 요청 및 응답을 확인하여 버퍼 오버플로를 확인합니다. 대신 그림 3은 USB 분석기 트레이스를 보여줍니다. USB 응답은 4KB입니다.

그림 2

그림 3

참고 1: Ubuntu 시스템에서는 Libusb “MAX_CTRL_BUFFER_LENGTH”의 제한으로 인해 4KB의 버퍼 오버 리드를 요청할 수 있습니다. 이는 Raspberry-pi 시스템에서 수정할 수 있으며 16KB를 요청할 수 있습니다. Raspberry-pi 4 모델 b를 사용하여 LPC55s69-EVK 보드에서 검색된 첨부 펌웨어 “LPC.bin”.

4KB보다 큰 요청을 발행하려면 Raspi에서 Horac이 만든 이 멋진 스크립트를 사용하고 wlength를 65535(0xffff)로 변경하여 POC를 실행하십시오.

대상 2: Kinetis K82

버퍼 오버 리드 취약점은 내장 USB 호스트로부터의 GET Status-Other 요청에서 관찰됩니다. 공격자는 "wlength" 값을 65535바이트로 수정하여 GET status-Other를 보내는 USB 요청을 조작함으로써 최대 64KB의 응답 데이터를 요청할 수 있습니다. K82 USB 장치는 64KB의 데이터를 성공적으로 전송합니다.

장치 세부 사항:

대상 개발 보드: FRDM-K82F USB 호스트: Ubuntu 노트북 또는 Raspberry-pi

root@kitploit:~
sudo python3 K82_USB.py 

참고 1: Ubuntu 시스템에서는 Libusb “MAX_CTRL_BUFFER_LENGTH”의 제한으로 인해 4KB의 버퍼 오버 리드를 요청할 수 있습니다. 이는 Raspberry-pi에서 수정할 수 있으며 64KB를 요청할 수 있습니다.

참고 2: K82의 취약점은 GET status-Device, Interface, Endpoint 및 기타에 대한 USB 요청이 취약점을 트리거하기 위해 순차적으로 발생해야만 재현됩니다. 이는 여러 번의 ISP 리셋 후에 개발된 PoC 스크립트를 실행하여 달성할 수 있습니다.

4KB보다 큰 요청을 발행하려면 Raspi에서 Horac이 만든 이 멋진 스크립트를 사용하고 wlength를 65535(0xffff)로 변경하여 POC를 실행하십시오.

도구 다운로드