CVE-2021-3560
polkit में रेस कंडीशन के माध्यम से विशेषाधिकार वृद्धि।
कमजोरी का विवरण
CVE-2021-3560 polkit में एक रेस कंडीशन है, जो एक अनधिकृत स्थानीय उपयोगकर्ता को रूट विशेषाधिकार प्राप्त करने की अनुमति देता है। यह कमजोरी उस तरीके में मौजूद है जिसमें polkit कनेक्शन टूटने पर D-Bus त्रुटियों को संभालता है।
समय निर्धारण
इष्टतम समय निर्धारित करने के लिए कमांड चलाएँ:
time dbus-send --system --dest=org.freedesktop.Accounts --type=method_call --print-reply /org/freedesktop/Accounts org.freedesktop.Accounts.CreateUser string:testuser string:"Test User" int32:1
कोड में आधे वास्तविक समय ± 0.003 की सीमा का उपयोग किया जाता है।
समय क्यों महत्वपूर्ण है?
- यदि प्रक्रिया को बहुत जल्दी मार दिया जाए — अनुरोध भेजा नहीं जा सकेगा
- यदि बहुत देर से मारा जाए — polkit प्रमाणीकरण की जांच कर लेगा और अस्वीकार कर देगा
- उस 'गोल्डन विंडो' में आना होगा, जब polkit ने अनुरोध प्राप्त कर लिया है लेकिन अभी तक प्रमाणीकरण की जांच नहीं की है
एक्सप्लॉइट कैसे काम करता है?
- पैरामीटर int32:1 (व्हील ग्रुप में जोड़ना) के साथ एक D-Bus अनुरोध उपयोगकर्ता बनाने के लिए भेजा जाता है
- अनुरोध बीच में ही तोड़ दिया जाता है (रेस कंडीशन)
- Polkit प्रमाणीकरण जांच पूरी नहीं कर पाता
- D-Bus प्रेषक को नहीं ढूंढ पाता
- Polkit त्रुटि को गलत तरीके से संभालता है और UID = 0 (रूट) निर्दिष्ट करता है
- उपयोगकर्ता बिना प्रमाणीकरण के बनाया जाता है
- नए उपयोगकर्ता के लिए पासवर्ड सेट करने का अनुरोध भेजा जाता है (उसी समय के साथ)
सफलता के आंकड़े
- उपयोगकर्ता 1-2 प्रयासों में बन सकता है
- पासवर्ड निर्दिष्ट करने के लिए अधिक प्रयासों की आवश्यकता होती है
- 100 पुनरावृत्तियाँ सफलता की उच्च संभावना देती हैं
यदि एक्सप्लॉइट काम नहीं करता है, तो प्रयास करें:
- कोड में TIMING_RANGE बढ़ाएँ
- स्क्रिप्ट को कई बार चलाएँ
- सुनिश्चित करें कि आप SSH सत्र में हैं (ग्राफिकल में नहीं)