
CVE-2021-3560 — accounts-daemon D-Bus रेस कंडीशन के माध्यम से Polkit विशेषाधिकार वृद्धि शोषण
CVE-2021-3560 Polkit (पूर्व में PolicyKit) में एक स्थानीय विशेषाधिकार वृद्धि भेद्यता है, जो Linux डेस्कटॉप वातावरण द्वारा उपयोग किया जाने वाला प्राधिकरण ढांचा है। एक स्थानीय, अन-प्रिविलेज्ड हमलावर accounts-daemon D-Bus इंटरफ़ेस में race condition का फायदा उठाकर एक विशेषाधिकार प्राप्त उपयोगकर्ता बना सकता है, उसका पासवर्ड सेट कर सकता है, और अंततः root एक्सेस प्राप्त कर सकता है।
accounts-daemon (org.freedesktop.Accounts) एक सिस्टम D-Bus सेवा है जो उपयोगकर्ता खातों (निर्माण, विलोपन, पासवर्ड परिवर्तन, आदि) का प्रबंधन करती है। यह निम्नलिखित विधियाँ प्रदर्शित करता है:
| Method | Action |
|---|---|
CreateUser | एक नया सिस्टम उपयोगकर्ता बनाता है |
SetPassword | उपयोगकर्ता पासवर्ड सेट करता है |
DeleteUser | एक उपयोगकर्ता हटाता है |
इन कार्यों के लिए प्राधिकरण आवश्यक है। जब कोई D-Bus कॉल आती है, तो Polkit कॉलर और accounts-daemon के बीच बैठता है:
Caller → D-Bus → Polkit (authorization check) → accounts-daemon (action)
Polkit यह तय करता है कि कॉलर के पास अनुमति है या नहीं, और यदि हाँ, तो अनुरोध को निष्पादन के लिए accounts-daemon को अग्रेषित करता है।
यह भेद्यता एक TOCTOU (Time Of Check, Time Of Use) race है। यहाँ मुख्य बात है:
accounts-daemon को भेजी जाती है (जैसे, CreateUser)।accounts-daemon के प्रोसेसिंग समाप्त करने से पहले — उपयोगकर्ता निर्माण उचित प्रमाणीकरण के बिना हो जाता है, फिर भी उपयोगकर्ता रिकॉर्ड अधूरा रहता है (जैसे, कोई पासवर्ड नहीं, कोई होम निर्देशिका नहीं)।SetPassword कॉल कर सकता है, या अधूरी स्थिति स्वयं उन्नत विशेषाधिकार प्रदान करती है।संक्षेप में: अनुरोध को सही समय पर मारें, और आप प्रमाणीकरण को बायपास कर देते हैं।
यह exploit.sh स्क्रिप्ट पूरी हमले की श्रृंखला को स्वचालित करती है:
# रिपॉजिटरी क्लोन करें
git clone https://github.com/Jeanback1/CVE-2021-3560.git
cd CVE-2021-3560
# एक्सप्लॉइट को निष्पादन योग्य बनाएं
chmod +x exploit.sh
# इसे चलाएं
./exploit.sh
एक्सप्लॉइट पूरा होने के बाद, आपके पास एक root शेल होगा:
whoami
# root

| Component | Affected |
|---|---|
| polkit | ≤ 0.119 (अनपैच्ड) |
| accounts-daemon (accountsservice) | प्रभावित polkit का उपयोग करने वाले सभी संस्करण |
यह भेद्यता polkit 0.120 और बाद में पैच की गई थी।
पैच किए गए वितरण (गैर-विस्तृत):
यह रिपॉजिटरी केवल शैक्षिक और अधिकृत सुरक्षा अनुसंधान के लिए है। इस एक्सप्लॉइट का उपयोग उन सिस्टम पर न करें जिनके स्वामी आप नहीं हैं या जिनके परीक्षण के लिए आपके पास स्पष्ट अनुमति नहीं है। लेखक दुरुपयोग के लिए कोई दायित्व नहीं मानता है।
| Step | Action |
|---|
| 1. समय अंशांकन | D-Bus राउंड-ट्रिप में लगने वाले समय को मापने के लिए एक डमी CreateUser("nobody") कॉल का उपयोग करता है, "kill window" की गणना करता है |
| 2. उपयोगकर्ता निर्माण | चुने गए उपयोगकर्ता नाम के लिए एक CreateUser कॉल भेजता है, उसे पृष्ठभूमि में शुरू करता है, गणना की गई विंडो के लिए सोता है, फिर उसे मार देता है — अनधिकृत उपयोगकर्ता बनाने के लिए race का फायदा उठाता है |
| 3. पासवर्ड सेट | एक बार उपयोगकर्ता (अधूरी अवस्था में) मौजूद हो जाता है, तो ज्ञात पासवर्ड निर्दिष्ट करने के लिए उसी race तकनीक के साथ एक SetPassword कॉल भेजता है |
| 4. विशेषाधिकार वृद्धि | नए उपयोगकर्ता पर स्विच करने के लिए su का उपयोग करता है, sudo चलाता है (जो काम करता है क्योंकि उपयोगकर्ता बायपास किए गए प्राधिकरण पथ के माध्यम से बनाया गया था), /bin/bash को SUID root के साथ /var/tmp/bash में कॉपी करता है, और एक root शेल स्पॉन करता है |