
Report sanificato e script proof-of-concept locale per CVE-2026-102975, un bypass di autorizzazione dell'API RevisionDelete di MediaWiki che consente la rimozione della soppressione senza suppressrevision.
Segnalato da: Marco Paciaroni (BomboBombone).
L'azione action=revisiondelete di MediaWiki accettava suppress=no senza verificare suppressrevision. Un chiamante con viewsuppressed e un diritto di gestione specifico per tipo poteva rimuovere il bit limitato anche senza il diritto di gestire la soppressione.
Una configurazione dei permessi che concede viewsuppressed e deleterevision o deletelogentry senza suppressrevision consentiva al chiamante di esporre materiale protetto dal flusso di lavoro di soppressione. Questo problema di autorizzazione cross-utente dipende dalla separazione di tali diritti.
Prepara una revisione usa e getta contenente solo una stringa canary innocua e sopprimine il contenuto su un wiki locale isolato. Crea un account di test con viewsuppressed e deleterevision, ma senza suppressrevision. Lo script invia la richiesta API vulnerabile, verifica se una richiesta anonima può vedere la canary e utilizza un amministratore di test separato per ripristinare la soppressione.
Lo script rifiuta URL wiki non-loopback, verifica i diritti di entrambi gli account, richiede entrambe le password e richiede una conferma digitata prima di modificare la visibilità della revisione di test. Utilizza solo un fixture locale usa e getta.
python poc.py --base http://127.0.0.1:8080 --username ViewOnlyEditor --restore-username LocalAdmin --page-title CVE102975DisposablePage --revision-id 123 --confirm-test-fixture
L'ID della revisione e il titolo della pagina devono riferirsi al fixture canary soppresso. L'account di ripristino necessita di suppressrevision.