
# Proof-of-Concept und technische Dokumentation für CVE-2026-73312, eine OAuth2-Refresh-Token-Replay-Schwachstelle in XenForo vor 2.3.13. Enthält ein Python-Skript zum Testen des Problems.
XenForo vor Version 2.3.13 kann einen OAuth2-Refresh-Token weiterhin wiederverwendbar lassen, wenn das zugehörige Access-Token abgelaufen ist.
XenForo lässt einen Refresh-Token absichtlich länger leben als das kurzlebige Access-Token. Während der Rotation erstellt es die Ersatz-Token-Familie und fordert dann den Revoker des übergeordneten Access-Tokens auf, die alte Familie zu verbrauchen. Dieser Revoker kehrt vorzeitig zurück, wenn das Access-Token abgelaufen ist, bevor er das zugehörige Refresh-Token widerruft.
Das ursprüngliche Refresh-Token kann folglich erneut übermittelt werden und erzeugt eine weitere unabhängige Token-Familie mit demselben Benutzer und denselben Scopes. Der Angreifer muss bereits über ein gültiges Refresh-Token (und das Client-Secret für einen vertraulichen Client) verfügen. Das Problem verlängert die Nutzungsdauer einer kompromittierten Anmeldedaten; es ist für sich genommen kein Login-Bypass oder eine Scope-Erweiterung.
Ich habe das Problem auf XenForo 2.3.12 (Build 2031270) reproduziert, nachdem ich das übergeordnete Access-Token hatte ablaufen lassen. XenForo 2.3.13 enthält den Fix.
python poc.py https://xenforo.example CLIENT_ID REFRESH_TOKEN --verify-me
Das Skript übermittelt ein autorisiertes Test-Token zweimal und gibt nur Hashes und Status aus. Eine Zurückweisung bei Wiedergabe endet mit Status 0; ein bestätigtes verwundbares Ergebnis endet mit Status 1, damit die Automatisierung den verwundbaren Zustand nicht mit einem Erfolg verwechselt.
Entdeckt von Marco Paciaroni (BomboBombone).