- Salt Labs ने पाया कि OAuth implementation की कमजोरियों के ज़रिए Booking.com, Grammarly, Vidio, Bukalapak जैसी सैकड़ों मिलियन उपयोगकर्ताओं वाली बड़ी सेवाओं और मोबाइल framework Expo में account takeover संभव था.
- OAuth मूल रूप से एक सुरक्षित protocol है, लेकिन इसे कैसे implement किया जाता है, इसके आधार पर गंभीर कमजोरियां पैदा हो सकती हैं.
- Booking.com
- Facebook OAuth implementation में
redirect_uri को उसी host के किसी दूसरे path में बदल सकने की समस्या थी.
- booking.com के भीतर एक ऐसा endpoint था जो base64 रूप में दिया गया address लेकर उसी address पर redirect करता था.
- इन दोनों को जोड़कर OAuth token को किसी दूसरे address पर भेजने के लिए manipulate किया जा सकता था.
- वेब version में login process के दौरान
redirect_uri को verify किया जाता था, इसलिए यह कमजोरी नहीं थी, लेकिन मोबाइल version में redirect_uri को भी manipulate किया जा सकता था, जिससे account takeover संभव था.
- यानी, उपयोगकर्ता यदि बहुत वैध दिखने वाला लिंक क्लिक करे और सामान्य रूप से OAuth process पूरा करे, तो अकाउंट हाईजैक हो सकता था.
- Expo
- मोबाइल framework Expo के built-in OAuth implementation में मिली कमजोरी.
- इस implementation में
returnUrl में exp://~~ जैसे Expo app के लिए विशेष लिंक होने चाहिए थे, लेकिन इसमें hTTps://~~ जैसी web address डाली जा सकती थी.
https:// को block किया गया था, लेकिन केवल upper/lower case बदलकर इसे bypass किया जा सकता था.
- इसके बाद
returnUrl जानकारी RU नाम की cookie में store होती थी, और OAuth पूरा होने के बाद Expo का OAuth server उस cookie को पढ़कर redirect करता था.
- हालांकि, Expo से Facebook पर जाने से पहले
https://~~ 를 신뢰하는 경우... जैसी warning दिखाई जाती थी और उपयोगकर्ता को इसे accept करना पड़ता था.
- इसे bypass करने के लिए 2 links को अपने-आप खोलने का तरीका इस्तेमाल किया गया.
- पहला link खोलकर तुरंत बंद किया जाता था ताकि सिर्फ
RU cookie सेट हो जाए.
- दूसरा link सीधे Facebook OAuth link देता था, जिससे
RU warning message को अनदेखा किया जा सके.
- इस तरीके से Codecademy.com के अकाउंट पर कब्ज़ा करने में सफलता मिली.
- इस कमजोरी को CVE-2023-28131 दिया गया, और Expo टीम ने शुरुआती रिपोर्ट के कुछ ही घंटों में समस्या ठीक कर दी.
- Grammarly, Vidio, Bukalapak
- इन तीनों साइट्स में एक ही तरीके से account takeover संभव था.
- पहले एक वैध web site बनाकर Facebook login token इकट्ठा किया गया.
- फिर Vidio और Bukalapak में Facebook द्वारा दिया गया token (जो किसी दूसरी web site के लिए जारी हुआ था) दे देने पर login सफल हो जाता था.
- यह कमजोरी इसलिए थी क्योंकि Facebook token के App ID की जांच नहीं की जाती थी. (token reuse attack)
- Grammarly थोड़ा अलग था क्योंकि वह token की जगह code इस्तेमाल करता था, इसलिए ऊपर वाली कमजोरी वहां नहीं थी.
- लेकिन code भेजने वाली API में
"code" की जगह "access_token" नाम से token देने पर login हो जाता था.
- इसलिए इन तीनों साइट्स में किसी दूसरे वैध site पर Facebook integration करने भर से तुरंत account takeover किया जा सकता था.
- OAuth implement करते समय यह जांचना ज़रूरी है कि किन हिस्सों में security vulnerabilities पैदा हो सकती हैं, और उन्हें रोकने के लिए पूरी process में बहुत सावधानी से validation करना चाहिए.
3 टिप्पणियां
यह सचमुच चेतावनी देने वाला है। हमें वाकई बहुत सावधान रहना होगा।
सोच से भी ज़्यादा इतने बड़े साइट्स में बहुत सारी vulnerabilities थीं।
यह वाकई ऐसी feature लगती है जिसे बहुत सावधानी से handle करना चाहिए।
यह भी लगा कि authentication library इस्तेमाल करनी चाहिए...
लेकिन Expo के मामले को देखें तो लगता है कि उसमें भी खुद validation ज़रूरी है।