پیمایش مسیر

دسته OWASP: MASVS-STORAGE: 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;
}

یک روال مطلوب دیگر این است که از اعتبارسنجی استفاده کنید تا مطمئن شوید فقط نتایج موردانتظار رخ می‌دهد. نمونه‌ها شامل موارد زیر است:

  • درحال بررسی اینکه آیا فایل ازقبل وجود دارد تا از رونویسی تصادفی جلوگیری شود.
  • بررسی اینکه آیا فایل هدف همان هدف موردانتظار است تا از نشت داده‌ها یا تغییر نادرست اجازه‌ها جلوگیری شود.
  • بررسی اینکه آیا فهرست راهنمای فعلی عملیات دقیقاً همان‌طور است که در مقدار بازگشتی از مسیر متعارف انتظار می‌رود.
  • اطمینان از اینکه سیستم اجازه‌ها به‌طور صریح برای عملیات محدود شده است، مثلاً بررسی اینکه سرویس‌ها را به‌عنوان ریشه اجرا نمی‌کند، و اطمینان از اینکه اجازه‌های دایرکتوری برای سرویس یا فرمان مشخص‌شده محدود شده است.