
Plex media server स्थानीय विशेषाधिकार वृद्धि poc - CVE-2021-42835
Plex Media Server for Windows संस्करण 1.25.0.5282 से पहले, Time Of Check Time Of Use (TOCTOU) के प्रति संवेदनशील है जो निम्न विशेषाधिकार वाले उपयोगकर्ताओं को SYSTEM विशेषाधिकार प्राप्त करने की अनुमति देता है।
Tomer Peled, Netanel Cohen, और Amir Shen, BugSec के सुरक्षा शोधकर्ता।
Plex for windows नए अपडेट स्थापित करने के लिए PlexUpdateService.exe का उपयोग करता है। सेवा SYSTEM संदर्भ में चल रही है। अपडेट स्थापित करते समय, सेवा पहले फ़ाइल अखंडता और डिजिटल हस्ताक्षर सत्यापित करती है, केवल यदि जाँच सफल होती है तो अपडेट स्थापित होगा।
इस प्रक्रिया में, अखंडता और हस्ताक्षर जाँच के बाद, एक डिज़ाइन दोष था जो अपडेट फ़ाइल को अनुचित तरीके से संभालता था। फ़ाइल बंद कर दी गई और बाद में स्थापना के लिए फिर से खोली गई।
यह दोष एक हमलावर को अपडेट फ़ाइल को एक दुर्भावनापूर्ण फ़ाइल से बदलने की अनुमति देता है जैसे ही सेवा अखंडता और हस्ताक्षर की जाँच पूरी कर लेती है, जिसके परिणामस्वरूप SYSTEM संदर्भ में कोड निष्पादन होता है।
इस POC में James Forshaw द्वारा विकसित टूल का उपयोग थोड़े संशोधनों के साथ किया गया है। मूल यहां पाया जा सकता है - https://github.com/googleprojectzero/symboliclink-testing-tools
उपरोक्त को प्राप्त करने के लिए हमने एक जंक्शन फ़ोल्डर का उपयोग किया जो पहले एक वैध अपडेट फ़ाइल वाले फ़ोल्डर की ओर इशारा करेगा और फिर दुर्भावनापूर्ण फ़ाइल वाले फ़ोल्डर में स्वैप हो जाएगा।
हमने पाया कि फ़ाइल एक्सेस क्रम इस प्रकार था:
हमने जंक्शन फ़ोल्डर पर एक माउंट पॉइंट बनाया जो वैध अपडेट फ़ाइल वाले फ़ोल्डर की ओर इशारा करता है। cacert.pem पर एक कॉलबैक फ़ंक्शन के साथ opLock सेट करें, जैसे ही इसे एक्सेस किया जाता है हम माउंट पॉइंट को दुर्भावनापूर्ण फ़ोल्डर में बदल देते हैं।
इसके अलावा, हमने एक RPC क्लाइंट बनाया है जो अपडेट को ट्रिगर करेगा।
PlexClient/PlexClient.cpp में ROOTDIR को अपने पथ से बदलें।
const wchar_t* pszString = L"<ROOTDIR>\\PlEXcalaison\\TOCTOU\\junction\\plex.exe"; // Path to the update file.
PlEXcalaison/BaitAndSwitch/BaitAndSwitch.cpp में ROOTDIR को अपने पथ से बदलें।
static LPCWSTR junction = L"<ROOTDIR>\\PlEXcalaison\\TOCTOU\\junction"; // Path to junction folder , MAKE SURE IT IS EMPTY !
static LPCWSTR target1 = L"<ROOTDIR>\\PlEXcalaison\\TOCTOU\\valid"; // Path to folder contains the valid update file.
static LPCWSTR target2 = L"<ROOTDIR>\\PlEXcalaison\\TOCTOU\\malicious"; // Path to folder contains the malicious file - MUST BE THE SAME NAME AS THE UPDATE FILE.
static LPCWSTR cacert = L"C:\\Program Files (x86)\\Plex\\Plex Media Server\\Resources\\cacert.pem"; // Path to cacert.pem - can be found in plex directory.
https://ir-on.io/2021/12/02/local-privilege-plexcalation/
https://forums.plex.tv/t/security-regarding-cve-2021-42835/761510