OWASP कैटगरी: MASVS-CODE: कोड क्वालिटी
खास जानकारी
public abstract Context createPackageContext (String packageName, int flags)
createPackageContext
तरीके का इस्तेमाल तब किया जाता है, जब डेवलपर अपने ऐप्लिकेशन में किसी दूसरे ऐप्लिकेशन के लिए कॉन्टेक्स्ट बनाना चाहता है.
उदाहरण के लिए, अगर डेवलपर को तीसरे पक्ष के ऐप्लिकेशन से संसाधन चाहिए या उससे कॉल करने के तरीके चाहिए, तो वे createPackageContext
का इस्तेमाल करेंगे.
हालांकि, अगर कोई ऐप्लिकेशन CONTEXT_IGNORE_SECURITY
और CONTEXT_INCLUDE_CODE
फ़्लैग के साथ createPackageContext
को कॉल करता है और फिर getClassLoader()
को कॉल करता है, तो इससे ऐप्लिकेशन को नुकसान पहुंचाने वाले ऐप्लिकेशन के कोड को चलाने की सुविधा मिल सकती है. उदाहरण के लिए, ऐसा तब हो सकता है, जब कोई हमलावर ऐसे पैकेज के नाम का इस्तेमाल करे जिस पर दावा नहीं किया गया है (पैकेज पर कब्जा करना). ऐसा तब होता है, जब डेवलपर को उम्मीद होती है कि उपयोगकर्ता के डिवाइस पर वह पैकेज मौजूद होगा.
इस तरह के हमले का शिकार होने के लिए, ऐप्लिकेशन को इन शर्तों को पूरा करना होगा:
जोखिम में पड़ने वाला ऐप्लिकेशन:
createPackageContext
कोCONTEXT_IGNORE_SECURITY
औरCONTEXT_INCLUDE_CODE
से कॉल किया गया.- वापस लाए गए कॉन्टेक्स्ट पर
getClassLoader()
को कॉल करता है.
नुकसान पहुंचाने वाला ऐप्लिकेशन:
- वह पैकेज के उस नाम पर दावा कर सकता है जिसे असुरक्षित ऐप्लिकेशन,
createPackageContext
को पास करता है. - android:appComponentFactory को एक्सपोर्ट करता है.
असर
जब कोई ऐप्लिकेशन, createPackageContext का इस्तेमाल असुरक्षित तरीके से करता है, तो इससे नुकसान पहुंचाने वाले ऐप्लिकेशन को, जोखिम की आशंका वाले ऐप्लिकेशन के संदर्भ में, मनमुताबिक कोड को लागू करने की अनुमति मिल सकती है.
जोखिम कम करने के तरीके
जब तक ज़रूरी न हो, तब तक createPackageContext
को CONTEXT_IGNORE_SECURITY
और CONTEXT_INCLUDE_CODE
के साथ कॉल न करें.
जिन मामलों में ऐसा करना ज़रूरी है उनमें, उस पैकेज की पहचान की पुष्टि करने के लिए कोई तरीका लागू करना न भूलें जिस पर createPackageContext
को लागू किया जा रहा है. उदाहरण के लिए, पैकेज के हस्ताक्षर की पुष्टि करके.
संसाधन
- createPackageContext दस्तावेज़
- createPackageContext कोड को चलाने के बारे में OverSecured ब्लॉग पोस्ट