
XenForo 2.3.13 より前のバージョンでは、同一ホストの javascript: URI を動的リダイレクトとして受け入れ、後でそれを window.location に割り当てます。
サーバー側のリダイレクト検証は外部ホストを拒否しますが、HTTP または HTTPS を要求しません。javascript://board-host/%0A... という形式の URL は XenForo ホストとして解析され、その比較を通過して AJAX レスポンスに残ります。ブラウザでは、パーセントデコードによって %0A が改行に変換され、//host によって導入された JavaScript の行コメントを終了させ、後続のペイロードを露出させます。
私はこれを XenForo 2.3.12(ビルド 2031270)の公開フォロー確認機能で再現しました。ログイン済みユーザーが細工された URL を開いてフォローを確認すると、無害なペイロードが XenForo オリジン内で window.name を設定しました。攻撃者はアカウントを必要としませんが、被害者はログインして通常の操作を確認する必要があります。XenForo 2.3.13 には修正が含まれています。
python poc.py https://xenforo.example member-name.123
このスクリプトは、ワンリクエストのループバックリダイレクトサーバーを起動します。認可されたテストセッションを保持するブラウザで印刷されたローカル URL を開き、window.name を検査してからサーバーを閉じます。ペイロードはデータを読み取ったり、ユーザーが確認したフォロー以外の操作を実行したりしません。
発見者: Marco Paciaroni (BomboBombone)。