
Proof-of-concept e descrizione tecnica per CVE-2026-73309, un bypass dell'autenticazione OAuth2 in XenForo precedente alla versione 2.3.13. Dimostra il bypass della verifica di client-secret vuoto e PKCE con uno script Python.
XenForo precedente alla 2.3.13 può saltare la verifica del client-secret OAuth2 e della PKCE quando una stringa vuota raggiunge l'endpoint del token.
L'endpoint verifica che le chiavi client_secret e code_verifier esistano, quindi esegue i confronti solo quando i loro valori stringa PHP sono truthy. Un valore vuoto soddisfa quindi il controllo di presenza ma bypassa il confronto.
Per un client OAuth pubblico, un attaccante ha comunque bisogno di un codice di autorizzazione valido. Il bug rimuove la garanzia PKCE che il codice da solo sia insufficiente: il codice può essere scambiato senza il verifier, producendo token con gli ambiti approvati dall'utente. Lo stesso pattern di valori falsey ha interessato i controlli per i client confidenziali.
Ho riprodotto il problema su XenForo 2.3.12 (build 2031270) in un'installazione locale autorizzata. XenForo 2.3.13 contiene la correzione.
Lo script esegue uno scambio di token con un code_verifier vuoto, calcola l'hash di qualsiasi token di accesso restituito e verifica se autentica. Non stampa mai il token o l'identità dell'account.
python poc.py https://xenforo.example CLIENT_ID AUTHORIZATION_CODE https://client.example/callback
Un'installazione vulnerabile restituisce HTTP 200 dall'endpoint del token e una risposta autenticata da /api/me. Un'installazione corretta rifiuta lo scambio.
Utilizza solo un codice di autorizzazione creato per un account usa-e-getta su un sistema che sei autorizzato a testare.
Scoperto da Marco Paciaroni (BomboBombone).