
XenForo 2.3.13 より前のバージョンでは、同じ有効な PayPal REST Webhook が複数回処理されます。
PayPal REST プロバイダーは XenForo の基本トランザクションバリデーターをオーバーライドしますが、重複トランザクションログの検索を省略しています。データベースインデックスも一意ではありません。そのため、1つのトランザクション ID を持つバイト単位で同一かつ有効に署名された2つの配信が、購入完了処理を2回実行する可能性があります。
私はこれを XenForo 2.3.12(ビルド 2031270)で、使い捨ての定期アップグレードを使用して再現しました。両方のコールバックは HTTP 200 を返し、別々の支払いログ行を作成し、同じ権利を延長しました。攻撃者モデルには、正規のコールバックまたは正当なプロバイダーによる再試行・再送信が必要です。このバグは署名を偽造するものではありません。
XenForo 2.3.13 に修正が含まれています。
承認済みのテストコールバック本文とそのヘッダーを1つローカルに保存し、次を実行します:
python poc.py https://xenforo.example headers.json callback.json
このスクリプトは正確に2つのコピーを送信し、2つの HTTP ステータスのみを出力します。入力ファイルをコミットしないでください。ライブのコールバック素材が含まれている可能性があります。使い捨ての購入を使用し、テスト後にその状態を復元してください。
発見者: Marco Paciaroni (BomboBombone)。