Ash Authentication Phoenix 会话过期不足漏洞详解

本文详细介绍了 CVE-2025-4754 漏洞,该漏洞影响 ash_authentication_phoenix 库,其问题在于用户注销后服务器会话令牌仍保持有效,导致安全风险。文章涵盖了影响范围、修复补丁、临时解决方案及详细的安全评分。

ash_authentication_phoenix 存在会话过期不足的问题 · CVE-2025-4754

平台: GitHub Advisory Database

: erlang / ash_authentication_phoenix (Erlang)

受影响版本: <= 2.9.0

已修复版本: 2.10.0

描述

影响

用户注销后,会话令牌在服务器端仍然有效,这造成了安全漏洞,具体表现为:

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

补丁

升级到版本 2.10.0。升级后,用户必须更新其 AuthController 实现,以使用新的 clear_session/2 函数并传入其 OTP 应用名称。您将在编译时收到错误提示,要求您进行此操作。 如果您未在令牌部分将 require_token_presence_for_authentication? 设置为 true,您将看到另一个错误:

1
2
3
** (Spark.Error.DslError) authentication -> session_identifier:
必须将 `authentication.session_identifier` 设置为 `:jti` 或 `:unsafe`。
...

为了在注销时撤销不直接存储在会话中的令牌对应的会话,我们必须有一个唯一的标识符来实现此操作。如果可能,您应优先启用 require_token_presence_for_authentication?,而不是将其设置为 :jti。请注意,无论您在此处进行何种操作,如果您之前没有将 require_token_presence_for_authentication? 设置为 true,那么将其设置为 true 或将 authentication.session_identifier 设置为 :jti 将会注销所有当前已认证的用户。

临时解决方案

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

参考

安全评分

严重程度: 低 CVSS 总体评分: 2.3 / 10

CVSS v4 基础指标

漏洞利用指标

  • 攻击向量: 网络
  • 攻击复杂度: 低
  • 攻击前提条件: 存在
  • 所需权限: 无
  • 用户交互: 被动

受影响的系统影响指标

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

后续系统影响指标

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

CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:P/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N

EPSS 分数

0.109% (第30百分位) 此分数估计此漏洞在未来30天内被利用的概率。数据由 FIRST 提供。

弱点

弱点: CWE-613 描述: 会话过期不足 根据 WASC 的定义,当网站允许攻击者重复使用旧的会话凭据或会话 ID 进行授权时,即存在会话过期不足的问题。在 MITRE 上了解更多信息。

标识符

  • CVE ID: CVE-2025-4754
  • GHSA ID: GHSA-f7gq-h8jv-h3cq

源代码

team-alembic/ash_authentication_phoenix

致谢

  • jimsynz: 修复方案审核者
  • zachdaniel: 修复方案开发者
  • mbuhot: 分析师
  • maennchen: 分析师
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计