
TeamViewer उपयोगकर्ता से कर्नेल विशेषाधिकार वृद्धि PoC. CVE-2024-7479 और CVE-2024-7481. ZDI-24-1289 और ZDI-24-1290. TV-2024-1006.
इस रिपॉजिटरी में TeamViewer में एक भेद्यता का शोषण प्रूफ ऑफ कॉन्सेप्ट शामिल है जो एक अविशेषाधिकार प्राप्त उपयोगकर्ता को सिस्टम में एक मनमाना कर्नेल ड्राइवर लोड करने में सक्षम बनाता है। मैं Zero Day Initiative को भेद्यता की रिपोर्ट और जिम्मेदारीपूर्वक खुलासा करने के लिए उनके साथ समन्वय के लिए धन्यवाद देना चाहता हूँ।

इन भेद्यताओं पर समाप्त हुए शोध के विवरण मेरे ब्लॉग पर निम्नलिखित तीन-भाग वाली ब्लॉग श्रृंखला में पाए जा सकते हैं। वे इन भेद्यताओं को अधिक विस्तार से कवर करते हैं और यह भी दिखाते हैं कि मैं प्रक्रिया के दौरान कहाँ असफल रहा। भाग तीन मजेदार है :P.
शोषण के वीडियो यहाँ पाए जा सकते हैं:
जब SYSTEM सेवा IPC से कनेक्ट करते समय एक वैध TeamViewer क्लाइंट को स्पूफ (जैसा कि ब्लॉग में विस्तृत किया गया है) करने में सक्षम होने के बाद, एक मनमाना ड्राइवर स्थापना को ट्रिगर करना संभव था। TeamViewer स्थापित किए जा रहे ड्राइवर के हस्ताक्षर को सत्यापित नहीं कर रहा था।
इस प्रकार TeamViewer की बदौलत USER से KERNEL तक विशेषाधिकार वृद्धि संभव थी।
सबसे अच्छे तरीकों में से एक है प्रसिद्ध तकनीक BYOD, Bring Your Own Vulnerable Driver का उपयोग करके Windows Kernel में एक मान्य हस्ताक्षरित ड्राइवर लोड करना और फिर उपयोगकर्ता स्तर से विशेषाधिकार प्राप्त क्रियाएं करने के लिए इसका शोषण करना, जैसे किसी मनमाने प्रक्रिया के टोकन को एक विशेषाधिकार प्राप्त टोकन से बदलना।
जब TeamViewer सिस्टम पर स्थापित होता है, यह एक सेवा बनाता है जो SYSTEM के रूप में चलती है, TeamViewer_service.exe
यह सेवा कुछ कार्यों के लिए क्लाइंट का सहायक है। इस प्रकार, क्लाइंट उन्नत विशेषाधिकारों के साथ नहीं चलता है और कुछ कार्य सेवा को सौंपे जाते हैं।
सेवा (IPC) के साथ संचार सॉकेट के माध्यम से कार्यान्वित किया जाता है (Overlapped I/O और IoCompletionPort का उपयोग करके)। डिफ़ॉल्ट रूप से, TeamViewer SYSTEM सेवाएँ localhost पर 5939/tcp पर सुनती हैं।
TeamViewer ड्राइवर स्थापना या हस्ताक्षर जांच आदि के लिए क्लाइंट द्वारा भेजे गए पैरामीटर को फ़िल्टर नहीं कर रहा है।
तो विचार यह है: हम एक TV क्लाइंट को स्पूफ करेंगे और VPN Driver स्थापना के लिए पूछेंगे लेकिन एक अन्य INF इंगित करेंगे। मैंने TeamViewer के उसी मूल INF का पुन: उपयोग किया लेकिन एक अन्य (गैर-विशेषाधिकार प्राप्त) पथ में "बुरे" ड्राइवर का नाम बदलकर teamviewervpn.sys कर दिया, क्योंकि यह मूल INF द्वारा लक्षित ड्राइवर नाम है।
यह TeamViewer विकल्प Changes require administrative rights on this computer को भी बायपास करता है।
यह जाँच केवल GUI के माध्यम से प्रभावी है, क्योंकि एक अविशेषाधिकार प्राप्त उपयोगकर्ता के साथ बटन क्लिक करने पर TeamViewer options अक्षम हो जाता है। लेकिन सॉकेट से कनेक्ट करना और मनमाना ड्राइवर लोड करना संभव है।
शोषण संस्करण पर निर्भर है क्योंकि IPC संदेश में क्लाइंट अपना PID और अन्य डेटा संस्करण के बीच निर्दिष्ट करता है। क्लाइंट का संस्करण SYSTEM सेवा के संस्करण से मेल खाना चाहिए। Main.cpp में शोषण को (पंक्तियाँ 140 से 143) लक्षित किए जा रहे TeamViewer_service.exe संस्करण में संशोधित किया जाना चाहिए।
तो, मूल रूप से, हम SYSTEM सेवा से कनेक्ट करने वाले TeamViewer क्लाइंट को स्पूफ करते हैं और एक मनमाना ड्राइवर की स्थापना का अनुरोध करते हैं। TeamViewer सेवा कृपया इसे Kernel में लोड करती है।
TeamViewer के पास एक और IPC संदेश है जो पहले वाले से बहुत मिलता-जुलता है जिसे मैंने पहले खोजा था (Install VPN Driver क्लिक करने पर फेंका जाता है)। यह दूसरा संदेश Printer Driver स्थापित करने के लिए है।
तो, मूलतः, CVE-2024-7479 और CVE-2024-7481 समान हैं लेकिन TeamViewer ने एक ही त्रुटि दो बार की। संदेश, हालांकि अलग हैं, बहुत समान हैं। उनके अलग-अलग IPC Method Id हैं।
परिणाम वही है, एक मनमाना ड्राइवर लोड किया जा सकता है।