
Preuve de concept d'exploitation pour CVE-2026-73313, un contournement de l'authentification multifacteur (MFA) dans le fournisseur TFA par clé d'accès de XenForo permettant la prise de contrôle d'un compte après compromission du mot de passe.
XenForo avant la version 2.3.13 peut finaliser la connexion en deux étapes d'un utilisateur avec une passkey appartenant à un autre utilisateur.
Le gestionnaire de passkeys effectue une recherche globale à l'aide de l'identifiant d'authentification fourni dans l'assertion et vérifie correctement la signature WebAuthn de cette authentification. Le fournisseur TFA réduit ensuite le résultat à une valeur booléenne sans vérifier que le propriétaire de l'authentification correspond à l'utilisateur dont la connexion par mot de passe est en attente.
Un attaquant qui connaît le mot de passe correct d'une cible peut répondre au défi de passkey de la cible avec sa propre passkey enregistrée. La connexion se termine en tant que cible. Le flux partagé affecte également la connexion ACP lorsque la cible était un administrateur.
Il s'agit d'un contournement MFA après compromission du premier facteur, et non d'une prise de contrôle sans mot de passe. L'attaquant a besoin de sa propre passkey valide, du mot de passe de la cible et d'un compte cible configuré pour la TFA par passkey.
J'ai reproduit les flux publics et ACP sur XenForo 2.3.12 (build 2031270). XenForo 2.3.13 contient le correctif.
Installez les deux dépendances, préparez des utilisateurs attaquant/cible jetables et une authentification de test appartenant à l'attaquant, puis exécutez :
python -m pip install -r requirements.txt
python poc.py https://xenforo.example TARGET_USERNAME ATTACKER_CREDENTIAL_ID attacker-private-key.pem
Le mot de passe de la cible est lu avec une invite masquée. Le script ne provisionne pas d'utilisateurs, ne modifie pas les lignes de passkey, n'affiche pas le mot de passe et n'écrit pas de fichier de preuve. Sa sortie ne contient que le statut HTTP et une valeur booléenne finale.
Découvert par Marco Paciaroni (BomboBombone).