
Prova de conceito e artigo técnico para CVE-2026-73309, uma bypass de autenticação OAuth2 no XenForo anterior à versão 2.3.13. Demonstra a bypass da verificação de client-secret vazio e PKCE com um script em Python.
XenForo anterior à versão 2.3.13 pode ignorar a verificação do client-secret OAuth2 e do PKCE quando uma string vazia chega ao endpoint de token.
O endpoint verifica se as chaves client_secret e code_verifier existem e, em seguida, realiza as comparações somente quando os valores de string PHP correspondentes são truthy. Um valor vazio, portanto, satisfaz a verificação de presença, mas ignora a comparação.
Para um cliente OAuth público, um atacante ainda precisa de um código de autorização válido. O bug remove a garantia do PKCE de que o código sozinho é insuficiente: o código pode ser trocado sem o verifier, produzindo tokens com os escopos aprovados pelo usuário. O mesmo padrão de valor falsey afetou as verificações de clientes confidenciais.
Reproduzi o problema no XenForo 2.3.12 (build 2031270) em uma instalação local autorizada. O XenForo 2.3.13 contém a correção.
O script realiza uma troca de token com um code_verifier vazio, gera o hash de qualquer token de acesso retornado e verifica se ele autentica. Ele nunca imprime o token ou a identidade da conta.
python poc.py https://xenforo.example CLIENT_ID AUTHORIZATION_CODE https://client.example/callback
Uma instalação vulnerável retorna HTTP 200 do endpoint de token e uma resposta autenticada de /api/me. Uma instalação corrigida rejeita a troca.
Use apenas um código de autorização criado para uma conta descartável em um sistema que você está autorizado a testar.
Descoberto por Marco Paciaroni (BomboBombone).