
Rapport assaini et script de preuve de concept local pour CVE-2026-102975, un contournement d'autorisation de l'API RevisionDelete de MediaWiki permettant la suppression de la suppression sans suppressrevision.
Rapporteur : Marco Paciaroni (BomboBombone).
L'action action=revisiondelete de MediaWiki acceptait suppress=no sans vérifier suppressrevision. Un appelant disposant de viewsuppressed et d'un droit de gestion spécifique à un type pouvait retirer le bit restreint même sans le droit de gérer la suppression.
Une configuration de permissions accordant viewsuppressed et deleterevision ou deletelogentry sans suppressrevision permettait à l'appelant d'exposer du contenu protégé par le workflow de suppression. Ce problème d'autorisation entre utilisateurs dépend de la séparation de ces droits.
Préparez une révision jetable contenant uniquement une chaîne canari inoffensive et supprimez son contenu sur un wiki local isolé. Créez un compte de test avec viewsuppressed et deleterevision, mais sans suppressrevision. Le script envoie la requête API vulnérable, vérifie si une requête anonyme peut voir le canari, et utilise un administrateur de test distinct pour restaurer la suppression.
Le script refuse les URL de wiki non-loopback, vérifie les droits des deux comptes, demande les deux mots de passe, et exige une confirmation saisie avant de modifier la visibilité de la révision de test. Utilisez uniquement un environnement local jetable.
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 de révision et le titre de la page doivent faire référence à l'environnement canari supprimé. Le compte de restauration nécessite suppressrevision.