
تقرير مُنقّى ونص إثبات مفهوم محلي لـ CVE-2026-102975، وهو تجاوز للتفويض في واجهة RevisionDelete API الخاصة بـ MediaWiki يسمح بإزالة الحجب دون suppressrevision.
المُبلِّغ: Marco Paciaroni (BomboBombone).
كان action=revisiondelete في MediaWiki يقبل suppress=no دون التحقق من suppressrevision. تمكّن مُستدعٍ يمتلك viewsuppressed وحق إدارة خاص بنوع معيّن من إزالة البت المقيّد حتى دون امتلاك حق إدارة الكتمان.
إعداد الأذونات الذي يمنح viewsuppressed وdeleterevision أو deletelogentry دون suppressrevision كان يسمح للمُستدعي بكشف مواد محمية بسير عمل الكتمان. تعتمد مسألة التفويض بين المستخدمين هذه على فصل تلك الحقوق.
جهّز مراجعة قابلة للتخلص منها تحتوي فقط على سلسلة canary غير ضارة، واكتم محتواها على wiki محلي معزول. أنشئ حساب اختبار يمتلك viewsuppressed وdeleterevision، لكن دون suppressrevision. يرسل السكربت طلب API القابل للاستغلال، ويتحقق مما إذا كان طلب مجهول قادرًا على رؤية الـ canary، ويستخدم مسؤول اختبار منفصل لاستعادة الكتمان.
يرفض السكربت عناوين URL الخاصة بـ wiki غير 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
يجب أن يشير معرّف المراجعة وعنوان الصفحة إلى تركيبة الـ canary المكتومة. يحتاج حساب الاستعادة إلى suppressrevision.