漏洞概述
CVE-2025-13877 是一个由 NocoBase Docker 部署中不安全的默认 JWT 密钥使用导致的认证绕过漏洞。由于官方的一键 Docker 部署配置历史上提供了一个公开的默认 JWT 密钥,攻击者无需任何合法凭据即可伪造有效的 JWT 令牌。通过使用已知的用户 ID(通常是管理员账户)构造令牌,攻击者可以直接绕过认证和授权检查。
影响范围
成功利用此漏洞可使攻击者:
- 完全绕过身份验证
- 冒充任意用户
- 获取完全的管理员权限
- 访问敏感业务数据
- 创建、修改或删除用户
- 访问云存储凭据和其他受保护的秘密
该漏洞可被远程利用,无需身份验证,并且存在公开的概念验证利用代码。此问题在影响上等同于其他 JWT 密钥暴露漏洞,如 CVE-2024-43441 和 CVE-2025-30206。使用默认 Docker 配置而未显式覆盖 JWT 密钥的部署均受影响。
受影响的版本
npm包: @nocobase/auth (npm)
受影响版本:
-
= 1.9.0, <= 1.9.21
- <= 1.9.0-beta.17
-
= 2.0.0-alpha.1, <= 2.0.0-alpha.51
已修复版本:
- NocoBase ≥ 1.9.23
- NocoBase ≥ 1.9.0-beta.18
- NocoBase ≥ 2.0.0-alpha.52
修复方案
✅ 该漏洞已通过安全的 JWT 密钥管理重新设计得到完全修复。
修复措施强制执行以下安全保证:
- JWT 密钥不再允许回退到公共默认值。
- 密钥必须满足以下条件之一:
- 由用户显式提供,或
- 在首次启动时使用密码学强随机性安全生成。
- 生成的密钥以受限的文件系统权限安全地持久化。
- 无效或弱密钥值会立即导致启动失败。
临时缓解措施
如果无法立即升级,必须执行以下临时缓解措施以降低风险:
- 通过环境变量
APP_KEY显式设置一个强、随机生成的 JWT 密钥。 - 重启所有正在运行的 NocoBase 实例,使新密钥生效。
- 使所有现有的 JWT 会话失效,强制用户重新进行完整身份验证。
- 验证以下位置中不存在默认密钥值:
docker-compose.yml.env文件- Kubernetes Secrets
参考链接
- CVE 记录: CVE-2025-13877
- VulDB 条目: https://vuldb.com/?id.334033
- 公开利用证明: https://gist.github.com/H2u8s/f3ede60d7ecfe598ae452aa5a8fbb90d
- 受影响的默认 Docker 配置:
- https://github.com/nocobase/nocobase/blob/main/docker/app-mysql/docker-compose.yml#L13
- https://github.com/nocobase/nocobase/blob/main/docker/app-mariadb/docker-compose.yml#L13
- https://github.com/nocobase/nocobase/blob/main/docker/app-postgres/docker-compose.yml#L11
- https://github.com/nocobase/nocobase/blob/main/docker/app-sqlite/docker-compose.yml#L11
- 官方部署文档:
漏洞详情
严重性: 中等 (CVSS 分数:6.3) CVSS v4 向量: CVSS:4.0/AV:N/AC:H/AT:N/PR:N/UI:N/VC:L/VI:L/VA:L/SC:N/SI:N/SA:N
弱点:
- CWE-321: 使用硬编码的加密密钥 - 产品使用了硬编码的、不可更改的加密密钥。
- CWE-1320: 对出站错误消息和警报信号的保护不当 - 不受信任的代理可以禁用关于信号条件超过限制的警报或处理此类警报的响应机制。
来源: nocobase/nocobase
报告者: H2u8s