
CVE-2020-25265 और CVE-2020-25266 का प्रदर्शन करने वाला प्रूफ-ऑफ-कॉन्सेप्ट शोषण, एक निर्मित MP3 फ़ाइल का उपयोग करके libappimage और appimaged के माध्यम से स्वेच्छिक कोड निष्पादन प्राप्त करता है, सिस्टम अनुप्रयोगों को ओवरराइड करता है।
यह libappimage और appimaged का PoC exploit है।
दो CVEs के संयोजन का उपयोग करके, एक फ़ाइल बनाई जा सकती है जो appimage प्रतीत नहीं होती, जो implicit रूप से appimaged द्वारा उठाई जाती है और स्थापित की जाती है, उसी एप्लिकेशन के सिस्टम-स्थापित संस्करण को ओवरराइड करती है।
इस मामले में, MP3 फ़ाइल का उपयोग पेलोड के रूप में किया गया था, और Nautilus को ओवरराइड किया गया था।
यह appimaged के सभी संस्करणों और 1.0.3 से पुराने सभी libappimage संस्करणों को प्रभावित करता है।
MP3 कोडेक में फ़ाइल हेडर नहीं होता, इसलिए मीडिया सॉफ़्टवेयर को फ्रेम हेडर ढूंढने के लिए फ़ाइल को स्कैन करना होता है। इसका मतलब है कि हम ELF और AppImage टाइप 2 हेडर को फ़ाइल के सामने रख सकते हैं, और MP3 फिर भी चलने योग्य रहेगा। यह MP3 को इस PoC के लिए एक प्रमुख लक्ष्य बनाता है।
एक MP3 फ़ाइल को संशोधित किया जाता है ताकि चल रहे मीडिया के बाद एक पेलोड बाइनरी शामिल हो, जिसमें Dart स्क्रिप्ट का उपयोग करके MP3 डेटा को पेलोड निष्पादन योग्य और ELF हेडर के बीच रखा जाता है। (ध्यान दें कि मैंने प्रतीक तालिका में प्रतीकों के स्थानों को समायोजित नहीं किया, क्योंकि इसके लिए अधिक प्रयास लगते और इस PoC के लिए इसकी आवश्यकता नहीं थी।) पेलोड बाइनरी 1mb से कम है, इसलिए यह फ़ाइल आकार में ध्यान देने योग्य वृद्धि नहीं करती है। फ़ाइल के बिल्कुल अंत में, एक squashfs फ़ाइलसिस्टम जोड़ा जाता है, जिसमें नकली Nautilus डेस्कटॉप फ़ाइल और आइकन होता है।
ध्यान दें कि, हालांकि MP3 को squashfs के अंत में जोड़ना तकनीकी रूप से काम करता, फ़ाइल में इतनी देर से दिखने के कारण मीडिया प्लेयर को भ्रमित करने की अधिक संभावना है, जबकि ELF हेडर के तुरंत बाद फ़ाइल में केवल कुछ दर्जन बाइट्स होते हैं।
appimaged सभी ट्रैक की गई निर्देशिकाओं में सभी फ़ाइलों को स्कैन करता है, चाहे फ़ाइल एक्सटेंशन कुछ भी हो। जब यह MP3 को उठाता है, तो यह ELF और AppImage हेडर का पता लगाता है, और भीतर डेस्कटॉप फ़ाइल को निकालने के लिए आगे बढ़ता है।
दुष्ट डेस्कटॉप फ़ाइल अब लिखी जाती है और दुर्भावनापूर्ण MP3 की ओर इशारा करती है। जब उपयोगकर्ता अगली बार Files चलाता है, तो यह सिस्टम इंस्टॉलेशन के बजाय MP3 के एम्बेडेड ELF निष्पादन योग्य को प्रारंभ करेगा।
आम तौर पर, डेस्कटॉप फ़ाइल का नाम 'appimagekit_...desktop' होता, इसलिए यह किसी भी सिस्टम एप्लिकेशन को पूरी तरह से ओवरराइड नहीं कर सकता। हालांकि, libappimage में Integrator.cpp बिना सत्यापन या एस्केपिंग के Name फ़ील्ड को पकड़ लेता है, इसलिए हम इसे दुष्ट डेस्कटॉप फ़ाइल में जोड़ सकते हैं:
Name=/../org.gnome.Nautilus
Name[en]=Files
और फ़ाइल ~/.local/share/applications/org.gnome.Nautilus.desktop पर लिखी जाएगी, इस प्रकार सिस्टम-स्थापित Nautilus को छिपा देगी।
सुनिश्चित करें कि आपका स्थापित libappimage संस्करण कम से कम 1.0.3 है, जो Name फ़ील्ड सत्यापन को ठीक करता है। ध्यान देने योग्य बात यह है कि इस समय इसमें Debian का libappimage शामिल नहीं है, जो काफी पुराना है।
appimaged के सभी संस्करण असुरक्षित हैं, और प्रोजेक्ट को हटा दिया गया है।
go-appimage केवल *.AppImage नाम वाले appimages को उठाकर फ़ाइलनाम समस्या से बचता है।
AppImageLauncher स्थापना होने से पहले उपयोगकर्ता से स्थापित करने की अनुमति मांगकर फ़ाइलनाम समस्या से बचता है।
एक यादृच्छिक ऑडियो फ़ाइल को audio.mp3 में रखें और पेलोड बनाने और संशोधित MP3 फ़ाइल लिखने के लिए dart bin/write_mp3.dart चलाएं। इसके काम करने के लिए आपको Dart SDK और FreePascal स्थापित होना चाहिए।
बाइनरी के लिए Pascal का उपयोग किया गया क्योंकि इसने सबप्रोसेस कार्यक्षमता का उपयोग करते समय परीक्षण की गई अन्य भाषाओं (musl का उपयोग करके C स्थिर रूप से लिंक, Go) की तुलना में सबसे छोटे स्थिर रूप से लिंक किए गए बाइनरी उत्पन्न किए।
परीक्षण में, world.execute(me) का उपयोग ऑडियो फ़ाइल के रूप में किया गया था, क्योंकि यह उपयुक्त लगा।