
Proof-of-concept e descrizione tecnica per CVE-2026-73312, una vulnerabilità di replay del token di aggiornamento OAuth2 in XenForo precedente alla versione 2.3.13. Include uno script Python per testare il problema.
XenForo precedente alla versione 2.3.13 può lasciare un refresh token OAuth2 riutilizzabile quando il relativo access token padre è scaduto.
XenForo consente intenzionalmente a un refresh token di sopravvivere al suo access token di breve durata. Durante la rotazione crea la nuova famiglia di token, quindi chiede al revoker dell'access token padre di consumare la vecchia famiglia. Quel revoker termina anticipatamente quando l'access token è scaduto, prima di revocare il refresh token correlato.
Il refresh token originale può di conseguenza essere inviato nuovamente, generando un'altra famiglia di token indipendente con lo stesso utente e gli stessi scope. L'attaccante deve già possedere un refresh token valido (e il client secret per un client riservato). Il problema estende la durata utile di una credenziale compromessa; non è di per sé un bypass del login o un'escalation degli scope.
Ho riprodotto il problema su XenForo 2.3.12 (build 2031270) dopo aver consentito la scadenza dell'access token padre. XenForo 2.3.13 contiene la correzione.
python poc.py https://xenforo.example CLIENT_ID REFRESH_TOKEN --verify-me
Lo script invia due volte un token di test autorizzato e stampa solo hash e stato. Un rifiuto del replay termina con stato 0; un risultato confermato come vulnerabile termina con stato 1, così l'automazione non scambia la condizione vulnerabile per un successo.
Scoperto da Marco Paciaroni (BomboBombone).