
Санитизированный отчёт и локальный скрипт proof-of-concept для CVE-2026-102975 — обход авторизации в API RevisionDelete MediaWiki, позволяющий удалять подавление без suppressrevision.
Автор отчёта: Marco Paciaroni (BomboBombone).
В MediaWiki action=revisiondelete принимал suppress=no без проверки suppressrevision. Вызывающий с правом viewsuppressed и правом управления конкретного типа мог снять ограничивающий бит даже без права управлять подавлением.
Конфигурация разрешений, предоставляющая viewsuppressed и deleterevision или deletelogentry без suppressrevision, позволяла вызывающему раскрыть материал, защищённый процедурой подавления. Эта проблема авторизации между пользователями зависит от разделения этих прав.
Подготовьте одноразовую версию, содержащую только безвредную канареечную строку, и подавите её содержимое в изолированной локальной вики. Создайте тестовую учётную запись с viewsuppressed и deleterevision, но без suppressrevision. Скрипт отправляет уязвимый API-запрос, проверяет, может ли анонимный запрос увидеть канарейку, и использует отдельного тестового администратора для восстановления подавления.
Скрипт отклоняет URL вики, отличные от loopback, проверяет права обеих учётных записей, запрашивает оба пароля и требует ввода подтверждения перед изменением видимости тестовой версии. Используйте только одноразовый локальный стенд.
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.