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,编译将失败,并显示指向此公告的消息。如果您确信自己不受影响,可以绕过此错误。

变通方案

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

参考

技术细节

  • 严重程度:中等
  • CVSS评分:5.3
  • 弱点:CWE-306 关键功能缺少身份验证
  • 受影响版本:< 4.7.0
  • 修复版本:4.7.0

该漏洞涉及身份验证流程中的安全设计缺陷,通过将确认机制从GET请求改为需要用户显式交互的POST请求来解决自动确认问题。

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