
Prueba de concepto de exploit para CVE-2026-73313, una omisión de MFA en el proveedor TFA de passkey de XenForo que permite la toma de control de la cuenta tras el compromiso de la contraseña.
XenForo anterior a 2.3.13 puede completar el inicio de sesión de dos pasos de un usuario con una passkey propiedad de otro usuario distinto.
El gestor de passkeys realiza una búsqueda global utilizando el ID de credencial proporcionado en la aserción y verifica correctamente la firma WebAuthn de dicha credencial. El proveedor de TFA reduce entonces el resultado a un booleano sin comprobar que el propietario de la credencial coincide con el usuario cuyo inicio de sesión por contraseña está pendiente.
Un atacante que conozca la contraseña correcta de la víctima puede responder al desafío de passkey de la víctima con su propia passkey registrada. El inicio de sesión se completa como la víctima. El flujo compartido también afectó al inicio de sesión del ACP cuando la víctima era un administrador.
Se trata de una omisión de MFA tras el compromiso del primer factor, no de una toma de control sin contraseña. El atacante necesita su propia passkey válida, la contraseña de la víctima y una cuenta de la víctima configurada con passkey como TFA.
Reproduje tanto el flujo público como el del ACP en XenForo 2.3.12 (build 2031270). XenForo 2.3.13 contiene la corrección.
Instala las dos dependencias, prepara usuarios atacante/víctima desechables y una credencial de prueba propiedad del atacante, y luego ejecuta:
python -m pip install -r requirements.txt
python poc.py https://xenforo.example TARGET_USERNAME ATTACKER_CREDENTIAL_ID attacker-private-key.pem
La contraseña de la víctima se lee con un prompt oculto. El script no aprovisiona usuarios, no modifica filas de passkeys, no imprime la contraseña ni escribe un archivo de evidencia. Su salida contiene únicamente el estado HTTP y un booleano final.
Descubierto por Marco Paciaroni (BomboBombone).