
مختبر قابل لإعادة الإنتاج لـ CVE-2026-33017، وهو ثغرة تنفيذ تعليمات برمجية عن بُعد غير مصادق عليها في Langflow. يتضمن خدمة ضعيفة معزولة عبر Docker وPoC بأقل ضرر يوضح تنفيذ التعليمات البرمجية عبر نقطة نهاية البناء العامة.
CVE-2026-33017 هي ثغرة تنفيذ أوامر عن بُعد (RCE) غير مصادق عليها في Langflow حيث تقبل نقطة نهاية بناء عامة بيانات تدفق يتحكم بها المهاجم، مما يسمح بتنفيذ كود مكوّن مخصص على الخادم.
في هذا المختبر، يكون تدفق التحقق كما يلي:
PUBLICjob_idيتم استرجاع الإثبات مباشرة من خلال آلية أحداث واجهة برمجة تطبيقات Langflow، مما يجعل النتيجة قابلة للملاحظة من خلال واجهة النظام نفسها.
تعرض هذه الوثيقة مختبرًا للثغرة فقط.
حاليًا، يحتوي docker compose على خدمة واحدة فقط: vuln، لأن هذا المشروع يتبع نهج ويتجنب البيئات المصححة التي لا تستند إلى قطعة أثرية رسمية مصححة.
تم التحقق من السلوك التالي في هذا المختبر:
http://localhost:78611.8.1build_public_tmp قيمة job_idمثال على كائن الإثبات:
{
"canary": "lf33017-c14fc1c9",
"id_output": "uid=1000(user) gid=0(root) groups=0(root)",
"whoami": "user",
"hostname": "155aa3fd5e2a",
"cwd": "/app",
"python_version": "3.12.12"
}
الأدلة الرئيسية هي:
id_outputwhoamihostnamecwdpython_versionتُظهر المعلومات أعلاه أن الكود الذي يتحكم به المهاجم تم تنفيذه فعليًا على جانب الخادم.
.
├── docker-compose.yml
├── vuln/
│ └── Dockerfile
├── poc/
│ └── poc.py
├── README.md
└── .gitignore
7861 -> 7860توجد هذه الثغرة لأن نقطة نهاية البناء العامة في Langflow تقبل تعريفات التدفق المقدمة من المستخدم، على الرغم من أن نقطة النهاية مصممة بالفعل للتدفقات العامة. عندما يرسل المهاجم تعريف عقدة يحتوي على كود مكوّن مخصص، يمرر النظام هذا الكود إلى مسار بناء التدفق، مما يؤدي في النهاية إلى تنفيذ الكود على الخادم.
يستخدم إثبات المفهوم في هذا المشروع مكوّنًا مخصصًا يُرجع كائن إثبات في مخرجاته لإثبات أن الكود الذي يتحكم به المهاجم يتم تنفيذه فعليًا.
تم تصميم إثبات المفهوم في هذا المشروع ليكون الأقل ضررًا ويركز على إثبات قابل للملاحظة بوضوح من خلال واجهة برمجة التطبيقات. سير العمل الخاص به كما يلي:
PUBLICjob_idلا يغطي إثبات المفهوم هذا:
docker compose up -d --build
curl -i http://localhost:7861/api/v1/version
python3 poc/poc.py --base-url http://localhost:7861 --artifact-dir ./artifacts/vuln
عند نجاح إثبات المفهوم، ستبدو المخرجات كما يلي:
[+] http://localhost:7861 ready (version=1.8.1)
=== TARGET: vuln ===
Base URL : http://localhost:7861
Version : 1.8.1
Flow ID : <uuid>
HTTP : 200
Job ID : <uuid>
Canary : lf33017-xxxxxxxx
Events : artifacts/vuln/events-<job_id>.ndjson
Polls : 2
[+] Proof observed through the Langflow API events endpoint:
{
"canary": "lf33017-xxxxxxxx",
"id_output": "uid=1000(user) gid=0(root) groups=0(root)",
"whoami": "user",
"hostname": "<container-hostname>",
"cwd": "/app",
"python_version": "3.12.x"
}
[+] Vulnerable behavior observed
يخزن الملف artifacts/vuln/events-<job_id>.ndjson بيانات الأحداث الخام لأغراض تصحيح أخطاء إضافية.
يثبت إثبات المفهوم هذا أن:
لا يُقصد من إثبات المفهوم هذا إظهار الاستمرارية أو استغلال ما بعد الاختراق المتقدم، ويُبقي التأثير عند الحد الأدنى اللازم للتحقق من الثغرة.
بناءً على هذا المختبر، فإن التأثير المُثبت هو:
لا يتضمن هذا المستودع خدمة مصححة عن قصد.
نطاقه محدود لإعادة إنتاج السلوك الثغرة على قطعة أثرية حقيقية من المصدر. لا تتم إضافة جانب مصحح إلا عندما تتوفر قطعة أثرية رسمية مصححة قابلة للتحقق بوضوح من البائع أو المشروع المصدر.
لهذا السبب، يتجنب هذا المستودع عمدًا:
هذا يُبقي المختبر محدود النطاق وصادقًا تقنيًا. بدلاً من تقديم إعداد جانبي مصطنع، يركز المستودع على ثلاثة أشياء:
عمليًا، يجعل هذا المستودع مناسبًا بشكل أفضل لـ:
docker compose down -v
تم تصميم هذا المختبر للاختبار على localhost فقط.
متطلبات الاستخدام: