
CVE-2026-0091, एंड्रॉइड विंडो प्रबंधन में एक समस्या का उपयोग करके adb से लॉन्चर प्रक्रिया में मनमाना कोड निष्पादन करें।
यह समस्या Android 14+ के लिए जून 2026 Android सुरक्षा बुलेटिन में ठीक कर दी गई है। पैच देखने के लिए यहां क्लिक करें
TODO
जब मुझे थोड़ा खाली समय मिलेगा तब मैं लेख पूरा करूंगा
लेकिन उससे पहले मुझे स्कूल के काम और परीक्षाओं से लड़ना है
मैंने परीक्षाएं खत्म होने से पहले इस अनुभाग को पूरा करने का निर्णय लिया।
मेरे लिए शुभकामनाएं 😇
IApplicationThread एक निजी कॉलबैक है जो सिस्टम को ऐप्स द्वारा प्रदान किया जाता है ताकि सिस्टम इसका उपयोग कमांड भेजने (निर्दिष्ट ऐप लोड करना, घटक जीवनचक्र में परिवर्तन की सूचना देना, आदि) के लिए कर सके।
यह केवल सिस्टम से उपयोग करने के लिए अभिप्रेत है, इसलिए कोई अनुमति जांच नहीं है, और सुरक्षा केवल इस तथ्य से सुनिश्चित होती है कि वस्तु किसी दुर्भावनापूर्ण प्रक्रिया द्वारा प्राप्त नहीं की जाती है। यह वेब में "कुकीज" या "टोकन" की अवधारणा के समान लगता है। ऐसे पहुंच नियंत्रण मॉडल को क्षमता-आधारित सुरक्षा कहा जाता है।
यदि कोई और अन्य प्रक्रियाओं से IApplicationThread प्राप्त करने में सफल हो जाता है, तो वे मनमाने आदेश भेज सकते हैं और पीड़ित ऐप उन गढ़े हुए आदेशों को इस प्रकार संसाधित करेगा जैसे वे सिस्टम द्वारा उत्पन्न किए गए हों। CVE-2022-20452 के पिछले शोषण में इस चाल का उपयोग मनमाना कोड निष्पादन करने के लिए किया गया था।
जबकि IApplicationThread को केवल सिस्टम प्रक्रिया को पास किया जाना चाहिए, यह अप्रत्याशित रूप से system_server से बाहर भेजा जा सकता है।
कोई भी ऐसा getIApplicationThreadForApp(String packageName) API लागू नहीं करेगा जो किसी के लिए भी उजागर हो, यह एक स्पष्ट सुरक्षा उल्लंघन है।
लेकिन यदि IApplicationThread को किसी अन्य वस्तु में लपेटा जाता है और बाहरी आवरण वस्तु भेज दी जाती है, तो यह अधिक संभावित परिदृश्य है।
RemoteTransition ऐसा आवरण है जिसमें एनीमेशन चलाने वाले ऐप की प्राथमिकता बढ़ाने के लिए एक IApplicationThread होता है।
उस API का एक उपयोगकर्ता Launcher3 है, जो AOSP और Pixel उपकरणों पर डिफ़ॉल्ट होम एप्लिकेशन है, जो RemoteTransition का उपयोग करके एक ActivityOptions बनाता है और फिर इसे startActivity() को पास करता है।
जबकि Launcher3 स्वयं वस्तु को अविश्वसनीय कारकों के लिए उजागर नहीं करता है, system_server कभी-कभी ऐसा करता है।
CVE-2022-20419 इसलिए हुआ क्योंकि system_server ने कॉल करने वाले द्वारा पास किए गए ActivityOptions को लॉन्च किए गए ऐप को अग्रेषित कर दिया लेकिन RemoteTransition को हटाना भूल गया, जिससे लॉन्च किए गए ऐप को इसे प्राप्त करने और लॉन्चर प्रक्रिया के अंदर मनमाना कोड लोड करने की अनुमति मिल गई।
साझा-तत्व संक्रमण एनीमेशन के दौरान, बहुत सारा काम करना होता है और WMCore और WMShell के बीच संचार होना आवश्यक है, जहां WM का अर्थ Window Manager है।
WMShell को समझने के लिए आप यह लेख पढ़ सकते हैं।
चूंकि WMCore और WMShell अलग-अलग प्रक्रियाओं में चलते हैं (WMCore system_server में और WMShell SystemUI में चलता है), वे एक-दूसरे से बात करने के लिए Binder तंत्र का उपयोग करते हैं।
WMCore ने एक Binder registerTransitionPlayer API उजागर किया और WMShell अपने स्वयं के बाइंडर को पंजीकृत करने के लिए इसका उपयोग करता है।
जब एनीमेशन शुरू होता है, WMCore requestStartTransition को कॉल करता है और TransitionRequestInfo रिमोट को पास किया जाता है, जिसमें प्रारंभिक RemoteTransition शामिल होता है।
इसलिए यदि हम ट्रांज़िशन प्लेयर को बदल सकते हैं, तो हम Launcher के IApplicationThread को पुनः प्राप्त करने और विशेषाधिकार प्राप्त प्रक्रिया के अंदर मनमाना कोड निष्पादन प्राप्त करने में सक्षम होंगे।
हालाँकि, registerTransitionPlayer को MANAGE_ACTIVITY_TASKS अनुमति द्वारा संरक्षित किया गया है जो तृतीय-पक्ष ऐप प्राप्त नहीं कर सकता है।
लेकिन adb shell भी अविश्वसनीय उपयोगकर्ता कोड चला सकता है, और शेल को MANAGE_ACTIVITY_TASKS अनुमति प्रदान की गई है, इसलिए सौभाग्य से हम adb shell से हमला शुरू कर सकते हैं।
यह एक मजेदार प्रश्न है कि हमलावर इस भेद्यता के माध्यम से क्या कर सकते हैं।
चूंकि Launcher को दी गई अधिकांश अनुमतियां adb shell के पास भी हैं, जो हमलावर शेल पहचान के तहत कोड निष्पादित करने में पहले से ही सक्षम हैं, उन्हें डिवाइस से समझौता करने के लिए इस भेद्यता का शोषण करने की आवश्यकता नहीं है।
यह दुर्भावनापूर्ण ऐप द्वारा उपयोग किए जाने वाले शोषण की तुलना में IApplicationThread सीखने के लिए एक शैक्षिक उदाहरण परियोजना की तरह है।
हालाँकि, कोई अभी भी इसमें रुचि रख सकता है।
उदाहरण के लिए, इसका उपयोग Launcher की निजी फ़ाइलों को निकालने के लिए किया जा सकता है, जो डिवाइस को रूट किए बिना दुर्भावनापूर्ण Launcher ऐप्स के फोरेंसिक विश्लेषण में उपयोगी हो सकता है। पहले यह CVE-2024-31317 का शोषण करके प्राप्त किया गया था, और मेरी खोज पिछले वाले को ठीक करने के बाद एक और विधि प्रकट करती है।
यह उपयोगकर्ताओं को अपने डिवाइस को पहले रूट किए बिना Fabricated Runtime Resources Overlay (FRRO) का उपयोग करने की भी अनुमति देता है, इसलिए रूटलेस कस्टम थीम्स CVE-2021-39630 को पैच करने के बाद वापस आ गए हैं। मेरे शोषण ने इसे सेटिंग android:integer/config_multiuserMaximumUsers को 100 पर सेट करके प्रदर्शित किया है।
इसके अलावा, Launcher डिफ़ॉल्ट रूप से Recents स्क्रीन घटक को भी होस्ट करता है और इस प्रकार कुछ विशेषाधिकार प्राप्त कार्यों के लिए व्हाइटलिस्ट किया गया है। मुझे लगता है कि Launcher मौजूदा कार्य में लॉन्च की गई गतिविधियों के निर्यात/अनुमति सेटिंग्स की परवाह किए बिना मनमानी गतिविधि शुरू करने की अनुमति है जो कुछ डिवाइस प्रबंधन उपकरण ऐप्स द्वारा वांछित हो सकता है, हालांकि मैंने स्वयं इसका परीक्षण नहीं किया है।
प्रोजेक्ट बनाएं, उत्पन्न apk फ़ाइल इंस्टॉल करें (यदि आप Android Studio के अंदर Run बटन का उपयोग करते हैं, तो "Always install with package manager" चालू करें)।
PC पर निम्नलिखित कमांड चलाएं
adb shell app_process '-Djava.class.path=$(pm path top.canyie.transitionplayer | cut -c9-) /system/bin top.canyie.transitionplayer.Main'
फिर लॉन्चर से किसी भी ऐप के आइकन पर टैप करके उसे लॉन्च करें।
लॉन्चर ऐप से एक सूचना भेजी जानी चाहिए, और यदि आप Android 14+ पर हैं, तो सिस्टम में एक फैब्रिकेटेड ओवरले इंजेक्ट किया जाएगा, इसलिए adb shell cmd overlay lookup android android:integer/config_multiuserMaximumUsers को 100 लौटाना चाहिए।