ما هي ثغرة Path Traversal وكيف تحمي ملفاتك؟

الكاتب: تاريخ النشر

باختصار: Path Traversal ثغرة أمنية تتيح عبر التطبيق الوصول إلى ملفات خارج المجلد المخصص لمعالجة الطلب المعني. ترتبط غالبًا بقراءة ملفات لا يحق للمستخدم الاطلاع عليها، لكنها قد تتيح أيضًا تعديلها أو حذفها إذا كانت الوظيفة المتأثرة تنفّذ عمليات كتابة أو حذف. تنشأ المشكلة عندما يستخدم التطبيق بيانات المستخدم جزءًا من مسار ملف، ولا يتحقق بفاعلية من الوجهة التي يؤدي إليها ذلك المسار.

ماذا يعني تجاوز حدود المجلد؟

المسار هو عنوان الملف داخل نظام الملفات، مثل /srv/tatbiq/mustanadat/dalil.pdf. ينبغي للتطبيق الذي يتيح تنزيل المستندات أن يسمح بتنزيل الملفات من الموقع المحدد فقط، لا أي ملف متاح على الخادم.

تتمثل ثغرة Path Traversal، المعروفة أيضًا باسم directory traversal أو dot-dot-slash، في تجاوز هذه الحدود. وتشير تسمية dot-dot-slash، أي «نقطتان وشرطة مائلة»، إلى الصيغة ../: فالنقطتان تعنيان المجلد الأب، والشرطة المائلة تفصل بين أجزاء المسار. لذا يمكن استخدام هذا التسلسل بطريقة توجّه العملية إلى خارج المجلد المسموح به.

يمكن تشبيه ذلك بشباك لتسليم المستندات. يفترض أن يقدّم العميل رقم المستند، فيسلّمه الموظف من الخزانة المخصصة. لكن الخلل يحدث عندما يقبل الموظف بدلًا من الرقم تعليمات تقول: «اترك هذه الخزانة، واذهب إلى الغرفة المجاورة، وخذ الملف المحدد».

مثال: تنزيل مستند باستخدام اسمه

لنفترض أن التطبيق يخزّن المستندات المتاحة للجميع في المجلد /srv/tatbiq/mustanadat/. يختار المستخدم ملفًا، فيرسل المتصفح الطلب التالي:

/tanzil?malaf=dalil.pdf

إذا ألحق البرنامج قيمة المعامل malaf بمسار مجلد المستندات دون التحقق منها، فسيحصل على المسار /srv/tatbiq/mustanadat/dalil.pdf. يبدو ذلك سليمًا عند إدخال اسم عادي. لكن المشكلة تظهر عند إدخال قيمة تتضمن الانتقال إلى المجلد الأب:

/tanzil?malaf=../konfiguracja.env

يشير المسار المركّب /srv/tatbiq/mustanadat/../konfiguracja.env إلى /srv/tatbiq/konfiguracja.env، وهو ملف خارج مجلد المستندات. وإذا استطاع التطبيق قراءته وأعاد محتواه إلى المستخدم، فستنكشف البيانات.

هذا مثال يوضح الآلية، وليس ضمانًا لنجاح الهجوم. فلا بد أن يكون الملف موجودًا، وأن تملك عملية التطبيق صلاحية الوصول إليه، وأن تسمح طريقة معالجة الطلب باستغلال المسار المُدخل. ولا يجوز اختبار هذا السلوك إلا في بيئتك الخاصة أو بإذن صريح بإجراء الاختبارات.

ما الأضرار التي قد تسببها Path Traversal؟

تعتمد النتيجة أساسًا على العملية التي تنفّذها الوظيفة المصابة بالثغرة، وعلى صلاحيات التطبيق في نظام التشغيل.

في ظروف معينة، قد تؤدي الكتابة فوق الإعدادات أو وضع ملف ينفّذه الخادم إلى السيطرة على التطبيق لاحقًا. لكن Path Traversal لا تعني تلقائيًا إمكانية تنفيذ الشيفرة أو الوصول الكامل إلى الخادم. فمن العوامل التي تحدّ من أثرها صلاحيات العملية والوظائف المتاحة في التطبيق.

ولا تقتصر الثغرة على العناوين الظاهرة في المتصفح. فقد تأتي البيانات المؤثرة في المسار أيضًا من نموذج، أو طلب API، أو اسم ملف يجري رفعه، أو عنصر داخل أرشيف يجري فكّه.

كيف تحدّ من المخاطر بفاعلية؟

الحل الأكثر أمانًا هو تجنّب ترك تحديد المسار للمستخدم. فبدلًا من قبول اسم الملف أو موقعه، يمكن للتطبيق قبول معرّف للمستند، مثل 482، ثم العثور بنفسه على الملف المرتبط به. وعليه أيضًا التحقق من أن المستخدم يملك حق تنزيله؛ فالمعرّف وحده لا يوفّر الحماية.

إذا كان قبول المسارات ضروريًا، فينبغي أن تشمل الحماية عدة عناصر:

  1. تحديد صارم للمدخلات المقبولة. إذا كانت الوظيفة تحتاج إلى اسم الملف فقط، فلا ينبغي لها قبول مسار كامل. ويجب قصر الأسماء والامتدادات المقبولة على الاحتياجات الفعلية.
  2. التحقق من الموقع النهائي. بعد تطبيق قواعد نظام الملفات، ينبغي للتطبيق التأكد من أن الوجهة ما زالت داخل المجلد المسموح به. ويجب استخدام الدوال المناسبة لمعالجة المسارات، لا الاكتفاء بمقارنة بدايات السلاسل النصية.
  3. مراعاة الروابط الرمزية. الرابط الرمزي إحالة إلى موقع آخر في نظام الملفات. وقد يبدو الملف موجودًا داخل المجلد المسموح به، بينما تؤدي هذه الإحالة إلى موقع خارجه.
  4. الاكتفاء بالحد الأدنى من الصلاحيات. ينبغي ألا تملك العملية التي تتيح المستندات صلاحية الوصول إلى بيانات لا تحتاج إليها، ولا صلاحية الكتابة حيث تكفي القراءة.

لا تكفي إزالة السلسلة ../ وحدها للحماية. فقد تؤدي الاختلافات في فواصل المسار والترميز وترتيب معالجة البيانات إلى تفسير المرشّح ونظام الملفات للقيمة نفسها بطريقتين مختلفتين. لذا يجب أن يتوافق التحقق مع الطريقة التي يفتح بها التطبيق الملف فعليًا.

من أين تبدأ فحص التطبيق؟

راجع وظائف تنزيل الملفات ورفعها وحذفها وفك الأرشيفات. وحدّد لكل منها ما إذا كان المستخدم يؤثر في المسار، وما المجلد المسموح به، وما إذا كان البرنامج يتحقق من الوجهة النهائية للعملية. وينبغي أن تشمل الاختبارات محاولات تجاوز حدود المجلد والطلبات العادية الصحيحة على حد سواء.

إذا اشتبهت في استغلال الثغرة، فقد لا يكفي إصلاح الشيفرة وحده. يجب تقييم الملفات التي كان من الممكن الوصول إليها، وفحص السجلات، وتغيير كلمات المرور أو المفاتيح المعنية إذا كان يُحتمل تسرّب بيانات الدخول. وأول خطوة عملية هي تحديد الموضع الدقيق الذي تتحول فيه بيانات المستخدم إلى مسار ملف.

اقرأ أيضًا

تعرّف على كيفية معالجة PHP-FPM لطلبات PHP، والفرق بينه وبين خادم الويب، وكيفية ضبط عملياته وفق حركة الزيارات وموارد الاستضافة.
تعرّف إلى BIND، برنامج خادم DNS مفتوح المصدر، وأدواره في خدمة النطاقات، ومتطلبات تأمينه، ومتى تختار تشغيله بنفسك أو خدمة مُدارة.
تعرّف إلى سجل REGON ورقم التعريف فيه في بولندا، والفرق بينه وبين NIP وKRS، وكيفية التحقق من بيانات المنشآت وحدود ما يثبته السجل.