
Prova de conceito de exploit demonstrando a reutilização de código de autorização OAuth2 no XenForo anterior à versão 2.3.13, permitindo a repetição de tokens e múltiplas famílias de tokens.
XenForo anterior à versão 2.3.13 permite que um código de autorização OAuth2 seja resgatado mais de uma vez.
O fluxo de concessão por código de autorização carrega um código, verifica sua validade baseada em tempo e cria um par de tokens. O caminho bem-sucedido não exclui o código, não o marca como consumido nem usa uma atualização atômica de uso único. Repetir a mesma troca válida, portanto, cria uma família independente de tokens de acesso/atualização para o mesmo usuário e escopos.
Um atacante ainda precisa de um código de autorização válido e dos parâmetros de cliente exigidos por essa concessão. Este problema não explica como o código é obtido; ele torna um código reutilizável depois que o cliente pretendido já o resgatou.
No XenForo 2.3.12 (build 2031270), duas trocas idênticas retornaram tokens de acesso diferentes e ambos autenticaram com sucesso. O XenForo 2.3.13 contém a correção.
python poc.py https://xenforo.example CLIENT_ID AUTHORIZATION_CODE https://client.example/callback --code-verifier VERIFIER
O script envia a mesma concessão duas vezes, gera o hash dos tokens retornados e informa se ambos funcionam. Ele não imprime credenciais nem identidade da conta. Execute-o apenas com uma concessão descartável em uma instalação de teste autorizada.
Descoberto por Marco Paciaroni (BomboBombone).