
# Proof-of-Concept und technischer Bericht für CVE-2026-73309, eine OAuth2-Authentifizierungsumgehung in XenForo vor 2.3.13. Demonstriert die Umgehung der Überprüfung von leerem Client-Secret und PKCE mit einem Python-Skript.
XenForo vor Version 2.3.13 kann die OAuth2-Client-Secret- und PKCE-Überprüfung überspringen, wenn ein leerer String den Token-Endpunkt erreicht.
Der Endpunkt prüft, ob die Schlüssel client_secret und code_verifier vorhanden sind, und führt die Vergleiche nur dann durch, wenn ihre PHP-String-Werte truthy sind. Ein leerer Wert erfüllt daher die Präsenzprüfung, umgeht jedoch den Vergleich.
Für einen öffentlichen OAuth-Client benötigt ein Angreifer weiterhin einen gültigen Autorisierungscode. Der Fehler entfernt die PKCE-Garantie, dass der Code allein nicht ausreicht: Der Code kann ohne den Verifier ausgetauscht werden, wodurch Token mit den vom Benutzer genehmigten Berechtigungen erzeugt werden. Dasselbe Falsey-Wert-Muster betraf auch die Prüfungen für vertrauliche Clients.
Ich habe das Problem auf XenForo 2.3.12 (Build 2031270) in einer autorisierten lokalen Installation reproduziert. XenForo 2.3.13 enthält den Fix.
Das Skript führt einen Token-Austausch mit einem leeren code_verifier durch, hasht jedes zurückgegebene Zugriffstoken und prüft, ob es sich authentifiziert. Es gibt niemals das Token oder die Kontenidentität aus.
python poc.py https://xenforo.example CLIENT_ID AUTHORIZATION_CODE https://client.example/callback
Eine verwundbare Installation gibt HTTP 200 vom Token-Endpunkt und eine authentifizierte Antwort von /api/me zurück. Eine gepatchte Installation lehnt den Austausch ab.
Verwenden Sie nur einen Autorisierungscode, der für ein Wegwerfkonto auf einem System erstellt wurde, das Sie testen dürfen.
Entdeckt von Marco Paciaroni (BomboBombone).