Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
ツール/GitHubGitHub/jeromeyoung/cve-2021-40154
組み込みシステムセキュリティ脆弱性分析エクスプロイトファジングハードウェアセキュリティバイナリエクスプロイト
GitHubjeromeyoung/cve-2021-40154

CVE-2021-40154

LPC55S69およびK82シリーズで発見されたBootROMの脆弱性をテストするためのPoC

リポジトリを見る
6324年前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

CVE-2021-40154

LPC55S69 および K82 USB インシステムプログラミング (ISP) バッファオーバーリードの脆弱性

LPC55S69 および K82 シリーズ Revision A2 で発見された BootROM の脆弱性をテストするための PoC です。この脆弱性は、LPC55S69 の新しい Revision 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) モードを提供します。USB ISP モードは、NXP の文書化された更新コマンドを介してファームウェアを更新するための組み込みホストを提供します。

ISP は LPC55S69 および K82 の BootROM の一部であり、特定のレジスタビット、ISP ピン、イメージヘッダ定義の値に応じてトリガされます。LPC55S69 では、USB HID クラスを使用して USB0/1 ポートのイメージをダウンロードします。同様に、K82 では ROM 内の Kinetis ブートローダーが USB HID クラスとして USB ペリフェラルを介したフラッシュへのデータロードをサポートします。

LPC55S69 および K82 シリーズの IC の USB ISP は、以下の 3 つのエンドポイントを使用します:

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

バッファオーバーリードの脆弱性は、USB ホスト列挙に使用される USB Control エンドポイント 0 で観察されました。

概念実証

ターゲット 1: LPC55S69

バッファオーバーリードの脆弱性は、組み込み USB ホストからの GET Descriptor Configuration リクエストで観察されます。攻撃者は、GET Descriptor Configuration を送信する USB リクエストを作成する際に、「wlength」の値を 65535 バイトに変更することで、最大 16KB の応答データを要求できます。LPC556S9 は、16KB のデータが USB TX バッファにコピーされ、ホストへの送信に成功すると、制限およびリセットが行われます。

デバイスの詳細:

ターゲット開発ボード: LPC55S69 – EVK RevA2 USB ホスト: Ubuntu 20.04 または Raspberry-pi 4 Model B

脆弱性を再現する手順:

  1. LPC55S69 – EVK RevA2 開発ボードでは、ISP ボタンとリセットボタンを押すことで USB ISP がトリガされます。
  2. USB 1 High speed ポートを Ubuntu ラップトップまたは Raspberry-pi に接続します。
  3. LPC ボードは、図 1 に示すように USB Composite デバイスとして検出されます。

図 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 になります。

Figure 2

Figure 3

注記 1: バッファオーバーリードの 4KB は、Libusb の「MAX_CTRL_BUFFER_LENGTH」の制限により Ubuntu システムで要求できます。これは Raspberry-pi システムでは変更可能であり、16KB を要求できます。添付のファームウェア「LPC.bin」は、raspberry-pi 4 model b を使用して LPC55s69-EVK ボードから取得したものです。

4KB を超えるリクエストを発行したい場合は、Horac が作成したこの素晴らしいスクリプトを Raspi で使用し、wlength を 65535(0xffff) に変更して PoC を実行してください。

ターゲット 2: Kinetis K82

バッファオーバーリードの脆弱性は、組み込み USB ホストからの GET Status-Other リクエストで観察されます。攻撃者は、GET status-Other を送信する USB リクエストを作成する際に、「wlength」の値を 65535 バイトに変更することで、最大 64KB の応答データを要求できます。K82 USB デバイスは 64KB のデータを正常に送信します。

デバイスの詳細:

ターゲット開発ボード: FRDM-K82F USB ホスト: Ubuntu ラップトップまたは Raspberry-pi

root@kitploit:~
sudo python3 K82_USB.py 

注記 1: バッファオーバーリードの 4KB は、Libusb の「MAX_CTRL_BUFFER_LENGTH」の制限により Ubuntu システムで要求できます。これは Raspberry-pi では変更可能であり、64KB を要求できます。

注記 2: K82 の脆弱性は、USB リクエストが GET status-Device、Interface、Endpoint、その他の順に続けて発生した場合にのみ再現され、脆弱性がトリガされます。これは、複数回の ISP リセット後に開発した PoC スクリプトを実行することで実現できます。

4KB を超えるリクエストを発行したい場合は、Horac が作成したこの素晴らしいスクリプトを Raspi で使用し、wlength を 65535(0xffff) に変更して PoC を実行してください。

ツールをダウンロード