XenForo 2.3.13 之前的版本在 PayPal REST webhook 指定不支持的签名算法时会错误地放行。
Webhook 处理器通过一个小型允许列表映射 PAYPAL-AUTH-ALGO。如果该值未知,映射的算法将变为 null。验证路径不会拒绝请求,而是记录算法不可用并返回成功。证书获取和 openssl_verify() 永远不会被执行。
在启用了 PayPal REST 定期升级的情况下,买家可以从自己的定期升级控件中获取购买请求密钥。一个伪造的 PAYMENT.CAPTURE.COMPLETED 回调(包含该密钥、显示的金额/货币以及不支持的算法)可以在没有有效 PayPal 签名的情况下到达正常的购买完成流程。
我在 XenForo 2.3.12(构建版本 2031270)上复现了 30 天权益延长。该 PoC 不针对真实支付账户,应仅在隔离安装环境中配合一次性升级使用。XenForo 2.3.13 包含此修复。
python poc.py https://xenforo.example DISPOSABLE_REQUEST_KEY 10.00 USD
该脚本创建一个合成事件并仅报告 HTTP 状态。已修复的安装应拒绝该请求。
由 Marco Paciaroni (BomboBombone) 发现。