OWASP বিভাগ: MASVS-STORAGE: স্টোরেজ
সংক্ষিপ্ত বিবরণ
পাথ ট্রাভার্সাল দুর্বলতা তখন ঘটে যখন কোনো আক্রমণকারী পাথের একটি অংশ নিয়ন্ত্রণ করতে পারে, যা পরবর্তীতে কোনো যাচাইকরণ ছাড়াই ফাইল সিস্টেম এপিআই-তে পাঠানো হয়। এর ফলে অননুমোদিত ফাইল সিস্টেম অপারেশন হতে পারে। উদাহরণস্বরূপ, একজন আক্রমণকারী ../ মতো বিশেষ অক্ষর ব্যবহার করে টার্গেট করা ডিরেক্টরির বাইরে গিয়ে অপ্রত্যাশিতভাবে রিসোর্স টার্গেট পরিবর্তন করতে পারে।
প্রভাব
এর প্রভাব অপারেশন এবং ফাইলের বিষয়বস্তুর উপর নির্ভর করে ভিন্ন হয়, তবে সাধারণত এর ফলে ফাইল ওভাররাইট (ফাইল লেখার সময়), ডেটা ফাঁস (ফাইল পড়ার সময়), অথবা পারমিশন পরিবর্তন (ফাইল বা ডিরেক্টরির পারমিশন পরিবর্তনের সময়) ঘটে থাকে।
প্রশমন
File.getCanonicalPath() ব্যবহার করে পাথটিকে ক্যানোনিকালাইজ করুন এবং প্রিফিক্সটিকে প্রত্যাশিত ডিরেক্টরির সাথে তুলনা করুন:
কোটলিন
@Throws(IllegalArgumentException::class)
fun saferOpenFile(path: String, expectedDir: String?): File {
val f = File(path)
val canonicalPath = f.canonicalPath
require(canonicalPath.startsWith(expectedDir!!))
return f
}
জাভা
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;
}
আরেকটি উত্তম অনুশীলন হলো, শুধুমাত্র প্রত্যাশিত ফলাফলই ঘটছে কিনা তা নিশ্চিত করতে ভ্যালিডেশন ব্যবহার করা। উদাহরণস্বরূপ নিম্নলিখিতগুলো উল্লেখ করা যায়:
- ভুলবশত ওভাররাইট হওয়া রোধ করতে ফাইলটি আগে থেকেই বিদ্যমান আছে কিনা তা যাচাই করা হচ্ছে।
- ডেটা ফাঁস হওয়া বা ভুলভাবে পারমিশন পরিবর্তন হওয়া রোধ করতে, টার্গেট করা ফাইলটি প্রত্যাশিত কিনা তা যাচাই করা হচ্ছে।
- ক্যানোনিকাল পাথ থেকে প্রাপ্ত রিটার্ন ভ্যালুতে অপারেশনটির বর্তমান ডিরেক্টরিটি প্রত্যাশিত মানের সাথে হুবহু মিলছে কিনা, তা যাচাই করা হচ্ছে।
- একটি পারমিশন সিস্টেম যেন অপারেশনের জন্য সুনির্দিষ্টভাবে সীমাবদ্ধ থাকে তা নিশ্চিত করা, যেমন—সার্ভিসগুলো রুট হিসেবে চলছে কিনা তা পরীক্ষা করা, এবং ডিরেক্টরির পারমিশনগুলো যেন নির্দিষ্ট সার্ভিস বা কমান্ডের মধ্যেই সীমাবদ্ধ থাকে তা নিশ্চিত করা।