इंप्लिसिट इंटेंट हाइजैकिंग

OWASP कैटगरी: MASVS-PLATFORM: प्लैटफ़ॉर्म इंटरैक्शन

खास जानकारी

इंप्लिसिट इंटेंट को हाइजैक करने की समस्या तब होती है, जब कोई ऐप्लिकेशन किसी इंटेंट को ट्रिगर करते समय, पूरी तरह से सही कॉम्पोनेंट क्लास का नाम या पैकेज नहीं बताता. इससे नुकसान पहुंचाने वाले ऐप्लिकेशन को इंटेंट फ़िल्टर रजिस्टर करने की अनुमति मिलती है, ताकि वह टारगेट किए गए ऐप्लिकेशन के बजाय इंटेंट को इंटरसेप्ट कर सके.

इंटेंट के कॉन्टेंट के आधार पर, हमलावर संवेदनशील जानकारी को पढ़ सकते हैं या उसमें बदलाव कर सकते हैं. इसके अलावा, वे बदले जा सकने वाले ऑब्जेक्ट के साथ इंटरैक्ट भी कर सकते हैं. जैसे, बदले जा सकने वाले PendingIntents या Binders.

किसी इंप्लिसिट इंटेंट को हाइजैक करने से, हैकर अपनी मर्ज़ी से कार्रवाइयां कर सकता है. जैसे, हैकर के कंट्रोल वाले कॉम्पोनेंट लॉन्च करना.

असर

अगर संवेदनशील डेटा को मैनेज करने वाला कोई इंप्लिसिट इंटेंट, वेबव्यू खोलने के लिए किसी अतिरिक्त यूआरएल स्ट्रिंग में सेशन टोकन पास करता है, तो सही इंटेंट फ़िल्टर बताने वाला कोई भी ऐप्लिकेशन इस टोकन को पढ़ सकता है. इससे डिवाइस पर सही तरीके से कॉन्फ़िगर किए गए किसी भी ऐप्लिकेशन को, इंटेंट को इंटरसेप्ट करने और उसमें मौजूद संवेदनशील डेटा को पढ़ने की अनुमति मिल सकती है. इससे हमलावर, व्यक्तिगत पहचान से जुड़ी जानकारी या सेशन टोकन जैसे डेटा को निकाल सकते हैं.

जोखिम कम करने के तरीके

जब तक ऐप्लिकेशन के लिए ज़रूरी न हो, तब तक setPackage() को कॉल करके इंटेंट साफ़ तौर पर बताएं. इससे, इंटेंट को सिर्फ़ किसी खास कॉम्पोनेंट (ऐप्लिकेशन में या दूसरे ऐप्लिकेशन से) के ज़रिए समझा जा सकता है. इससे, भरोसेमंद ऐप्लिकेशन के साथ भेजे गए डेटा को इंटरसेप्ट करने से, अविश्वसनीय ऐप्लिकेशन को रोका जा सकता है. नीचे दिए गए स्निपेट में, इंटेंट को साफ़ तौर पर बताने का तरीका बताया गया है:

Kotlin

val intent = Intent("android.intent.action.CREATE_DOCUMENT").apply {
    addCategory("android.intent.category.OPENABLE")
    setPackage("com.some.packagename")
    setType("*/*")
    putExtra("android.intent.extra.LOCAL_ONLY", true)
    putExtra("android.intent.extra.TITLE", "Some Title")
}
startActivity(intent)

Java

Intent intent = new Intent("android.intent.action.CREATE_DOCUMENT");
intent.addCategory("android.intent.category.OPENABLE");
intent.setPackage("com.some.packagename");
intent.setType("*/*");
intent.putExtra("android.intent.extra.LOCAL_ONLY", true);
intent.putExtra("android.intent.extra.TITLE", "Some Title");
startActivity(intent);

अगर आपको इंप्लिसिट इंटेंट का इस्तेमाल करना है, तो ऐसी संवेदनशील जानकारी या बदलाव किए जा सकने वाले ऑब्जेक्ट को शामिल न करें जिन्हें आपको ज़ाहिर नहीं करना है. जब किसी ऐप्लिकेशन को यह पता न हो कि कौनसा ऐप्लिकेशन किसी कार्रवाई को पूरा करेगा, जैसे कि ईमेल लिखना, फ़ोटो लेना वगैरह, तो इनपुट के लिए इम्प्लीसिट इंटेंट का इस्तेमाल किया जा सकता है.

संसाधन