
XenForo 2.3.13 より前のバージョンでは、OAuth2 認可コードを複数回引き換えることができます。
認可コードグラントはコードを読み込み、その時間ベースの有効性を検証し、トークンペアを作成します。成功パスでは、コードの削除、消費済みマーク、またはアトミックなワンタイム更新は行われません。したがって、同じ有効な交換を再生すると、同じユーザーとスコープに対して独立したアクセス/リフレッシュトークンファミリーが作成されます。
攻撃者は依然として有効な認可コードと、そのグラントに必要なクライアントパラメータを必要とします。この問題はコードがどのように取得されるかを説明するものではなく、意図されたクライアントがすでに引き換えた後にコードを再利用可能にするものです。
XenForo 2.3.12(ビルド 2031270)では、2 回の同一の交換で異なるアクセストークンが返され、両方とも正常に認証されました。XenForo 2.3.13 に修正が含まれています。
python poc.py https://xenforo.example CLIENT_ID AUTHORIZATION_CODE https://client.example/callback --code-verifier VERIFIER
このスクリプトは同じグラントを 2 回送信し、返されたトークンをハッシュ化して、両方が機能するかどうかを報告します。認証情報やアカウントの身元は出力しません。認可されたテストインストール環境で、使い捨てのグラントを使用してのみ実行してください。
発見者: Marco Paciaroni (BomboBombone)。