CVE-2026-33544Tinyauth是一个身份验证和授权服务器。在5.0.5版本之前,其所有OAuth服务实现(GenericOAuthService、GithubOAuthService、GoogleOAuthService)将PKCE验证器和访问令牌作为可变结构体字段存储在所有并发请求共享的单例实例上。当两个用户同时为同一提供商发起OAuth登录时,VerifyCode()和Userinfo()之间的竞态条件会导致一个用户获得带有另一个用户身份的会话,从而造成严重的身份接管风险。该问题已在5.0.5版本中修复。
该漏洞源于Tinyauth在处理OAuth流程时的不安全并发编程模式。受影响的OAuth服务类被设计为单例模式,但其中存储PKCE验证器和访问令牌的字段被声明为可变状态。在高并发场景下,当用户A和用户B几乎同时触发OAuth登录流程(例如同时访问VerifyCode()接口)时,由于共享内存状态缺乏适当的锁机制,线程A写入的token可能会被线程B覆盖,反之亦然。随后,当调用Userinfo()接口获取用户信息时,系统可能会错误地使用另一个用户的token向OAuth提供商请求信息。结果便是用户A完成了登录流程,但系统分配给他的却是用户B的身份信息,导致账户权限被非法接管。攻击者可通过并发发送大量OAuth请求来触发此竞态条件,无需用户凭证即可登录受害者账户。