Ash Authentication Phoenix会话过期漏洞分析与修复指南

本文详细分析了CVE-2025-4754漏洞,该漏洞存在于ash_authentication_phoenix库中,涉及会话令牌在用户登出后仍保持有效的问题,提供了修复方案和安全建议。

CVE-2025-4754:Ash Authentication Phoenix会话过期不足漏洞

漏洞概述

CVE ID: CVE-2025-4754
GHSA ID: GHSA-f7gq-h8jv-h3cq
严重程度: 低危 (CVSS评分2.3)
影响版本: <= 2.9.0
修复版本: 2.10.0

漏洞描述

影响

会话令牌在用户登出后仍在服务器端保持有效,造成以下安全风险:

  • 被泄露的令牌(通过XSS、网络拦截或设备盗窃获取)在用户登出后仍可继续使用
  • 数据库中存储的会话仍会过期,这限制了漏洞被利用的时间窗口
  • 用户无法在共享或可能被入侵的设备上完全使其会话失效
  • 默认情况下,更改密码会使所有其他会话失效,因此更改密码作为安全措施是有效的
  • 可能导致不符合要求完全会话失效的安全框架的合规性问题

修复方案

补丁

升级到2.10.0版本。升级后,用户必须更新其AuthController实现,使用新的clear_session/2函数及其OTP应用名称。您将通过编译时错误得到提示。

如果您在tokens部分没有将require_token_presence_for_authentication?设置为true,您将看到另一个错误:

1
2
** (Spark.Error.DslError) authentication -> session_identifier:
Must set `authentication.session_identifier` to either `:jti` or `:unsafe`.

为了在不直接在会话中存储令牌的情况下在登出时撤销会话,我们必须使用某种唯一标识符来实现。如果可能,您应该优先启用require_token_presence_for_authentication?,而不是将其设置为:jti。请注意,无论您在此处做什么,如果您之前没有将require_token_presence_for_authentication?设置为true,将其设置为true或将authentication.session_identifier设置为:jti将使所有当前认证的用户登出。

临时解决方案

您可以在认证控制器的logout/2处理程序中手动撤销令牌。

技术细节

CVSS v4基础指标

攻击向量: 网络
攻击复杂度: 低
攻击要求: 存在
所需权限: 无
用户交互: 被动

脆弱系统影响指标

机密性: 低
完整性: 低
可用性: 无

弱点分类

CWE: CWE-613 - 会话过期不足

参考链接

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计