
أداة آلية لاكتشاف أخطاء تكوين CORS باستخدام نطاقات typosquatting وعمال خدمة المتصفح (service workers) لاستكشاف الشبكات الداخلية لأهداف bug bounty.
of-CORS هي مجموعة أدوات من Truffle Security لتحديد واستغلال الأخطاء في تكوين CORS على الشبكات الداخلية لأهداف مكافآت الاختراق باستخدام التصيد الإملائي.
يمكنك قراءة المزيد هنا https://trufflesecurity.com/blog/of-CORS
of-CORS هو تطبيق ويب بلغة Python3 مبني على Django و Django Rest Framework. بمجرد إعداده وتكوينه، سيقوم of-CORS تلقائيًا بتسجيل عمال خدمة المتصفح في متصفحات أي ضحايا يزورون التطبيق. يقوم هؤلاء العمال بإرسال طلبات HTTP إلى قائمة من النطاقات الداخلية المعدة مسبقًا بهدف اكتشاف أخطاء تكوين CORS على الشبكات الداخلية. يتم بعد ذلك إرسال نتائج هذه الطلبات (سواء كانت ناجحة أو غير ذلك) عبر API إلى مثيل of-CORS.
بمجرد تسجيل عامل خدمة في متصفح الضحية، يقوم حمولة JavaScript بإعادة توجيه المتصفح بعيدًا إلى الصفحة التي يعتقد of-CORS أنهم كانوا يحاولون الوصول إليها أصلاً.
يمكن عرض النتائج المجمعة لاحقًا في لوحة تحكم بسيطة متاحة في تطبيق of-CORS.
يمكن اتخاذ الخطوات التالية لإعداد of-CORS في نشرك الخاص.
نظرًا لتعقيد إعداد of-CORS (خاصة التعقيدات المتعلقة بـ SSL/TLS و DNS والسماح بالطلبات الجامدة لكليهما)، فإننا نستخدم اثنين من موفري السحابة (Heroku و Cloudflare) في بنية التطبيق و Terraform لأتمتة تكوينهما.
ابدأ بشراء نطاق من المرجح أن يصل إليه موظف داخلي في الشركة المستهدفة. نوصي بشراء نطاق طباعة خاطئة لنطاق داخلي. لقد وجدنا أن أخطاء النسخ واللصق هي نقطة بداية جيدة.
على سبيل المثال، إذا كانت الشركة التي تختبرها تستخدم uberinternal.com للنطاقات الداخلية، فقد ترغب في شراء berinternal.com لبدء تلقي حركة مرور المتصفح من الموظفين الداخليين.
يستخدم of-CORS Cloudflare لاستقبال وتوجيه طلبات DNS الجامدة وكذلك لإنهاء اتصالات SSL/TLS.
ستحتاج إلى حساب Cloudflare نشط لتعمل DNS بشكل صحيح مع of-CORS. بمجرد أن يكون لديك حساب Cloudflare، ستحتاج إلى إنشاء مفتاح API (يمكن القيام بذلك في لوحة التحكم هنا).
يجب أن يتمتع مفتاح API بصلاحيات كافية لإضافة وحذف وتكوين المناطق وسجلات DNS. يمكن تحقيق ذلك عن طريق تحديد الأذونات التالية في صفحة إنشاء رمز API:

بمجرد إنشاء رمز API بالصلاحيات الصحيحة، يمكنك المتابعة إلى الخطوة التالية.
يستخدم of-CORS Heroku لنشر التطبيق واستضافته بسهولة.
ستحتاج إلى حساب Heroku نشط لتشغيل بنية تطبيق of-CORS. بمجرد أن يكون لديك حساب، ستحتاج إلى تثبيت أداة واجهة سطر الأوامر (CLI) الخاصة بـ Heroku. مع تثبيت CLI، يمكنك استخدامها لبدء جلسة CLI موثقة بالأمر التالي:
heroku login
يمكنك بعد ذلك تأكيد نجاح المصادقة على CLI عن طريق تشغيل الأمر التالي:
heroku whoami
مزيد من التوثيق حول ترخيص Heroku CLI للاستخدام مع Terraform يمكن العثور عليه هنا.
مع مفاتيح API اللازمة للبنية التحتية جاهزة الآن، يمكننا الانتقال إلى تكوين of-CORS للنشر. ألق نظرة على محتويات ملف التكوين YAML النموذجي التالي الذي يمكن العثور عليه في المستودع:
terraform:
# You must change this to a unique string that is a valid Heroku app name
heroku_app_name: best-of-cors
# Fill this out with your Cloudflare API token
cloudflare_api_token: this-is-my-api-token
hosts:
# This can be an arbitrary string, but must be unique as a direct descendant of hosts
testing:
host_domain: 127.0.0.1:8080
redirect_domain: google.com
targets:
- enable-cors.org
- example.com
ستحتاج إلى إنشاء ملف تكوين YAML جديد بهذا التنسيق للنشر.
ضمن قسم terraform، ستحتاج إلى تعيين heroku_app_name إلى اسم تطبيق متوافق مع Heroku فريد لحسابك. ستحتاج أيضًا إلى إضافة مفتاح Cloudflare API الذي أنشأته في القسم أعلاه ضمن توجيه cloudflare_api_token.
قسم hosts هو المكان الذي نحدد فيه النطاقات التي نتوقع أن يستقبلها of-CORS حركة المرور عبرها وماذا نفعل عندما يأتي زوار الويب. لنفترض أن لدينا شركة نستهدفها ونعلم أن لديها نطاقين داخليين (myinternalcorp1.com و myinternalcorp2.com). قمنا بشراء النطاق yinternalcorp1.com متوقعين أن يزوره الموظفون عن طريق الخطأ. في هذه الحالة نود تكوين hosts على النحو التالي:
hosts:
testing_1:
host_domain: yinternalcorp1.com
redirect_domain: myinternalcorp1.com
targets:
- myinternalcorp1.com
- myinternalcorp2.com
host_domain هنا هو النطاق الذي تتوقع استقبال حركة المرور عليه (أي النطاق الذي تم شراؤه). يحدد redirect_domain النطاق الذي يجب إعادة توجيه الضحايا إليه بمجرد إطلاق الحمولة. يحدد targets النطاقات التي يجب إطلاق الحمولات ضدها عندما يزور الضحية of-CORS.
لنفترض أننا اشترينا أيضًا yinternalcorp2.com ونريد تكوين of-CORS لإطلاق هجمات عند زيارته. يمكن بعد ذلك تحديث قسم hosts على النحو التالي:
hosts:
testing_1:
host_domain: yinternalcorp1.com
redirect_domain: myinternalcorp1.com
targets:
- myinternalcorp1.com
- myinternalcorp2.com
testing_2:
host_domain: yinternalcorp2.com
redirect_domain: myinternalcorp2.com
targets:
- myinternalcorp1.com
- myinternalcorp2.com
الآن إذا زار ضحية عن طريق الخطأ yinternalcorp1.com أو yinternalcorp2.com، سيتم إطلاق الحمولات لتعداد أخطاء تكوين CORS على myinternalcorp1.com و myinternalcorp2.com وسيتم إعادة توجيه متصفح الضحية لاحقًا إلى النطاق الصحيح.
لن تحتاج إلى تثبيت Terraform أو Heroku أو Python مع خيار Docker. فقط قم بتشغيل هذا الأمر مع المسار الصحيح لملف yaml الخاص بك:
docker run -v $PWD/config.yml:/config.yml -it --rm trufflesecurity/of-cors
يعتمد نشر of-CORS على Terraform. يمكنك اتباع التعليمات لتثبيت Terraform هنا. بمجرد التثبيت، يجب أن يكون الثنائي terraform متاحًا في PATH للنظام.
يعتمد نشر of-CORS أيضًا على Python3. تأكد من تثبيته وتوافره في PATH للنظام.
بعد الانتهاء من المصادقة على موفري السحابة لدينا ويكون ملف تكوين of-CORS جاهزًا، يمكننا الآن الانتقال إلى النشر.
أولاً سنحتاج إلى تهيئة Terraform. يجب تشغيل هذا الأمر من الدليل الجذر للكود المصدري:
cd terraform && terraform init && cd ../
لنفترض أن ملف التكوين الخاص بنا موجود في /tmp/of_cors_config.yml. سنقوم بعد ذلك بتشغيل الأوامر التالية لتشغيل جميع بنى of-CORS التحتية (لاحظ أن هذا يفترض تشغيل الأوامر في bash). قد يستغرق تشغيل هذا الأمر من 5 إلى 10 دقائق، لذا يرجى التحلي بالصبر!
يرجى أيضًا ملاحظة أنه بالنسبة للتعدادات الكبيرة جدًا، غالبًا ما ينفد الموارد من Heroku. هذه مشكلة معروفة، وسنكون سعداء بمساعدتك في إيجاد حل. قد تشمل الإصلاحات المستقبلية القدرة على رفع التعدادات بنفسك، أو زيادة حجم Dyno في Heroku، أو التبديل إلى Sublist3r أو أداة تعداد أخرى.
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
CONFIG_FILE=/tmp/of_cors_config.yml make deploy_and_configure
يرجى الملاحظة - هناك حالة سباق يمكن أن تحدث عند تشغيل بنية Heroku التحتية والوصول الفوري إلى وحدة التحكم داخلها. إذا فشل تشغيل أمر make deploy_and_configure الأخير، يرجى الانتظار بضع دقائق ومحاولة تشغيله مرة أخرى.
بعد انتهاء أمر deploy_and_configure من التشغيل، سيكون لديك الآن...
of-CORS مليء بنطاقات تكوين CORS الداخلية المحتملةآخر شيء نحتاج إلى القيام به ليكون نشر of-CORS جاهزًا لاستقبال حركة المرور هو تكوين أسماء النطاقات التي اشتريتها لاستخدام Cloudflare كخوادم DNS الموثوقة. لدى Cloudflare دليل متعمق لفعل ذلك هنا.
اتبع الخطوات التالية لتأكيد أن برنامجك يعمل بشكل صحيح. لأغراض هذا القسم، سنستخدم مثيل of-CORS الذي تم إعداده تحت النطاق hackersofhollywood.com.
أولاً، دعنا نتحقق من أن سجلات SOA الخاصة بنطاقنا تشير إلى Cloudflare:
dig soa <domain>
كما هو موضح أدناه، تشير سجلات SOA لـ hackersofhollywood.com بشكل صحيح إلى خوادم أسماء Cloudflare:

ثم نراجع حساب Cloudflare لتأكيد أن سجلات DNS قد تم إعدادها لكل من hackersofhollywood.com و *.hackersofhollywood.com بمحتويات CNAME تشير إلى نطاقات Heroku. يتم ذلك من خلال واجهة الويب الخاصة بـ Cloudflare ضمن قسم DNS:

الخطوة التالية هي تأكيد أن Heroku مهيأ لاستقبال حركة المرور عبر هذين السجلين CNAME. يمكن القيام بذلك من خلال واجهة الويب الخاصة بـ Heroku ضمن Settings -> Domains:

بالتأكيد نرى اسمي نطاق مع أهداف DNS مناسبة مهيأة في Heroku وهذه الأهداف تنعكس بشكل صحيح في سجلات CNAME الخاصة بـ Cloudflare.
يمكننا بعد ذلك تشغيل الأمر التالي لفتح جلسة متصفح موثقة إلى صفحة عارض النتائج الخاصة بـ of-CORS:
CONFIG_FILE=<path_to_config_file> make open_heroku_console
يجب أن يؤدي هذا إلى ظهور لوحة تحكم فارغة في متصفحك:

أخيرًا، يمكننا اختبار أن استقصاء أخطاء تكوين CORS يتم إطلاقه بنجاح. افتح متصفحًا على النطاق الأساسي لأحد تكويناتك (في مثالنا، https://hackersofhollywood.com) وتأكد من إعادة توجيه الصفحة بعد بضع ثوانٍ:

الآن عد إلى صفحة لوحة التحكم وقم بتغيير عامل تصفية Success لتصفية Unknown واضغط على زر Submit Query. يجب أن ترى الآن مجموعة من النتائج معبأة:

تم نصب الفخ! الآن فقط استرخ وانتظر حتى يصادف ضحاياك نطاقك الصغير اللذيذ.
يمكن استخدام الأمر التالي لعرض والاستعلام عن جميع النتائج في جلسة متصفح موثقة:
CONFIG_FILE=<path_to_config_file> make open_heroku_console
تم تصميم ملف تكوين of-CORS لدعم إضافة وإزالة النطاقات التي يتم إطلاق الهجمات ضدها بمرونة. ببساطة قم بتحديث محتويات قسم hosts في ملف التكوين الخاص بك وأعد تشغيل البرنامج النصي للتزويد:
source venv/bin/activate
CONFIG_FILE=/tmp/of_cors_config.yml make deploy_and_configure