
Proof-of-Concept-Exploit, das die Wiederverwendung von OAuth2-Autorisierungscodes in XenForo vor 2.3.13 demonstriert und Token-Replay sowie mehrere Token-Familien ermöglicht.
XenForo vor 2.3.13 erlaubt es, einen OAuth2-Autorisierungscode mehr als einmal einzulösen.
Der Autorisierungscode-Grant lädt einen Code, prüft dessen zeitbasierte Gültigkeit und erstellt ein Token-Paar. Der erfolgreiche Pfad löscht den Code nicht, markiert ihn nicht als verbraucht und verwendet kein atomares Einmal-Update. Das erneute Senden desselben gültigen Austauschs erzeugt daher eine unabhängige Access-/Refresh-Token-Familie für denselben Benutzer und dieselben Scopes.
Ein Angreifer benötigt weiterhin einen gültigen Autorisierungscode und die Client-Parameter, die dieser Grant erfordert. Dieses Problem erklärt nicht, wie der Code erlangt wird; es macht einen Code wiederverwendbar, nachdem der vorgesehene Client ihn bereits eingelöst hat.
Auf XenForo 2.3.12 (Build 2031270) lieferten zwei identische Austausche unterschiedliche Access-Tokens zurück, und beide authentifizierten sich erfolgreich. XenForo 2.3.13 enthält den Fix.
python poc.py https://xenforo.example CLIENT_ID AUTHORIZATION_CODE https://client.example/callback --code-verifier VERIFIER
Das Skript sendet denselben Grant zweimal, hasht die zurückgegebenen Tokens und meldet, ob beide funktionieren. Es gibt keine Anmeldedaten oder Kontenidentität aus. Führen Sie es nur mit einem Wegwerf-Grant auf einer autorisierten Testinstallation aus.
Entdeckt von Marco Paciaroni (BomboBombone).