FileProvider में गलत तरीके से एक्सपोज़ की गई डायरेक्ट्री

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> एलिमेंट का इस्तेमाल न करें. हालांकि, अगर आपने साफ़ तौर पर पुष्टि कर ली है कि सेव/शेयर की जा रही जानकारी संवेदनशील नहीं है, तो इसका इस्तेमाल किया जा सकता है.

संसाधन