CVE-2026-44166PocketBase 是一个用 Go 编写的开源后端。在 0.22.42 和 0.37.4 之前的版本中存在一个安全漏洞。如果攻击者知道受害者的电子邮件地址,攻击者可以利用 OAuth2 提供商(例如提供商 A)预先创建并链接一个未验证的 PocketBase 用户。当受害者稍后使用不同的 OAuth2 提供商(提供商 B)注册或受邀注册时,攻击者预先创建的用户将自动与受害者关联,被升级为“已验证”状态,并且其旧密码会被重置。这可能导致攻击者劫持受害者的账户。
该漏洞的核心在于 PocketBase 处理多 OAuth 提供商账户关联时的逻辑缺陷。系统设计上允许将不同的 OAuth 提供商身份(如 Google 和 GitHub)关联到同一个 PocketBase 用户账户上,但不允许同一提供商的多个账户关联。攻击者利用这一特性,首先获取目标受害者的邮箱地址。攻击者使用 OAuth 提供商 A 对该邮箱进行认证,此时 PocketBase 会创建一个未验证的用户记录。随后,当受害者使用 OAuth 提供商 B 尝试注册或登录时,系统识别到该邮箱已存在。由于系统允许不同提供商的关联,它会自动将提供商 B 的身份信息绑定到攻击者预先创建的账户上。这一绑定过程不仅验证了账户,还会重置账户凭证,从而使攻击者获得该账户的完全控制权。