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

OWASP कैटगरी: MASVS-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;
}

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

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