पथ ट्रेवर्सल का जोखिम

यह जानकारी ऐसे ऐप के डेवलपर के लिए है जिनके ऐप में पथ ट्रेवर्सल का जोखिम मौजूद है.

क्या हो रहा है

16 जनवरी, 2018 से, Google Play ने ऐसे किसी भी नए ऐप्लिकेशन या अपडेट के प्रकाशन को रोक दिया है जिसमें 'पथ ट्रैवर्सल' का जोखिम है. कृपया अपने Play कंसोल पर नोटिस देखें. आपके Play कंसोल में दिखाई गई समय-सीमा के बाद, ऐसे सभी ऐप्लिकेशन काे Google Play से हटाया जा सकता है जिन्हें इस्तेमाल करने में खतरा हाे सकता है.

यह कार्रवाई करें

  1. अपने Play कंसोल में साइन इन करें और 'चेतावनियां' सेक्शन पर जाकर देखें कि किन ऐप्लिकेशन पर असर हुआ है और इन समस्याओं को ठीक करने की समय-सीमाएं क्या हैं.
  2. आपके जिन ऐप्लिकेशन पर असर हुआ है उन्हें अपडेट करें और सुरक्षा से जुड़ी गड़बड़ी को ठीक करें.
  3. आपके जिन ऐप्लिकेशन पर असर हुआ है उनके अपडेट किए गए वर्शन सबमिट करें.

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

कुछ और जानकारी

अगर एक्सपोर्ट किए गए ContentProviders इनकमिंग यूआरआई पैरामीटर की सही तरीके से पुष्टि नहीं करते हैं, तो इनमें openFile डालने में खतरा हो सकता है. दुर्भावनापूर्ण ऐप आपके ऐप को लक्षित निर्देशिका से बाहर की फ़ाइल के लिए ParcelFileDescriptor लौटाने का धोखा देने के लिए ऐसा क्राफ़्ट किया गया यूआरआई (उदाहरण के लिए, ऐसा जिसमें “/../” मौजूद हो) भेज सकता है, जिसकी वजह से दुर्भावनापूर्ण ऐप आपके ऐप में कोई भी फ़ाइल का एक्सेस पा सके.

ContentProvider में पथ ट्रेवर्सल का जोखिम खत्म करने के लिए दो प्रक्रियाएं सुझाई जाती हैं.

1. अगर आपके ContentProvider को अन्य ऐप में प्रसारित करने की ज़रूरत नहीं है, तो:

  • android:exported=”false” को सेट करने के लिए, आप अपनी मेनिफ़ेस्ट फ़ाइल में उन ContentProvider का <provider> टैग बदल सकते हैं जिन पर असर हुआ है. इससे दूसरे ऐप प्रभावित ContentProvider को इंटेंट नहीं भेज पाएंगे.
  • आप android:permission विशेषता को android:protectionLevel=“signature” के साथ अनुमति बनाकर भी सेट कर सकते हैं. इससे, दूसरे डेवलपर के लिखे गए ऐप्लिकेशन उन ContentProvider को इंटेंट नहीं भेज पाएंगे जिन पर असर हुआ है. 

2. अगर आपके ContentProvider को अन्य ऐप में प्रसारित करना ज़रूरी है, तो:

आपको सही तरीके से यह पक्का करना होगा कि openFile में पथ ट्रेवर्सल वर्णों वाले इनपुट के कारण आपका ऐप अनपेक्षित फ़ाइलें नहीं लौटा सके. आप फ़ाइल के प्रामाणिक पथ की जांच करके ऐसा कर सकते हैं. उदाहरण के लिए:

public ParcelFileDescriptor openFile (Uri uri, String mode)
   throws FileNotFoundException {
 File f = new File(DIR, uri.getLastPathSegment());
 if (!f.getCanonicalPath().startsWith(DIR)) {
   throw new IllegalArgumentException();
 }
 return ParcelFileDescriptor.open(f, ParcelFileDescriptor.MODE_READ_ONLY);
}
 

चेतावनियां: ध्यान रखें कि यूआरआई पैरामीटर पर getLastPathSegment को कॉल करना सुरक्षित नहीं है. दुर्भावनापूर्ण ऐप कोड में बदला गया ऐसा यूआरआई पथ दे सकता है जो %2F..%2F..path%2Fto%2Fsecret.txt की तरह होता है इसलिए getLastPathSegment का नतीजा /../../path/to/secret.txt होगा. उदाहरण के लिए, नीचे दिए गए क्रियान्वयन में अभी भी हमले का जोखिम है.

public ParcelFileDescriptor openFile(Uri uri, String mode){
 File f = new File(DIR, uri.getLastPathSegment());
 return ParcelFileDescriptor.open(f, ParcelFileDescriptor.MODE_READ_ONLY);
}
 

हम मदद के लिए मौजूद हैं

अगर आप खतरे की संभावना के बारे में तकनीकी सवाल पूछना चाहते हैं, तो आप Stack Overflow पर पोस्ट कर सकते हैं और “android-security” टैग का इस्तेमाल कर सकते हैं. इस समस्या को ठीक करने के लिए आपको जो कदम उठाने हैं उनके बारे में ज़्यादा जानकारी के लिए, आप हमारी डेवलपर सहायता टीम से संपर्क कर सकते हैं.

false
मुख्य मेन्यू
6207582927637408541
true
खोज मदद केंद्र
true
true
true
true
true
5016068
false
false