
Preuve de concept et analyse technique pour CVE-2026-73309, un contournement d'authentification OAuth2 dans XenForo avant la version 2.3.13. Démontre le contournement de la vérification du secret de client vide et de PKCE avec un script Python.
XenForo avant la version 2.3.13 peut ignorer la vérification du secret client OAuth2 et de la PKCE lorsqu'une chaîne vide atteint le point de terminaison du jeton.
Le point de terminaison vérifie si les clés client_secret et code_verifier existent, puis effectue les comparaisons uniquement lorsque leurs valeurs de chaîne PHP sont évaluées comme vraies. Une valeur vide satisfait donc la vérification de présence mais contourne la comparaison.
Pour un client OAuth public, un attaquant a toujours besoin d'un code d'autorisation valide. Le bug supprime la garantie PKCE selon laquelle le code seul est insuffisant : le code peut être échangé sans le vérificateur, produisant des jetons avec les portées approuvées par l'utilisateur. Le même schéma de valeur fausse affectait les vérifications des clients confidentiels.
J'ai reproduit le problème sur XenForo 2.3.12 (build 2031270) dans une installation locale autorisée. XenForo 2.3.13 contient le correctif.
Le script effectue un échange de jeton avec un code_verifier vide, hache tout jeton d'accès renvoyé et vérifie s'il s'authentifie. Il n'affiche jamais le jeton ni l'identité du compte.
python poc.py https://xenforo.example CLIENT_ID AUTHORIZATION_CODE https://client.example/callback
Une installation vulnérable renvoie HTTP 200 depuis le point de terminaison du jeton et une réponse authentifiée depuis /api/me. Une installation corrigée rejette l'échange.
Utilisez uniquement un code d'autorisation créé pour un compte jetable sur un système que vous êtes autorisé à tester.
Découvert par Marco Paciaroni (BomboBombone).