OWASP कैटगरी: MASVS-PLATFORM: प्लैटफ़ॉर्म इंटरैक्शन
खास जानकारी
Android ऐप्लिकेशन और Android सिस्टम, ब्रॉडकास्ट को मैसेजिंग सिस्टम के तौर पर इस्तेमाल कर सकते हैं. इससे, अन्य ऐप्लिकेशन को उन इवेंट की सूचना दी जा सकती है जिनमें उनकी दिलचस्पी हो सकती है. स्टिकी ब्रॉडकास्ट एक खास तरह के ब्रॉडकास्ट होते हैं. इनके लिए, ब्रॉडकास्ट पूरा होने के बाद भी भेजे गए इंटेंट ऑब्जेक्ट कैश मेमोरी में बने रहते हैं. सिस्टम, बाद में रजिस्टर किए गए रिसीवर के लिए, स्टिक इनटेंट को फिर से ब्रॉडकास्ट कर सकता है. माफ़ करें, स्टिक ब्रॉडकास्ट एपीआई में सुरक्षा से जुड़ी कई कमियां हैं. इसलिए, इसे Android 5.0 (एपीआई लेवल 21) में बंद कर दिया गया है.
स्टिक चैनल पर ब्रॉडकास्ट करने की सुविधा का इस्तेमाल करके, कोई भी व्यक्ति ब्रॉडकास्ट ऐक्सेस कर सकता है
स्टिक चैनल पर ब्रॉडकास्ट करने की सुविधा, सिर्फ़ उन लोगों के लिए उपलब्ध नहीं कराई जा सकती जिन्हें कुछ खास अनुमतियां मिली हैं. इसलिए, इनका इस्तेमाल संवेदनशील जानकारी ब्रॉडकास्ट करने के लिए नहीं किया जा सकता. ऐसा लग सकता है कि ब्रॉडकास्ट Intent
पर ऐप्लिकेशन के पैकेज का नाम डालने से, BroadcastReceivers
का सेट सीमित हो जाता है:
Kotlin
val intent = Intent("com.example.NOTIFY").apply {
setPackage("com.example.myapp")
}
applicationContext.sendBroadcast(intent)
Java
Intent intent = new Intent("com.example.NOTIFY");
intent.setPackage("com.example.myapp");
getApplicationContext().sendBroadcast(intent);
उदाहरण में, ब्रॉडकास्ट भेजे जाने पर, सिर्फ़ com.example.myapp
पैकेज के रिसीवर को इंटेंट मिलता है. हालांकि, जब इंटेंट को स्टिक कैश मेमोरी से फिर से ब्रॉडकास्ट किया जाता है, तो पैकेज के नाम का फ़िल्टर लागू नहीं होता. registerReceiver()
तरीके का इस्तेमाल करके रिसीवर को रजिस्टर करते समय, स्टिक कैश में मौजूद वे सभी इंटेंट, रिसीवर को फिर से ब्रॉडकास्ट किए जाते हैं जो तय किए गए फ़िल्टर से मेल खाते हैं. भले ही, रिसीवर किसी भी पैकेज में मौजूद हो.
कोई भी व्यक्ति स्टिकी ब्रॉडकास्ट भेज सकता है
स्टिक बने ब्रॉडकास्ट भेजने के लिए, ऐप्लिकेशन को सिर्फ़ android.permission.BROADCAST_STICKY
अनुमति चाहिए. यह अनुमति, ऐप्लिकेशन इंस्टॉल होने पर अपने-आप मिल जाती है. इसलिए, हमलावर किसी भी रिसीवर को कोई भी इंटेंट भेज सकते हैं. इससे, वे किसी दूसरे ऐप्लिकेशन को बिना अनुमति के ऐक्सेस कर सकते हैं. ब्रॉडकास्ट रिसीवर, इंटेंट भेजने वाले उन लोगों पर पाबंदी लगा सकते हैं जिनके पास कोई खास अनुमति है. हालांकि, ऐसा करने पर, रिसीवर को स्टिक कैश से ब्रॉडकास्ट नहीं मिल सकते, क्योंकि उन्हें किसी ऐप्लिकेशन की पहचान के संदर्भ में नहीं भेजा जाता और उन्हें किसी भी अनुमति के साथ ब्रॉडकास्ट नहीं किया जाता.
स्टिक चैनल में शामिल ब्रॉडकास्ट में कोई भी व्यक्ति बदलाव कर सकता है
जब कोई इंटेंट, स्टिक वाले ब्रॉडकास्ट का हिस्सा होता है, तो वह इंटेंट, स्टिक कैश मेमोरी में मौजूद उस इंस्टेंस की जगह ले लेता है जिसमें एक ही कार्रवाई, डेटा, टाइप, आइडेंटिफ़ायर, क्लास, और कैटगरी होती है. इसलिए, कोई हमलावर किसी मान्य ऐप्लिकेशन के स्टिक इनटेंट में मौजूद अतिरिक्त डेटा को आसानी से बदल सकता है. इसके बाद, यह डेटा अन्य रिसीवर को फिर से ब्रॉडकास्ट किया जा सकता है.
sendStickyOrderedBroadcast()
तरीके का इस्तेमाल करके भेजे गए ब्रॉडकास्ट, एक बार में एक रिसीवर को डिलीवर किए जाते हैं. इससे, कम प्राथमिकता वाले रिसीवर को डिलीवर करने से पहले, ज़्यादा प्राथमिकता वाले रिसीवर को ब्रॉडकास्ट का इस्तेमाल करने की अनुमति मिलती है. हर रिसीवर, क्रम से काम करता है. इसलिए, वह अगले रिसीवर को नतीजा भेज सकता है. जैसे, setResultData()
को कॉल करके. इसके अलावा, वह ब्रॉडकास्ट को रोक सकता है, ताकि अगले रिसीवर को ब्रॉडकास्ट न मिले. कोई भी हमलावर, किसी मान्य ऐप्लिकेशन से स्टिकी ऑर्डर वाले ब्रॉडकास्ट पाने के बाद, ब्रॉडकास्ट के नतीजे के डेटा में छेड़छाड़ करने या ब्रॉडकास्ट को पूरी तरह से बंद करने के लिए, हाई-प्राथमिकता वाला रिसीवर बना सकता है.
असर
इस बात पर असर पड़ता है कि स्टिक वाले ब्रॉडकास्ट का इस्तेमाल कैसे किया जाता है और ब्रॉडकास्ट रिसीवर को कौनसा डेटा भेजा जाता है. आम तौर पर, स्टिक ब्रॉडकास्ट का इस्तेमाल करने से, संवेदनशील डेटा का खुलासा हो सकता है, डेटा में छेड़छाड़ हो सकती है, किसी दूसरे ऐप्लिकेशन में बिना अनुमति के ऐक्शन को लागू किया जा सकता है, और सेवा अस्वीकार की जा सकती है.
जोखिम कम करने के तरीके
स्टिकी ब्रॉडकास्ट का इस्तेमाल नहीं किया जाना चाहिए. हमारा सुझाव है कि किसी भी समय मौजूदा वैल्यू को वापस पाने के लिए, नॉन-स्टिकी ब्रॉडकास्ट का इस्तेमाल किसी अन्य तरीके के साथ करें. जैसे, लोकल डेटाबेस.
डेवलपर, अनुमतियों का इस्तेमाल करके या इंटेंट पर ऐप्लिकेशन पैकेज का नाम सेट करके यह कंट्रोल कर सकते हैं कि किसे नॉन-स्टिकी ब्रॉडकास्ट मिलें. इसके अलावा, अगर किसी ब्रॉडकास्ट को ऐप्लिकेशन के बाहर के कॉम्पोनेंट को भेजने की ज़रूरत नहीं है, तो LiveData
का इस्तेमाल करें. यह ऑब्ज़र्वर पैटर्न लागू करता है.
ब्रॉडकास्ट को सुरक्षित करने के बारे में ज़्यादा जानकारी, ब्रॉडकास्ट की खास जानकारी पेज पर मिल सकती है.