
Prueba de concepto y documento técnico para CVE-2026-73309, una omisión de autenticación OAuth2 en XenForo anterior a 2.3.13. Demuestra la omisión de verificación de secreto de cliente vacío y PKCE con un script de Python.
XenForo anterior a 2.3.13 puede omitir la verificación del secreto de cliente OAuth2 y de PKCE cuando una cadena vacía llega al endpoint de token.
El endpoint comprueba si existen las claves client_secret y code_verifier, y luego realiza las comparaciones solo cuando sus valores de cadena PHP son verdaderos. Por lo tanto, un valor vacío satisface la comprobación de presencia pero omite la comparación.
Para un cliente OAuth público, un atacante aún necesita un código de autorización válido. El fallo elimina la garantía PKCE de que el código por sí solo es insuficiente: el código puede intercambiarse sin el verificador, produciendo tokens con los ámbitos aprobados por el usuario. El mismo patrón de valor falso afectaba a las comprobaciones de clientes confidenciales.
Reproduje el problema en XenForo 2.3.12 (build 2031270) en una instalación local autorizada. XenForo 2.3.13 contiene la corrección.
El script realiza un intercambio de token con un code_verifier vacío, aplica un hash a cualquier token de acceso devuelto y comprueba si se autentica. Nunca imprime el token ni la identidad de la cuenta.
python poc.py https://xenforo.example CLIENT_ID AUTHORIZATION_CODE https://client.example/callback
Una instalación vulnerable devuelve HTTP 200 desde el endpoint de token y una respuesta autenticada desde /api/me. Una instalación corregida rechaza el intercambio.
Utilice únicamente un código de autorización creado para una cuenta desechable en un sistema que esté autorizado a probar.
Descubierto por Marco Paciaroni (BomboBombone).