পাথ ট্রাভার্সাল

OWASP বিভাগ: MASVS-স্টোরেজ: স্টোরেজ

ওভারভিউ

পাথ ট্রাভার্সাল দুর্বলতা দেখা দেয় যখন একজন আক্রমণকারী পাথের কিছু অংশ নিয়ন্ত্রণ করতে পারে যা তারপরে বৈধতা ছাড়াই ফাইল সিস্টেম API-এ পাস করা হয়। এটি অননুমোদিত ফাইল সিস্টেম অপারেশন হতে পারে. উদাহরণস্বরূপ, একজন আক্রমণকারী বিশেষ অক্ষর ব্যবহার করতে পারে যেমন ../ অপ্রত্যাশিতভাবে রিসোর্স টার্গেট পরিবর্তন করতে, টার্গেটেড ডিরেক্টরির বাইরে গিয়ে।

প্রভাব

ক্রিয়াকলাপ এবং ফাইলের বিষয়বস্তুর উপর নির্ভর করে প্রভাব পরিবর্তিত হয়, তবে সাধারণত ফাইল ওভাররাইট (ফাইল লেখার সময়), ডেটা লিক (ফাইল পড়ার সময়) বা অনুমতি পরিবর্তন (ফাইল বা ডিরেক্টরির অনুমতি পরিবর্তন করার সময়) বাড়ে।

প্রশমন

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;
}

একটি অতিরিক্ত সর্বোত্তম অনুশীলন হল শুধুমাত্র প্রত্যাশিত ফলাফল নিশ্চিত করতে বৈধতা ব্যবহার করা। উদাহরণ নিম্নলিখিত অন্তর্ভুক্ত:

  • দুর্ঘটনাজনিত ওভাররাইট রোধ করতে ফাইলটি ইতিমধ্যেই বিদ্যমান কিনা তা পরীক্ষা করা হচ্ছে।
  • টার্গেট করা ফাইলটি ডেটা ফাঁস হওয়া বা ভুলভাবে অনুমতি পরিবর্তন রোধ করার জন্য একটি প্রত্যাশিত লক্ষ্য কিনা তা পরীক্ষা করা হচ্ছে।
  • ক্যানোনিকাল পাথ থেকে রিটার্ন ভ্যালুতে প্রত্যাশিত অপারেশনের বর্তমান ডিরেক্টরি ঠিক আছে কিনা তা পরীক্ষা করা হচ্ছে।
  • একটি পারমিশন সিস্টেম সুস্পষ্টভাবে ক্রিয়াকলাপের জন্য স্কোপ করা হয়েছে তা নিশ্চিত করা, যেমন এটি রুট হিসাবে পরিষেবাগুলি চালাচ্ছে না তা পরীক্ষা করা এবং নির্দেশিকা অনুমতিগুলি নির্দিষ্ট পরিষেবা বা কমান্ডের জন্য স্কোপ করা হয়েছে তা নিশ্চিত করা।
,

OWASP বিভাগ: MASVS-স্টোরেজ: স্টোরেজ

ওভারভিউ

পাথ ট্রাভার্সাল দুর্বলতা দেখা দেয় যখন একজন আক্রমণকারী পাথের কিছু অংশ নিয়ন্ত্রণ করতে পারে যা তারপরে বৈধতা ছাড়াই ফাইল সিস্টেম API-এ পাস করা হয়। এটি অননুমোদিত ফাইল সিস্টেম অপারেশন হতে পারে. উদাহরণস্বরূপ, একজন আক্রমণকারী বিশেষ অক্ষর ব্যবহার করতে পারে যেমন ../ অপ্রত্যাশিতভাবে রিসোর্স টার্গেট পরিবর্তন করতে, টার্গেটেড ডিরেক্টরির বাইরে গিয়ে।

প্রভাব

ক্রিয়াকলাপ এবং ফাইলের বিষয়বস্তুর উপর নির্ভর করে প্রভাব পরিবর্তিত হয়, তবে সাধারণত ফাইল ওভাররাইট (ফাইল লেখার সময়), ডেটা লিক (ফাইল পড়ার সময়) বা অনুমতি পরিবর্তন (ফাইল বা ডিরেক্টরির অনুমতি পরিবর্তন করার সময়) বাড়ে।

প্রশমন

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;
}

একটি অতিরিক্ত সর্বোত্তম অনুশীলন হল শুধুমাত্র প্রত্যাশিত ফলাফল নিশ্চিত করতে বৈধতা ব্যবহার করা। উদাহরণ নিম্নলিখিত অন্তর্ভুক্ত:

  • দুর্ঘটনাজনিত ওভাররাইট রোধ করতে ফাইলটি ইতিমধ্যেই বিদ্যমান কিনা তা পরীক্ষা করা হচ্ছে।
  • টার্গেট করা ফাইলটি ডেটা ফাঁস হওয়া বা ভুলভাবে অনুমতি পরিবর্তন রোধ করার জন্য একটি প্রত্যাশিত লক্ষ্য কিনা তা পরীক্ষা করা হচ্ছে।
  • ক্যানোনিকাল পাথ থেকে রিটার্ন ভ্যালুতে প্রত্যাশিত অপারেশনের বর্তমান ডিরেক্টরি ঠিক আছে কিনা তা পরীক্ষা করা হচ্ছে।
  • একটি পারমিশন সিস্টেম সুস্পষ্টভাবে ক্রিয়াকলাপের জন্য স্কোপ করা হয়েছে তা নিশ্চিত করা, যেমন এটি রুট হিসাবে পরিষেবাগুলি চালাচ্ছে না তা পরীক্ষা করা এবং নির্দেশিকা অনুমতিগুলি নির্দিষ্ট পরিষেবা বা কমান্ডের জন্য স্কোপ করা হয়েছে তা নিশ্চিত করা।