الحماية من ثغرة CSTI في AngularJS .
ثغرة CSTI تتسبب بثغرات XSS بدون الحاجة الى HTML Tags لأستغلالها .
1337r00t | BlackFoxs Inc
------------------------------------------------
* السلام عليكم ورحمة الله وبركاته *
------------------
الحمد لله على جميع نِعمه علينا ما علمنا منها وما لم نعلم حمداً كثيراً والصلاة والسلام على نبينا محمد اشرف الخلق والمرسلين, اما بعد :-
--------------------
# ماهو اطار العمل AngularJS :-
هنا يوجد كل ماتريدون ان تعرفوه عن AngularJS شرح بالعربي .
-----------------------
# مقدمة عن سبب حدوث ثغرة CSTI :-
كما نعرف ان AngularJS هو اطار عمل MVC/MVW Client-side وتتعامل مع الكلاينت سايد (اي اننا بنتفاعل مع المتصفح وليس السيرفر) , اذا مالخطب ؟
الخطب ياصديقي هو ان AngularJS عندما تستعرض صفحة معينة وضغطت CTRL+U او وضعت قبل الرابط View-Source: راح تلاحظ وجود ng-app هو في الواقع templates يعمل لها rendered من Angular, وهذا يعني ان اليوزر يستطيع احيانا ادخال مدخل او داتا الى الكلاينت ومن الممكن تنفيذ بعض expressions وهذا يعني من الممكن حدوث ثغرات client-side template injection (CSTI) ! كيف ؟
في Angular templates يوجد مايسمى بال expressions وهي عبارة عن تقويستين متقابلتين "double curly braces" وهي افضل مايقدمه Angular بحيث يغنيك عن كتابة بعض اكواد الجافا سكربت ولكن دائما يقولون javascript-like code snippets اي انها تتشابه قليلا مع Javascript مثلا كتبنا هذا الكود في javascript :-
if(data.length === 0){
test1.innerHTML = 'test1';
}else{
test2.innerHTML = 'test2';
}
لكن مع expressions اصبح الأمر اسهل :-
<p>{{ data.length > 0 && 'test1' || 'test2' }}</p>
اذا ؟؟ يستطيع المهاجم أستغلال الexpressions لصالحه في الحقن والتسبب بثغرة XSS لكن كيف ؟
------------------------------
# سيناريو للهجوم :-
كما رأيتم تغريدتي في @0x1337r00t قلت ان الخطب ليس في Back-end Developer بل في Front-end Developer ! كيف ؟
لنقل كالتالي ال Back-end Developer اسمه أحمد || والFront-end Developer اسمه عبدالله [اخترت التسمية من اجل سهولة الشرح]
لنقل ان احمد وعبدالله مطلوب منهم واجب وظيفته طباعة اسم شخص ويجب ان يكون محمي من الثغرات, بسيطة صح ؟ .
أحمد ارسل لعبدالله هذا الكود :-
<?php echo htmlspecialchars($_GET['q']);?>
هل هناك ثغرات في كود أحمد ؟ لا ابدا لايوجد سليم 100%
عبدالله أستلم الكود اللذي ارسله أحمد واضافه للكود الخاص به :-
<html ng-app>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular.js"></script>
</head>
<body>
<p>
<?php echo htmlspecialchars($_GET['q']);?> <!--كود أحمد-->
</p>
</body>
</html>
هل هناك ثغرات في كود عبدالله ؟ نعم توجد ثغرة CSTI اللتي تؤدي لثغرة XSS !
مازلت مصدوم ولاتصدقني ؟ اذا ارفع كود عبدالله على سيرفر شخصي واذهب الى :-
http://localhost/test.php?q={{'a'.constructor.prototype.charAt=[].join;$eval('x=1} } };alert(1337)//');}}
صورة من التجربة :-
هنا شرح لثغرة XSS لمن لايعرفها ولايعرف خطورتها .
----------------------
# كيفية التخلص من هذه الثغرة :-
للأسف الشديد اكثرية المبرمجين يستخدمون الدوال الغير مناسبة في ترقيع ثغرة CSTI وهذا الشيء غلط !! لنعرف ماهي الدوال المناسبة والغير مناسبة :-
الدوال الغير مناسبة :-
- UserInput
- Element.html
- trustAsHtml
- escapeForHtml
-------------------------------------------
الدالة المناسبة :-
- استخدام ngBindHtml مع ngSanitize
لاتنسى اضافة اللينك سورس :-
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular-sanitize.js"></script>
واضافة :-
var myApp = angular.module('myApp', ["ngSanitize"]);
مع :-
<div ng-bind-html="XXXXToScope"></div>
هذه التغييرات سوف تحميك من ثغرات CSTI .
-----------------------
# معلومات مهمه :-
- الSandbox ليس له علاقة بحمايتك .
- جميع أصدارت Sandbox من الممكن تخطيها
- الكثير من المواقع تحمل اصدارات قديمة من Angular JS للأسف .
- الCSP سوف يفيدك, وهنا شرح قمت بشرحه عن CSP .
------------------------
والسلام خير ختام
1337r00t | BlackFoxs Inc
التعليقات (2)
السلام عليكم
لي سؤال لو تكرمت و ان كان خارج الموضوع لاني حاليا اتعلم الانجولار و لي ما يقارب الشهرين اتعلمها صعبه لكن ممتعه .. بعد الاطلاع على الرابط الذي ببداية المقال angular is قمت بتصفحه و لقيت الاكواد نوعا ما غريبه عما اتعلمه في بعض الاسطر و بعضها مفهوم .. و هنا سؤالي هل angular js نفس angular 6 و 7 ام الاصدار الاول .. وهل محتوى المقال مقصود به الاصدارات 6 و 7 فما اعلى ؟
الله يعطيكم العافية وبالفعل مقالاتكم ليست مثل باقي المقالات العربية البسيطة بل متقدمة وتستاهل تنقرأ مثل المقالات اﻷجنبية
استمروا💓💓💓💓💓💓💓💓💓💓💓💓💓💓💓
لايوجد لديك حساب في عالم البرمجة؟
تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !