
Informe saneado y script de prueba de concepto local para CVE-2026-102975, un bypass de autorización en la API RevisionDelete de MediaWiki que permite la eliminación de supresiones sin suppressrevision.
Reportero: Marco Paciaroni (BomboBombone).
El action=revisiondelete de MediaWiki aceptaba suppress=no sin comprobar suppressrevision. Un solicitante con viewsuppressed y un derecho de gestión específico de tipo podía eliminar el bit restringido incluso sin el derecho a gestionar la supresión.
Una configuración de permisos que otorgaba viewsuppressed y deleterevision o deletelogentry sin suppressrevision permitía al solicitante exponer material protegido por el flujo de trabajo de supresión. Este problema de autorización entre usuarios depende de que esos derechos estén separados.
Prepare una revisión desechable que contenga únicamente una cadena canario inofensiva y suprima su contenido en un wiki local aislado. Cree una cuenta de prueba con viewsuppressed y deleterevision, pero sin suppressrevision. El script envía la solicitud vulnerable a la API, comprueba si una solicitud anónima puede ver el canario y utiliza un administrador de prueba independiente para restaurar la supresión.
El script rechaza las URL de wiki que no sean de loopback, comprueba los derechos de ambas cuentas, solicita ambas contraseñas y requiere una confirmación escrita antes de cambiar la visibilidad de la revisión de prueba. Utilice únicamente un fixture local desechable.
python poc.py --base http://127.0.0.1:8080 --username ViewOnlyEditor --restore-username LocalAdmin --page-title CVE102975DisposablePage --revision-id 123 --confirm-test-fixture
El ID de revisión y el título de la página deben referirse al fixture canario suprimido. La cuenta de restauración necesita suppressrevision.