
CVE-2026-33017 - استغلال تنفيذ الأوامر عن بُعد غير المصادق عليه في Langflow
برمجة: Xer0TLabs x Persephrak Decentralized Syndicate
هذا المستند هو شرح عالي المستوى لبرنامج Python المقدم لأغراض المراجعة، والاستجابة للحوادث، والتحليل الدفاعي. وهو لا يتضمن عمدًا تعليمات التشغيل، أو إرشادات اختيار الأهداف، أو أمثلة على الحمولات، أو إجراءات الحصول على وصول إلى النظام.
يصف السكربت نفسه بأنه استغلال لثغرة مزعومة في Langflow تتعلق بتنفيذ التعليمات البرمجية عن بُعد دون مصادقة. يصف هذا README ما يحاول الكود القيام به؛ ولا يتحقق بشكل مستقل من معرّف CVE، أو الإصدارات المتأثرة، أو سلوك نقطة النهاية، أو نصائح البائع، أو فعالية السكربت.
البرنامج منظم كأداة أتمتة لسطر الأوامر تحاول إرسال بيانات JSON مُنشأة خصيصًا إلى نقطة نهاية HTTP في Langflow. فرضيته الأساسية هي أن Python المُتحكم فيه من قبل المستخدم والمضمّن في تعريف التدفق سيتم معالجته بواسطة التطبيق البعيد.
إذا تحققت هذه الفرضية على هدف ما، فإن السكربت مصمم لتحويلها إلى تنفيذ أوامر تعسفية على نظام التشغيل. بالإضافة إلى فحص تنفيذ أساسي، يحتوي على إجراءات تهدف إلى إنشاء الثبات، وإنشاء جلسة تفاعلية عن بُعد، وتشغيل أوامر استطلاع، وتوليد زوج مفاتيح SSH محليًا.
نظرًا لأن هذه القدرات قد تعرض الأنظمة للخطر دون إذن، يجب التعامل مع الكود كأداة يحتمل أن تكون خبيثة أو مزدوجة الاستخدام. لا ينبغي تشغيله ضد الأنظمة إلا إذا كان النشاط مصرحًا به صراحةً وخاضعًا لنطاق اختبار محدد.
يستورد البرنامج وحدات Python القياسية لتحليل الوسائط، ومعالجة JSON، وطلبات HTTP، والمقابس، والخيوط، وتنفيذ العمليات الفرعية، والوصول إلى الملفات.
يقوم بتعطيل التحقق العادي من شهادات TLS عالميًا عبر ssl._create_unverified_context. وهذا يجعل طلبات HTTPS تقبل الشهادات غير الصالحة أو غير الموثوقة. على الرغم من أن هذا يُرى أحيانًا في كود الاختبار، إلا أنه غير آمن في الإنتاج لأنه يضعف الحماية ضد الاعتراض والانتحال.
تعرف Colors تسلسلات هروب ANSI الطرفية المستخدمة لطباعة مخرجات ملونة.
Logger هي فئة أدوات صغيرة تطبع رسائل إعلامية، ونجاح، وتحذير، وخطأ. تعرض طريقة banner() عنوان السكربت، والثغرة المزعومة، ونطاق المنتج المتأثر المزعوم، والخطورة، وحالة CISA KEV. هذه الادعاءات هي نص عرض في البرنامج وليست دليلًا على دقة الادعاءات.
هذه هي الفئة الرئيسية. عند التهيئة، تقوم بما يلي:
http:// إذا كانت مفقودة.معرّف التدفق الافتراضي هو قيمة ثابتة تشبه UUID. يسمح البرنامج بتجاوزها من خلال خيار سطر الأوامر.
_build_malicious_payload(command) ينشئ كائن JSON يشبه رسمًا بيانيًا للتدفق مع عقدة واحدة. يتم تمييز العقدة كـ CustomComponent وتتضمن كود مصدر Python في حقل code.
يحاول الكود المدرج استدعاء أمر نظام التشغيل. يحاول أولاً استخدام واجهة برمجة تطبيقات Python واحدة ثم يتراجع إلى استدعاء عملية فرعية في حالة حدوث خطأ. يتم بعد ذلك إرجاع بنية JSON إلى كود إرسال الطلب.
هذا هو منطق الاستغلال الأساسي: يفترض أن الخدمة المستقبلة ستنفذ الكود المقدم أثناء معالجة الرسم البياني.
_send_exploit_request(payload_data) يسلسل الحمولة كـ JSON ويقوم بطلب HTTP POST إلى نقطة النهاية المُنشأة. يتضمن رؤوسًا تقليدية تشبه المتصفح ويعيد كلًا من نص استجابة الجسم وحالة HTTP.
يتم التقاط أخطاء HTTP وإرجاعها بدلاً من إنهاء البرنامج. يتم تحويل الاستثناءات الأخرى، مثل فشل الاتصال أو انتهاء المهلة، إلى سلاسل نصية وإرجاعها مع الحالة 0.
check_vulnerability() يرسل حمولة تحتوي على أمر علامة ثم يعامل إما استجابة HTTP ناجحة أو أي استجابة تحتوي على كلمة error كدليل على أن الهدف "يبدو عرضة للثغرة".
هذه ليست طريقة تحقق موثوقة. يمكن أن تحدث استجابة 200 أو 500 أو خطأ تطبيق لأسباب عديدة لا علاقة لها بتنفيذ التعليمات البرمجية. لا يلاحظ السكربت بشكل مستقل مخرجات العلامة، لذا يمكن أن ينتج نتائج إيجابية خاطئة.
execute_command(command) يغلف الأمر المقدم في حمولة التدفق الخبيثة ويرسلها. يفسر HTTP 200 أو 500 كنتيجة ناجحة محتملة.
مرة أخرى، لا تُظهر رموز الحالة وحدها تنفيذ أوامر عن بُعد. من منظور مراجعة الكود الدفاعية، تحاول هذه الطريقة جعل الأداة مرنة من خلال السماح للمشغل بتقديم أوامر نظام تشغيل تعسفية.
_build_ssh_payload() و inject_ssh_key() مصممان لتعديل تكوين SSH البعيد وملفات المفاتيح المصرح بها. تشمل الإجراءات المحاولة إنشاء أدلة SSH، وإضافة مفتاح SSH عام، وتغيير الأذونات، وتعديل إعدادات خادم SSH، وإعادة تشغيل خدمة SSH، وإنشاء آلية ثبات قائمة على cron، وإزالة آثار سجل الأوامر.
هذه سلوكيات ثبات وتهرب دفاعي، وليست فحص ثغرة حميدًا. قد يدعي البرنامج النجاح بناءً على حالة HTTP فقط، دون تأكيد أن أي ملف أو خدمة قد تغيرت فعليًا.
_build_reverse_shell_payload() يجمع آليات تراجع متعددة تهدف إلى جعل الهدف يبدأ اتصال شبكة صادر إلى مضيف ومنفذ يتحكم فيه المشغل.
spawn_reverse_shell() يبدأ مستمع TCP محلي في خيط خلفي، وينتظر لفترة وجيزة، ويرسل الحمولة البعيدة، ثم ينتظر اتصالًا.
_start_listener() يقبل اتصالًا ويوفر حلقة أوامر تفاعلية بسيطة. هذه قدرة وصول عن بُعد. لديها معالجة أخطاء محدودة، ولا تصادق على الاتصال الوارد، وليست مناسبة للإدارة الآمنة أو البنية التحتية المشروعة للاختبار.
full_exploit_chain() يجمع بين سلوكيات متعددة:
تهدف قائمة الاستطلاع إلى كشف الهوية، والصلاحيات، ومعلومات نظام التشغيل، والملفات، والعمليات، والخدمات المستمعة، والحسابات، والمهام المجدولة. هذا يميز التعداد بعد الاختراق.
generate_ssh_key_pair(key_path) يستدعي برنامج ssh-keygen المحلي لإنشاء زوج مفاتيح RSA بحجم 4096 بت إذا كانت الملفات المطلوبة غير موجودة بالفعل.
ينشئ تعليق مفتاح يشير إلى CVE المزعوم وهو مصمم لدعم وظيفة ثبات SSH. هذا يؤثر على الجهاز الذي يُشغَّل عليه السكربت نفسه، وليس الهدف البعيد.
main() يعرف خيارات سطر الأوامر لاختيار الهدف، ومعرّف التدفق، وتنفيذ أمر واحد، ومعالجة مفتاح SSH، وإعدادات الصدفة العكسية، وتنفيذ السلسلة الكاملة، والتوليد التلقائي للمفاتيح، والمخرجات التفصيلية.
يقوم الكود بتحقق محدود فقط. على سبيل المثال، تتطلب أوضاع الصدفة العكسية والسلسلة الكاملة مضيفًا ومنفذًا محليين. لا يتحقق من التفويض، أو النطاق، أو ملكية الهدف، أو سلامة عنوان URL، أو ما إذا كان الهدف هو بالفعل مثيل Langflow.
encoded_key يُحسب لكن لا يُستخدم أبدًا.يجب على فرق الأمان التي تراجع هذا الكود التعامل مع ما يلي كمؤشرات على محاولة استغلال أو نشاط ما بعد الاختراق:
لقرارات المعالجة، اعتمد على نصائح أمان Langflow الرسمية، وملاحظات الإصدار، وعملية إدارة الثغرات في مؤسستك بدلاً من بيانات الإصدار والخطورة المضمنة في هذا السكربت.
لا تقم بتشغيل أو إعادة توزيع هذا البرنامج كأداة نشر أو وصول. إذا تم العثور عليه على نظام، فاحتفظ به كدليل، وسجل التجزئات والطوابع الزمنية، وقيد الوصول إلى النسخة، وافحص سجلات الخدمة والشبكة ذات الصلة، واتبع عملية الاستجابة للحوادث في مؤسستك.
لتقييم مصرح به مشروع، استخدم نطاقًا مكتوبًا، وخطة تحقق غير مدمرة، وشرط إيقاف موثقًا، وتقريرًا يركز على المعالجة. تجنب الثبات، والصدف العكسية، وتغييرات بيانات الاعتماد، وحذف السجل، أو أي إجراء يمكن أن يعطل الأنظمة أو يترك وصولًا غير مصرح به خلفه.