Ash Authentication Phoenix 存在“会话过期不充分”漏洞 · CVE-2025-4754
漏洞概述
Erlang 包 ash_authentication_phoenix(版本 <= 2.9.0)中存在一个“会话过期不充分”的漏洞,已被分配 CVE 编号 CVE-2025-4754 和 GHSA ID GHSA-f7gq-h8jv-h3cq。该漏洞的严重等级被评估为低危,CVSS v4 总体评分为 2.3。
影响 该漏洞导致会话令牌在用户登出后,在服务器端仍然有效,从而产生安全缺口:
-
通过 XSS、网络拦截或设备盗窃等手段获取的已泄露令牌,在用户登出后仍然可以继续使用。
-
用户无法在使用共享设备或可能已遭泄露的设备上登出时,完全使其所有会话失效。
-
默认情况下,更改密码会使所有其他会话失效,因此作为一种安全措施,更改密码是有效的。
-
可能导致不符合要求完全会话失效的安全框架的合规性问题。
受影响版本 版本号小于等于 2.9.0。
已修复版本 版本 2.10.0。
修复方案
升级到版本 2.10.0。升级后,用户必须更新其 AuthController 的实现,以使用新的 clear_session/2 函数并传入其 OTP 应用名称。你将在编译时收到相应的错误提示,引导你进行修改。
如果你在配置的 tokens 部分没有将 require_token_presence_for_authentication? 设置为 true,你将会看到另一个错误:
|
|
为了在登出时撤销那些未直接将令牌存储在会话中的会话,我们必须有一个唯一的标识符来进行操作。如果可能,你应该优先启用 require_token_presence_for_authentication?,而不是将其设置为 :jti。请注意,无论你在此处做什么,如果你之前没有将 require_token_presence_for_authentication? 设置为 true,那么将其设置为 true 或将 authentication.session_identifier 设置为 :jti 都将导致你所有当前已认证的用户被登出。
临时缓解措施
你可以在认证控制器(auth controller)的 logout/2 处理函数中手动撤销令牌。
参考链接
- GHSA-f7gq-h8jv-h3cq
- team-alembic/ash_authentication_phoenix@a3253fb
- https://nvd.nist.gov/vuln/detail/CVE-2025-4754
- team-alembic/ash_authentication_phoenix#634
CVSS v4 基本指标
- 攻击向量:网络
- 攻击复杂性:低
- 攻击要求:存在
- 所需权限:无
- 用户交互:被动
- 受影响系统影响:机密性 - 低,完整性 - 低,可用性 - 无
- 后续系统影响:机密性 - 无,完整性 - 无,可用性 - 无
弱点
- CWE-ID: CWE-613
- 描述: 会话过期不充分。根据 WASC 的定义,当网站允许攻击者重用旧的会话凭据或会话 ID 进行授权时,即存在此问题。
致谢
- 修复审核者: jimsynz
- 修复开发者: zachdaniel
- 分析师: mbuhot, maennchen