पाथ ट्रैवर्सल

OWASP कैटगरी: MASVS-STORAGE: Storage

खास जानकारी

पाथ ट्रेवर्सल की कमज़ोरियां तब होती हैं, जब हमलावर पाथ के उस हिस्से को कंट्रोल कर सकता है जिसे पुष्टि किए बिना फ़ाइल सिस्टम एपीआई को पास किया जाता है. इससे फ़ाइल सिस्टम में अनधिकृत कार्रवाइयां हो सकती हैं. उदाहरण के लिए, हमलावर ../ जैसे खास वर्णों का इस्तेमाल करके, टारगेट किए गए संसाधन को अचानक बदल सकता है. इसके लिए, वह टारगेट की गई डायरेक्ट्री से बाहर जा सकता है.

असर

इसका असर, ऑपरेशन और फ़ाइल के कॉन्टेंट के हिसाब से अलग-अलग होता है. हालांकि, आम तौर पर इससे फ़ाइल ओवरराइट हो जाती है (फ़ाइलें लिखते समय), डेटा लीक हो जाता है (फ़ाइलें पढ़ते समय), या अनुमतियों में बदलाव हो जाता है (फ़ाइल या डायरेक्ट्री की अनुमतियों में बदलाव करते समय).

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

File.getCanonicalPath() का इस्तेमाल करके पाथ को कैननिकल बनाएं और प्रीफ़िक्स की तुलना, अनुमानित डायरेक्ट्री से करें:

Kotlin

@Throws(IllegalArgumentException::class)
fun saferOpenFile(path: String, expectedDir: String?): File {
    val f = File(path)
    val canonicalPath = f.canonicalPath
    require(canonicalPath.startsWith(expectedDir!!))
    return f
}

Java

public File saferOpenFile (String path, String expectedDir) throws IllegalArgumentException {
  File f = new File(path);
  String canonicalPath = f.getCanonicalPath();
  if (!canonicalPath.startsWith(expectedDir)) {
    throw new IllegalArgumentException();
  }
  return f;
}

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

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