OWASP कैटगरी: MASVS-STORAGE: स्टोरेज
खास जानकारी
गलत तरीके से कॉन्फ़िगर किया गया FileProvider
, हमलावर को अनजाने में फ़ाइलों और डायरेक्ट्री का ऐक्सेस दे सकता है. कॉन्फ़िगरेशन के आधार पर, हमलावर इन फ़ाइलों को पढ़ सकता है या उनमें जानकारी जोड़ सकता है. इससे संवेदनशील जानकारी लीक हो सकती है या सबसे खराब स्थिति में, मनचाहा कोड लागू किया जा सकता है. उदाहरण के लिए, अगर किसी ऐप्लिकेशन के कॉन्फ़िगरेशन में <root-path>
सेट है, तो हमलावर डेटाबेस में सेव की गई संवेदनशील जानकारी को ऐक्सेस कर सकता है. इसके अलावा, वह ऐप्लिकेशन की नेटिव लाइब्रेरी को ओवरराइट कर सकता है. इससे, ऐप्लिकेशन में कोई भी कोड चलाया जा सकता है.
असर
कॉन्फ़िगरेशन और फ़ाइल के कॉन्टेंट के आधार पर, इसका असर अलग-अलग होता है. हालांकि, आम तौर पर फ़ाइलों को पढ़ते समय डेटा लीक होता है या लिखते समय फ़ाइलों को ओवरराइट किया जाता है.
जोखिम कम करने के तरीके
कॉन्फ़िगरेशन में <root-path> पाथ एलिमेंट का इस्तेमाल न करना
<root-path>
, डिवाइस की रूट डायरेक्ट्री (/
) से जुड़ा होता है. कॉन्फ़िगरेशन में इसकी अनुमति देने से, फ़ाइलों और फ़ोल्डर को मनमुताबिक ऐक्सेस किया जा सकता है. इनमें ऐप्लिकेशन का सैंडबॉक्स और /sdcard
डायरेक्ट्री भी शामिल है. इससे, हमलावर को हमले के लिए बहुत ज़्यादा जगह मिलती है.
छोटी पाथ रेंज शेयर करना
पाथ कॉन्फ़िगरेशन फ़ाइल में, .
या /
जैसी बड़ी पाथ रेंज शेयर करने से बचें. ऐसा करने से, गलती से संवेदनशील फ़ाइलें दिख सकती हैं. सिर्फ़ सीमित/छोटी पाथ रेंज शेयर करें. साथ ही, पक्का करें कि इस पाथ में सिर्फ़ वे फ़ाइलें हों जिन्हें आपको शेयर करना है. इससे, गलती से संवेदनशील फ़ाइलों को शेयर होने से रोका जा सकेगा.
ज़्यादा सुरक्षित सेटिंग वाली सामान्य कॉन्फ़िगरेशन फ़ाइल कुछ इस तरह दिख सकती है:
एक्सएमएल
<paths>
<files-path name="images" path="images/" />
<files-path name="docs" path="docs" />
<cache-path name="cache" path="net-export/" />
</paths>
बाहरी यूआरआई की जांच करना और उनकी पुष्टि करना
content
स्कीम का इस्तेमाल करके, बाहरी यूआरआई की पुष्टि करें. साथ ही, पक्का करें कि वे आपके ऐप्लिकेशन की लोकल फ़ाइलों पर न ले जाते हों. इससे, अनजाने में जानकारी लीक होने से रोका जा सकता है.
ऐक्सेस करने की कम से कम अनुमतियां दें
content URI
के पास, डेटा पढ़ने और उसमें बदलाव करने, दोनों की अनुमतियां हो सकती हैं. पक्का करें कि सिर्फ़ ज़रूरी ऐक्सेस की अनुमति दी गई हो.
उदाहरण के लिए, अगर सिर्फ़ पढ़ने की अनुमति ज़रूरी है, तो साफ़ तौर पर सिर्फ़ FLAG_GRANT_READ_URI_PERMISSION
दें.
संवेदनशील जानकारी को सेव करने या शेयर करने के लिए, <external-path> का इस्तेमाल न करें
संवेदनशील डेटा, जैसे कि व्यक्तिगत पहचान से जुड़ी जानकारी (पीआईआई), को ऐप्लिकेशन कंटेनर या सिस्टम क्रेडेंशियल स्टोरेज की सुविधाओं के बाहर स्टोर नहीं किया जाना चाहिए. इसलिए, <external-path>
एलिमेंट का इस्तेमाल तब तक न करें, जब तक आपने साफ़ तौर पर पुष्टि न कर ली हो कि सेव की जा रही/शेयर की जा रही जानकारी संवेदनशील नहीं है.