
報告者: Marco Paciaroni (BomboBombone)。
MediaWiki の action=revisiondelete は、suppressrevision を確認せずに suppress=no を受け入れていました。viewsuppressed とタイプ固有の管理権限を持つ呼び出し元は、抑制管理の権限がなくても制限ビットを解除できました。
suppressrevision なしで viewsuppressed と deleterevision または deletelogentry を付与する権限設定では、呼び出し元が抑制ワークフローで保護された素材を露出させることができました。このクロスユーザー認可の問題は、これらの権限が分離されていることに依存します。
無害なカナリア文字列のみを含む使い捨ての版を用意し、隔離されたローカル wiki でその内容を抑制します。viewsuppressed と deleterevision を持つが suppressrevision を持たないテストアカウントを作成します。スクリプトは脆弱な API リクエストを送信し、匿名リクエストでカナリアが見えるかどうかを確認し、別のテスト管理者を使用して抑制を復元します。
スクリプトは非ループバックの wiki URL を拒否し、両方のアカウントの権限を確認し、両方のパスワードを要求し、テスト版の可視性を変更する前にタイプ入力による確認を要求します。使い捨てのローカルフィクスチャのみを使用してください。
python poc.py --base http://127.0.0.1:8080 --username ViewOnlyEditor --restore-username LocalAdmin --page-title CVE102975DisposablePage --revision-id 123 --confirm-test-fixture
版 ID とページタイトルは、抑制されたカナリアフィクスチャを参照している必要があります。復元アカウントには suppressrevision が必要です。