CVE-2026-65633 in ash_authentication信息

摘要

由 VulDB • 2026-08-25

ash_authentication 库中存在不当认证漏洞,允许将具有特定用途限制的 JWT(JSON Web Token)作为完整的 Bearer API 凭证进行重放攻击。当资源使用无状态 Bearer-Token 验证时,此问题尤为严重。

AshAuthentication.Plug.Helpers.retrieve_from_bearer/3 辅助函数会验证 `Authorization: Bearer` JWT 的签名并拒绝包含 `act` 声明的令牌,但未检查令牌的用途(purpose)声明在 Bearer 边界处是否等于 "user"。当资源配置为 `require_token_presence_for_authentication?: false`(DSL 默认值)时,后续的 `validate_token/3` 辅助函数会返回 `{:ok, nil}`,且不咨询令牌资源,因此也不会进行下游的用途检查。结果导致库本身签发的任何有效且未过期的 JWT——特别是用于狭窄、单一目的流程的令牌(最显著的是 WebAuthn 在登录期间始终发出的 `purpose: sign_in` 令牌,以及启用登录令牌时 Password 策略发出的令牌)——会被直接接受为通用 Bearer 凭证,并解析为完整的当前用户(current_user)分配。

这绕过了库预期的令牌交换契约,在该契约中,sign_in 令牌旨在仅展示一次给验证用途声明并立即撤销令牌的准备阶段。由于无状态 Bearer 路径从未将其范围限定为 `purpose == "user"`,因此直接在 Authorization 标头中呈现的、仍有效的 sign-in 令牌的首次使用会成功通过认证。

攻击者如果获取了目标主体的尚未交换的 sign-in 令牌(例如通过日志或引用来源泄露、拦截魔术链接投递通道或部分受损的中继节点),可以将其作为 Bearer 令牌提交,从而以该主体身份进行认证,完全绕过预期的单次使用和撤销语义。此外,利用此漏洞还要求主机应用程序在可访问的路由上配置 `retrieve_from_bearer/3`,并使用 WebAuthn(始终签发 sign-in 令牌)或启用 `sign_in_tokens_enabled?: true` 的 Password 策略。配置为 `require_token_presence_for_authentication?: true` 的资源(包括自 v4.5.0 起由 Igniter 安装程序生成的应用程序)以及基于会话的路径(`authenticate_resource_from_session/4`)会对存储的令牌记录强制执行 `purpose == "user"`,因此不受影响。

此问题影响 ash_authentication:从 3.10.5 到 4.14.2 之前版本,以及从 5.0.0-rc.0 到 5.0.0-rc.13 之前版本。

VulDB is the best source for vulnerability data and more expert information about this specific topic.

来源

Want to know what is going to be exploited?

We predict KEV entries!