
إثبات مفهوم لاستغلال CVE-2026-5027، وهي ثغرة اجتياز المسار في Langflow تسمح بكتابة ملفات تعسفية واحتمال تنفيذ تعليمات برمجية عن بُعد عبر اسم ملف متعدد الأجزاء مُصمم خصيصًا.
هذا المنشور هو مقال بحثي نشر بواسطة EQSTLab.
شكرًا لـ Yahia Hamza، الذي أبلغ عن هذه الثغرة الأمنية وحللها.
★ CVE-2026-5027 ثغرة اجتياز المسار / كتابة ملفات عشوائية في Langflow - برهان المفهوم ★
CVE-2026-5027 : ثغرة كتابة ملفات عشوائية في Langflow
الوصف: تسمح ثغرة اجتياز المسار في Langflow <= 1.8.4 للمهاجمين بكتابة ملفات عشوائية خارج دليل الرفع المخصص عبر اسم ملف filename متعدد الأجزاء (multipart) مُعد بعناية يُرسل إلى نقطة النهاية /api/v2/files. في البيئات التي يكون فيها تسجيل الدخول التلقائي مفعّلاً أو حيث يكون المصادقة ضعيفة التطبيق، يمكن استغلال هذه المشكلة لتحقيق تنفيذ تعليمات برمجية عن بُعد عن طريق كتابة محتوى يتحكم به المهاجم إلى مواقع حساسة في نظام الملفات.
قم ببناء وتشغيل البيئة القابلة للاستغلال باستخدام Docker:
docker build -t cve-2026-5027 .
docker run --rm -it -p 9013:7860 --name cve-2026-5027 cve-2026-5027
# تحقق غير مدمر (ملف إثبات)
python3 CVE-2026-5027.py -t <HOST_IP>
# تحقق مع وضع المصادقة
python3 CVE-2026-5027.py -t <HOST_IP> -u <USERNAME> -p <PASSWORD>
نقطة النهاية القابلة للاستغلال
POST /api/v2/files
تكمن المشكلة في أن وظيفة الرفع تثق في قيمة filename متعدد الأجزاء المقدمة من العميل. بدلاً من إنشاء اسم تخزين آمن من جانب الخادم أو تقييد المسار المُحل إلى دليل رفع مخصص، يسمح مسار الكود القابل للاستغلال لتسلسلات الاجتياز مثل ../ بالتأثير على مسار الوجهة النهائي.
نتيجة لذلك، يمكن للمهاجم تجاوز جذر التخزين المقصود وإجبار التطبيق على كتابة ملفات إلى مواقع عشوائية على نظام ملفات الخادم.
يتمثل تدفق الاستغلال النموذجي فيما يلي:
/api/v2/files.filename مُعد بعناية يحتوي على تسلسلات اجتياز المسار.هذه في الأساس مشكلة CWE-22: تقييد غير صحيح لاسم المسار إلى دليل مقيد.
يحدث الخلل الأمني بسبب عدم كفاية التعقيم والتحقق من مسارات الملفات التي يتحكم بها المستخدم أثناء معالجة الرفع. يقبل التطبيق اسم ملف العميل الأصلي ويمرره إلى سير عمل التخزين دون فرض تطبيع واحتواء المسار بشكل كافٍ.
من منظور دفاعي، النمط الخطير مشابه من الناحية المفاهيمية لما يلي:
save_path = base_dir / file.filename
إذا كان file.filename يحتوي على مكونات اجتياز المسار مثل:
../../../../tmp/poc.txt
فقد يشير المسار المُحل النهائي إلى خارج base_dir، مما يتيح كتابة ملفات عشوائية.
غالبًا ما تكون ثغرات كتابة الملفات العشوائية أكثر خطورة من مشكلات الرفع غير المقيد القياسية لأن المهاجم يتحكم ليس فقط في محتويات الملف، بل أيضًا في مسار الوجهة. اعتمادًا على صلاحيات وقت التشغيل لعملية Langflow، قد يتيح ذلك:
المهاجم --(الحصول على رمز الوصول أو استغلال تسجيل الدخول التلقائي)--> Langflow /api/v2/files --(توفير اسم ملف متعدد الأجزاء مُعد مع ../)--> كتابة ملفات عشوائية خارج دليل الرفع --(الكتابة إلى موقع حساس)--> تنفيذ تعليمات برمجية عن بُعد محتمل
هذا المستودع ليس مخصصًا لتسهيل الاستغلال غير المصرح به لنُسخ Langflow. الغرض من هذا المشروع هو مساعدة باحثي الأمن والمُدافعين والمطورين على فهم الثغرة، والتحقق من التعرض في بيئات خاضعة للتحكم، وتطبيق إجراءات تخفيف فعالة.