# File Browser 用户名枚举漏洞
## 概述
File Browser 的 `JSONAuth.Auth` 函数在版本 2.55.0 之前存在逻辑缺陷,导致攻击者可通过测量响应时间枚举有效用户名。
## 影响版本
- 受影响版本:低于 2.55.0 的所有版本
- 修复版本:2.55.0
## 细节
- 漏洞位于 `/api/login` 接口的认证逻辑中。
- 当用户名不存在时,函数立即返回,不执行后续操作。
- 当用户名存在时,系统调用 `users.CheckPwd` 使用 bcrypt 验证密码,该过程计算开销大、耗时较长。
- 由于 bcrypt 验证的延迟,存在“短路”判断,导致不同用户名输入产生可测量的时间差异。
- 攻击者可通过发送大量登录请求并分析响应时间,判断用户名是否存在。
## 影响
- 未经身份验证的攻击者可利用此漏洞进行用户名枚举。
- 泄露有效用户名信息,为后续攻击(如暴力破解、凭证填充)提供条件。
是否为 Web 类漏洞: 未知
判断理由:
| # | POC 描述 | 源链接 | 神龙链接 |
|---|
标题: Username Enumeration via Timing Attack in /api/login · Advisory · filebrowser/filebrowser · GitHub -- 🔗来源链接
标签:x_refsource_CONFIRM
神龙速读:
### 关键信息汇总
#### 漏洞概述
- **漏洞类型**: 用户名枚举漏洞,通过时间攻击 (/api/login)
- **CVE ID**: CVE-2026-23849
- **CVSS 评分**: 5.3/10 (中等)
- **受影响版本**: < 2.54.0
- **修复版本**: 2.55.0
#### 漏洞细节
- **业务逻辑缺陷**: 由于`JSONAuth.Auth`函数中的逻辑错误, 导致未认证的攻击者可以通过测量 `/api/login` 端点的响应时间来枚举有效用户名。
- **存在漏洞的原因**: 数据库中找不到用户名时,函数立即返回;当存在用户名时,代码继续使用 `bcrypt`进行密码验证,造成响应时间差异。
- **响应时间差异**:
- 非法用户: ~1ms
- 合法用户: ~50ms+
#### 证明概念 (PoC)
- **Python 脚本**: 自动化攻击,测量响应时间以检测合法用户名。
#### 影响
- **安全风险**: 使未认证的远程攻击者可枚举有效用户名,可能会触发针对特定用户账号的暴力破解或凭据填充攻击。
标题: Merge commit from fork · filebrowser/filebrowser@24781ba · GitHub -- 🔗来源链接
标签:x_refsource_MISC
神龙速读:
### 关键信息
- **漏洞类型**: 用户枚举定时攻击(Timing Attack)在JSON认证中
- **修复措施**: 添加了一个虚拟的bcrypt哈希值
- **代码变更**: 文件 `auth/json.go` 中的 `MethodJSONAuth` 方法被修改
- **变更描述**: 通过引入一个有效的虚拟bcrypt哈希值,防止攻击者利用登录尝试的时间差异来猜测用户是否存在
- **代码片段示例**:
```go
const dummyHash = "$2a$10$mEMeOLnXzqaWQXauLRbRlzb3IgLHa26pfOn/GiU9b.wK1m"
// 代码逻辑中引入了该虚拟哈希值, 用于在用户不存在或错误密码时使用, 以统一响应时间
```
暂无评论