
Доказательство концепции эксплуатации, демонстрирующее повторное использование кода авторизации OAuth2 в XenForo до версии 2.3.13, что позволяет воспроизводить токены и создавать несколько семейств токенов.
XenForo до версии 2.3.13 позволяет погасить код авторизации OAuth2 более одного раза.
Предоставление типа authorization-code загружает код, проверяет его временную действительность и создаёт пару токенов. Успешный путь не удаляет код, не помечает его использованным и не применяет атомарное однократное обновление. Поэтому повторное воспроизведение того же действительного обмена создаёт независимое семейство access/refresh-токенов для того же пользователя и тех же областей действия (scopes).
Злоумышленнику по-прежнему нужен действительный код авторизации и параметры клиента, требуемые для этого предоставления. Данная проблема не объясняет, как получается код; она делает код многоразовым после того, как предполагаемый клиент уже погасил его.
На XenForo 2.3.12 (сборка 2031270) два идентичных обмена вернули разные access-токены, и оба успешно прошли аутентификацию. Исправление содержится в XenForo 2.3.13.
python poc.py https://xenforo.example CLIENT_ID AUTHORIZATION_CODE https://client.example/callback --code-verifier VERIFIER
Скрипт дважды отправляет одно и то же предоставление и проверяет оба возвращённых access-токена.
Обнаружено Marco Paciaroni (BomboBombone).