XenForo 2.3.13 之前的版本可能使用属于其他用户的通行密钥完成某个用户的两步登录。
通行密钥管理器使用断言中提供的凭据 ID 执行全局查找,并正确验证该凭据的 WebAuthn 签名。随后,TFA 提供程序将结果简化为布尔值,而未检查凭据所有者是否与密码登录待处理的用户匹配。
知道目标正确密码的攻击者可以使用自己注册的通行密钥来应答目标的通行密钥挑战。登录将以目标身份完成。当目标为管理员时,该共享流程同样影响 ACP 登录。
这是第一因素被攻破后的 MFA 绕过,而非无密码接管。攻击者需要拥有自己的有效通行密钥、目标的密码,以及一个配置了通行密钥 TFA 的目标账户。
我在 XenForo 2.3.12(构建版本 2031270)上复现了公开和 ACP 两种流程。XenForo 2.3.13 包含此修复。
安装两个依赖项,准备一次性的攻击者/目标用户以及一个攻击者拥有的测试凭据,然后运行:
python -m pip install -r requirements.txt
python poc.py https://xenforo.example TARGET_USERNAME ATTACKER_CREDENTIAL_ID attacker-private-key.pem
目标密码通过隐藏提示读取。该脚本不会配置用户、修改通行密钥行、打印密码或写入证据文件。其输出仅包含 HTTP 状态和最终布尔值。
由 Marco Paciaroni(BomboBombone)发现。