XenForo 2.3.13 之前的版本在父访问令牌过期后,仍可能使 OAuth2 刷新令牌可被重复使用。
XenForo 有意让刷新令牌比其短期的访问令牌存活更久。在轮换期间,它会创建替换令牌族,然后要求父访问令牌撤销器消费旧令牌族。当访问令牌已过期时,该撤销器会在撤销相关刷新令牌之前提前返回。
因此,原始刷新令牌可以被再次提交,从而生成另一个具有相同用户和作用域的独立令牌族。攻击者必须已经持有有效的刷新令牌(以及机密客户端的客户端密钥)。该问题延长了受损凭据的有效使用期限;它本身并非登录绕过或权限提升。
我在允许父访问令牌过期后,于 XenForo 2.3.12(构建版本 2031270)上复现了该问题。XenForo 2.3.13 包含此修复。
python poc.py https://xenforo.example CLIENT_ID REFRESH_TOKEN --verify-me
该脚本提交一次授权的测试令牌两次,并且仅打印哈希值和状态。重放被拒绝时以状态 0 退出;确认存在漏洞的结果以状态 1 退出,以便自动化不会将漏洞状态误认为成功。
由 Marco Paciaroni(BomboBombone)发现。