CVE-2025-14546fastapi-sso是一个用于FastAPI的OAuth2 SSO库,帮助开发者快速集成各种OAuth提供商(如Google、Microsoft、Facebook等)。该产品在0.19.0之前的版本中存在严重的跨站请求伪造(CSRF)漏洞。漏洞根源在于OAuth认证流程中的state参数验证机制不完善。在标准的OAuth认证流程中,state参数用于防止CSRF攻击,服务器端应生成随机state值并与用户会话绑定,在回调时验证state的有效性。然而,该库虽然提供了get_login_url方法来生成state,但并未将state持久化存储或与用户会话关联,导致verify_and_process方法直接接受回调URL中携带的state参数而无法验证其真实性。攻击者可利用此漏洞构造恶意回调URL,诱骗受害者点击,从而将攻击者的第三方平台账号(如Google、Microsoft账号)与受害者在应用中的内部账号绑定,进而可能获取受害者的敏感信息或执行未授权操作。
漏洞主要存在于fastapi-sso的OAuth认证回调处理流程中。在正常OAuth流程中:1) 用户发起登录请求,服务器生成随机state值并存储在用户会话中;2) 重定向用户到OAuth提供商进行认证;3) OAuth提供商回调时携带state参数;4) 服务器验证回调中的state与会话中存储的state是否匹配。fastapi-sso的问题在于:get_login_url方法虽然生成了state值,但未将其存储到session中。verify_and_process方法接收回调请求时,直接从query参数中获取state并使用,完全没有与服务器端存储的值进行比对验证。攻击者可以:1) 首先用自己的账号发起OAuth登录流程,获取合法的callback URL;2) 构造包含攻击者OAuth账号信息的恶意callback URL;3) 诱骗已登录的受害者访问该恶意URL;4) 受害者应用账户将与攻击者的第三方OAuth账号绑定;5) 攻击者利用绑定关系访问受害者数据或执行特权操作。