
CVE-2026-102975 के लिए sanitized रिपोर्ट और स्थानीय proof-of-concept स्क्रिप्ट, जो एक MediaWiki RevisionDelete API authorization bypass है जो suppressrevision के बिना suppression removal की अनुमति देता है।
रिपोर्टर: Marco Paciaroni (BomboBombone)।
MediaWiki का action=revisiondelete ने suppressrevision की जाँच किए बिना suppress=no स्वीकार किया। viewsuppressed और एक प्रकार-विशिष्ट प्रबंधन अधिकार रखने वाला कॉलर, suppression को प्रबंधित करने के अधिकार के बिना भी प्रतिबंधित बिट को हटा सकता था।
एक अनुमति सेटअप जो viewsuppressed और deleterevision या deletelogentry को suppressrevision के बिना प्रदान करता है, कॉलर को suppression वर्कफ़्लो द्वारा संरक्षित सामग्री को उजागर करने की अनुमति देता था। यह क्रॉस-यूज़र प्राधिकरण समस्या उन अधिकारों के अलग होने पर निर्भर करती है।
एक डिस्पोज़ेबल रिवीज़न तैयार करें जिसमें केवल एक हानिरहित canary स्ट्रिंग हो और एक पृथक लोकल विकी पर उसकी सामग्री को suppress करें। viewsuppressed और deleterevision वाला एक टेस्ट अकाउंट बनाएँ, लेकिन suppressrevision के बिना। स्क्रिप्ट कमज़ोर API अनुरोध भेजती है, जाँचती है कि क्या एक अनाम अनुरोध canary को देख सकता है, और suppression को पुनर्स्थापित करने के लिए एक अलग टेस्ट एडमिनिस्ट्रेटर का उपयोग करती है।
स्क्रिप्ट गैर-loopback विकी URL को अस्वीकार करती है, दोनों अकाउंट्स के अधिकारों की जाँच करती है, दोनों पासवर्ड के लिए प्रॉम्प्ट करती है, और टेस्ट रिवीज़न की दृश्यता बदलने से पहले टाइप किए गए पुष्टिकरण की आवश्यकता होती है। केवल एक डिस्पोज़ेबल लोकल फ़िक्स्चर का उपयोग करें।
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 और पेज शीर्षक को suppressed canary फ़िक्स्चर को संदर्भित करना चाहिए। पुनर्स्थापन अकाउंट को suppressrevision की आवश्यकता है।