Ash框架电子邮件自动点击账户确认漏洞深度解析

文章详细分析了Erlang的ash_authentication库中一个中等严重性的安全漏洞(CVE-2025-32782),该漏洞允许攻击者利用邮件客户端或安全工具的自动链接预取功能,在未经用户明确交互的情况下完成新账户的注册确认。

ash_authentication存在电子邮件链接自动点击账户确认漏洞

摘要

该漏洞(CVE-2025-32782)影响Erlang软件包ash_authentication的4.7.0以下版本。漏洞的核心问题在于账户创建时的确认流程。当前,确认操作是通过电子邮件中的链接触发一个GET请求来完成的。然而,某些电子邮件客户端和安全工具(例如Outlook、病毒扫描器和邮件预览器)可能会自动访问这些链接,从而导致在用户不知情或未明确同意的情况下,意外地确认了账户。

影响

攻击者可以利用此漏洞,使用他人的电子邮件地址注册新账户,并可能因为受害者邮件客户端的自动行为(如链接预取)而完成账户确认。需要注意的是,此漏洞允许攻击者接管或访问现有账户或私人数据。其影响仅限于新账户的注册确认过程。

补丁

该漏洞已在ash_authentication的4.7.0版本中得到缓解。如果你正在使用ash_authentication_phoenix,也需要将其升级到2.6.0或更高版本,以利用自动生成的确认视图。修复方案更新了确认流程,要求用户进行明确的交互操作(例如点击确认页面上的按钮),而不是通过GET请求执行确认。这确保了电子邮件客户端的自动链接预取或扫描不会无意中确认账户。

缓解步骤:

  1. 升级 ash_authentication >= 4.7.0
  2. 升级 ash_authentication_phoenix >= 2.6.0(如果正在使用)
  3. 在你的确认策略中设置 require_interaction?true
  4. confirm_route 添加到你的路由器中(如果使用 ash_authentication_phoenix 并启用了 auth_routes)。

设置 require_interaction? true 修改你的确认策略如下:

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

将 confirm_route 添加到路由器 为了使用这个新的确认流程,你需要在路由器中添加以下配置以启用新的确认页面LiveView。请注意pathtoken_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。我们强烈建议你升级并尽可能使用内置视图。如果你不使用提供的视图,则需要添加一个确认LiveView,该视图向旧的确认URL发起POST请求,而不是GET请求。具体做法是从链接中提取令牌参数,并将其作为隐藏字段添加到表单中。该表单没有输入框,只有一个按钮,点击该按钮会向确认URL发送POST请求。如果使用LiveView,可以通过phx-trigger-actionphx-action实现。

参考

漏洞详情

  • 严重性: 中等 (CVSS 5.3)
  • CVSS 向量: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N
  • 弱点类型: CWE-306 - 关键功能缺失身份验证
  • 发现者/贡献者: zachdaniel, jimsynz, maennchen, barnabasJ, sevenseacat
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计