مستوى الخبراء: كسر AngularJS Sandbox وتخطي الـ CSP بضربة واحدة! 🏆🛡️
مرحباً بصيادي الثغرات المحترفين! اليوم سنواجه "الحصن المنيع". المطور لم يكتفِ بوضع AngularJS Sandbox، بل أضاف طبقة حماية CSP لمنع الـ XSS التقليدي. لكننا اليوم سنستخدم ثغرة في كيفية معالجة الأحداث (Events) لتنفيذ كودنا بصمت.
لاب اليوم من PortSwigger هو:
Reflected XSS with AngularJS Sandbox escape and CSP
اليوم سنتعلم كيف نستخدم خاصية ng-focus و $event.composedPath() للالتفاف على سياسات المتصفح الصارمة. لنبدأ! 🚀
🔍 التحدي: عندما تجتمع الـ CSP مع الـ Sandbox
سياسة CSP في هذا اللاب تمنع تنفيذ الأكواد مباشرة، لكنها تسمح لـ AngularJS بالعمل. الـ Sandbox يحاول منع الوصول لـ window، لذا سنبحث عن طريق بديل للوصول لمحرك التنفيذ عبر الفلاتر.
استراتيجية الحل:
1. الحقن: سنقوم بحقن عنصر <input> يستخدم توجيهات AngularJS.
2. التفعيل التلقائي: سنستخدم الـ ID والهاش (#x) لإجبار المتصفح على التركيز (Focus) على العنصر فور تحميل الصفحة.
3. الهروب: سنستخدم $event.composedPath() للوصول إلى كائنات المتصفح وتجاوز الـ Sandbox عبر فلتر orderBy.
🛠️ الـ Payload القاتل (The Expert Bypass)
سنقوم بإرسال الضحية إلى رابط يحتوي على وسم <input> مفخخ بحدث ng-focus:
<script> location='https://YOUR-LAB-ID.web-security-academy.net/?search=%3Cinput%20id=x%20ng-focus=$event.composedPath()|orderBy:%27(z=alert)(document.cookie)%27%3E#x'; </script>
لماذا هذا الكود عبقري؟
1. ng-focus: هذا الحدث ينطلق عندما يتم التركيز على الحقل.
2. $event.composedPath(): هذه الدالة تعيد مصفوفة تحتوي على جميع الكائنات التي مر بها الحدث، مما يسمح لنا بالوصول لـ window بطريقة غير مباشرة يغفل عنها الـ Sandbox.
3. orderBy: نستخدم هذا الفلتر لتنفيذ أمر alert(document.cookie).
4. #x: في نهاية الرابط، تخبر المتصفح أن يذهب للعنصر الذي يحمل ID يساوي x، مما يفعل الـ Focus تلقائياً.
📝 خطوات الحل العملية
- اذهب إلى Exploit Server الخاص باللاب.
- في قسم الـ Body، ضع كود السكريبت المذكور أعلاه.
- تأكد من استبدال
YOUR-LAB-IDبرابط اللاب الحقيقي الخاص بك. - اضغط Store ثم Deliver exploit to victim.
النتيجة: 💥 بمجرد أن يفتح الضحية الرابط، سيقوم المتصفح بالتركيز على الـ input المحقون، مما يطلق حدث ng-focus، والذي بدوره ينفذ الـ XSS ويسرق الـ Cookies رغم وجود الـ CSP والـ Sandbox!
💡 نصيحة صياد (Expert Tip)
- ثغرات الـ Logic: دائماً ابحث عن الدوال التي تعيد مصفوفات أو كائنات (Objects) مثل
composedPath، فهي غالباً ما تكون ثغرة للهروب من البيئات المعزولة. - تكامل الدفاعات: تعلم أن وجود CSP لا يعني أن الموقع آمن بنسبة 100% إذا كان هناك ثغرة في المكتبات المستخدمة مثل AngularJS.
🚀 الخاتمة
لقد أثبتَّ اليوم أنك خبير حقيقي! كسر الـ CSP مع الـ Sandbox هو إنجاز كبير يتطلب فهماً عميقاً لـ DOM المتصفح وطريقة عمل إطارات العمل الحديثة.
.png)