فئة OWASP: MASVS-STORAGE: مساحة التخزين
نظرة عامة
تحدث ثغرات اجتياز المسار عندما يتمكن المهاجم من التحكم في جزء من المسار
الذي يتم تمريره بعد ذلك إلى واجهات برمجة تطبيقات نظام الملفات بدون التحقق من الصحة. ويمكن أن يؤدي ذلك
إلى عمليات غير مصرَّح بها في نظام الملفات. على سبيل المثال، قد يستخدم المهاجم رموزًا خاصة مثل ../
لتغيير استهداف المورد بشكل غير متوقع، وذلك من خلال اجتيازه خارج الدليل المستهدف.
التأثير
ويختلف التأثير بناءً على العملية ومحتوى الملف، ولكنه يؤدي عمومًا إلى استبدال الملف (عند كتابة الملفات) أو تسرُّب البيانات (عند قراءة الملفات) أو تغييرات الأذونات (عند تغيير أذونات الملف أو الدليل).
إجراءات التخفيف
حدِّد عنوان URL الأساسي للمسار باستخدام 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;
}
ومن أفضل الممارسات الإضافية استخدام عمليات التحقّق لضمان حدوث النتيجة المرجوة فقط. تشمل الأمثلة ما يلي:
- التحقّق مما إذا كان الملف متوفّرًا من قبل لمنع استبداله عن طريق الخطأ
- التحقّق مما إذا كان الملف المستهدَف هو هدف متوقّع لمنع تسرُّب البيانات أو تغيير الأذونات بشكلٍ غير صحيح
- التحقق مما إذا كان الدليل الحالي للعملية كما هو متوقع في القيمة المعروضة من المسار الأساسي
- التأكّد من أنّ نظام الأذونات محدود النطاق صراحةً للعملية، مثل التحقّق من عدم تشغيل الخدمات بصفتها الجذر، والتأكّد من أنّ أذونات directory محدودة النطاق للخدمة أو الأمر المحدّد