Ash身份验证库邮件链接自动点击漏洞分析与修复

本文详细分析了ash_authentication库中存在的账户确认漏洞CVE-2025-32782,该漏洞允许攻击者通过邮件客户端的自动链接点击功能恶意确认账户。文章包含漏洞影响、修复方案和具体实施步骤。

CVE-2025-32782:Ash身份验证库邮件链接自动点击账户确认漏洞

漏洞描述

影响

账户创建确认流程当前使用通过邮件发送的链接触发的GET请求。某些邮件客户端和安全工具(例如Outlook、病毒扫描程序和邮件预览器)可能会自动跟踪这些链接,无意中确认账户。这允许攻击者使用其他用户的邮箱注册账户,并可能通过受害者的邮件客户端自动确认。

此漏洞不允许攻击者接管或访问现有账户或私有数据,仅限于新账户的确认。

修复方案

补丁

版本4.7.0中已发布缓解措施。您还需要升级到ash_authentication_phoenix 2.6.0或更高版本才能利用确认的自动生成视图。修复更新了确认流程,要求明确的用户交互(例如点击确认页面上的按钮),而不是通过GET请求执行确认。这确保邮件客户端的自动链接预取或扫描不会无意中确认账户。

要缓解,请按照以下步骤操作:

  • 升级 ash_authentication >= 4.7.0
  • 升级 ash_authentication_phoenix >= 2.6.0(如果使用ash_authentication_phoenix)
  • 在确认策略中设置 require_interaction? true
  • 如果使用ash_authentication_phoenix,在路由器中添加confirm_route,放在auth_routes之上

设置 require_interaction? true

修改确认策略如下:

1
2
3
4
confirmation <strategy_name> do
  ...
  require_interaction? true
end

添加confirm_route到路由器

为了使用此新确认流程,您需要将其添加到路由器中以获得所需行为。它将添加一个新路由到新的确认页面LiveView。注意path和token_as_route_param?选项,需要这些选项以保持与当前默认值的向后兼容性。如果您以某种方式更改了这些路由,可能需要进行调整。

重要提示 - 放在auth_routes之上 如果使用path选项,并且它以/auth或您配置的auth_routes_prefix开头,请确保将其放在auth_routes之上。auth_routes贪婪地处理配置路径的所有路由。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
confirm_route(
  MyApp.Accounts.User,
  <confirmation_strategy_name>,
  auth_routes_prefix: "/auth",
  overrides: [MyAppWeb.AuthOverrides, AshAuthentication.Phoenix.Overrides.Default],
  # 使用这些选项保持当前发出的确认邮件兼容
  # 没有下面的选项,路由将默认到`/<the_strategy_name>/:token`
  path: "/auth/user/<confirmation_strategy_name>",
  token_as_route_param?: false
)

用户应尽快升级到版本4.7.0,并在确认策略中设置require_interaction?为true。这将把用于确认的GET请求更改为POST请求。

如果升级到此版本但未将require_interaction?设置为true,编译将失败,并显示链接到此公告的消息。如果您确信自己不受影响,可以绕过此错误。

替代方案

用户能否在不升级的情况下修复或补救漏洞?

您可以禁用确认路由并创建自己的live view。我们强烈建议您尽可能升级并利用内置视图。如果不使用提供的视图,您需要添加一个确认LiveView,该视图对旧确认URL执行POST而不是GET。通过将令牌作为参数从链接中取出,并将其作为隐藏字段添加到表单中来实现。该表单没有输入,只有一个按钮,用于发布到确认URL。如果使用Liveview,这将通过phx-trigger-action和phx-action完成。

参考

技术详情

严重程度

中等

CVSS评分

5.3

CVSS v3基础指标

  • 攻击向量:网络
  • 攻击复杂度:低
  • 所需权限:无
  • 用户交互:无
  • 范围:未更改
  • 机密性:无
  • 完整性:低
  • 可用性:无

弱点

CWE-306:关键功能缺少身份验证

受影响版本

< 4.7.0

修复版本

4.7.0

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