
Relatório sanitizado e script local de prova de conceito para CVE-2026-102975, um bypass de autorização da API RevisionDelete do MediaWiki que permite a remoção de supressão sem suppressrevision.
Relator: Marco Paciaroni (BomboBombone).
O action=revisiondelete do MediaWiki aceitava suppress=no sem verificar suppressrevision. Um chamador com viewsuppressed e um direito de gestão específico do tipo podia remover o bit restrito mesmo sem o direito de gerir a supressão.
Uma configuração de permissões que concede viewsuppressed e deleterevision ou deletelogentry sem suppressrevision permitia ao chamador expor material protegido pelo fluxo de trabalho de supressão. Este problema de autorização entre utilizadores depende da separação desses direitos.
Prepare uma revisão descartável contendo apenas uma string canário inofensiva e suprima o seu conteúdo numa wiki local isolada. Crie uma conta de teste com viewsuppressed e deleterevision, mas sem suppressrevision. O script envia o pedido à API vulnerável, verifica se um pedido anónimo consegue ver o canário e utiliza um administrador de teste separado para restaurar a supressão.
O script recusa URLs de wiki que não sejam loopback, verifica os direitos de ambas as contas, solicita ambas as palavras-passe e exige confirmação escrita antes de alterar a visibilidade da revisão de teste. Utilize apenas um fixture local descartável.
python poc.py --base http://127.0.0.1:8080 --username ViewOnlyEditor --restore-username LocalAdmin --page-title CVE102975DisposablePage --revision-id 123 --confirm-test-fixture
O ID da revisão e o título da página devem referir-se ao fixture canário suprimido. A conta de restauração necessita de suppressrevision.