BomboBombone.exe
ARCHITECTURE:x86-64
BACK
.TEXTXenForo / OAuth2
08 Sept 2026 · 3 min
XenForo / OAuth2 · 08 Sept 2026

CVE-2026-73311: OAuth2 authorization code replay

A successful XenForo token exchange left the authorization code available for another redemption.

POST VIEWTEXT / UTF-8

The test for this bug was pleasantly short: send the same OAuth token request twice.

XenForo 2.3.12 answered both requests with HTTP 200. Each response contained a different access token and created its own refresh-token family. Both access tokens belonged to the same test user.

The code stayed live

grantAuthorizationCode() loaded the code, checked isValid(), and passed it to the token creator. Once the new tokens had been saved, the handler returned the response. Nothing deleted the code or marked it as spent.

Two requests reaching the validity check together could also see the same unused code and continue.

If two parties have a copy of the code, the first exchange leaves the second copy usable until expiry. An attacker needs the code, the configured client authentication, and PKCE material where applicable.

Creating a new refresh-token family on every redemption also complicates revocation. Removing the family visible to the legitimate client can leave another family created by the replay.

I reproduced the issue on XenForo 2.3.12 build 2031270. The PoC submits one code twice and checks that both tokens work and differ.

XenForo 2.3.13 atomically consumes authorization codes during token issuance, including simultaneous exchanges.

MEASURING VISUAL LINES… ADDRESSES ARE UTF-8 BYTE OFFSETS

Resize column

Choose a width with the slider or the narrower and wider buttons.