- WhatsApp message में सामान्य site जैसा दिखने वाला link और preview दिखाते हुए, असल click को attacker की site पर भेजने वाली phishing vulnerability मिली
- वजह यह है कि message body का link और preview data अलग-अलग भेजे जाते हैं, और
matchedTextहटाकर preview mismatch बनाया जा सकता है U+202ERight-To-Left Override character URL के display direction को उलट देता है, जिससे असली domain को सामान्य domain जैसा दिखाया जा सकता है- attacker impersonation target का mirror domain तैयार करने के बाद original site का preview बनाए रखकर सिर्फ
textvalue बदल सकता है और victim को धोखा दे सकता है - Meta ने जवाब दिया कि वह URL normalization logic को dynamically adjust कर सकता है, और users को link click करने से पहले उसे copy करके असली address verify करना चाहिए
WhatsApp link preview और actual link के अलग होने की जगह
- researcher यह confirm करना चाहता था कि WhatsApp message recipient link preview render करते समय HTTP request trigger करता है या नहीं, इसलिए उसने एक दोस्त को
webhook.sitelink भेजा - HTTP request केवल sender side से एक बार हुई, और यह confirm हुआ कि recipient अलग से link render नहीं करता
- इस behavior की वजह से माना गया कि WhatsApp message में link और preview information साथ में include होकर भेजी जाती है, और researcher ने test किया कि क्या दोनों को अलग-अलग बनाया जा सकता है
Issue #1: link preview mismatch
- WhatsApp Web message को proxy से सीधे modify करने की कोशिश की गई, लेकिन WhatsApp के E2EE की वजह से Burp Suite जैसे tools से simple tampering मुश्किल थी
- इसके बजाय message WebSocket से encrypted होकर भेजे जाने से ठीक पहले JavaScript में breakpoint लगाकर message object देखा गया
- message object में link body और preview information अलग properties के रूप में मौजूद थीं
text: message bodycanonicalURL: preview के नीचे दिखने वाला domainmatchedText: यहcanonicalURLसे compare की जाने वाली value लगती है, और test किया जाता है कि यह valuetextमें भी दिखाई देती है या नहीं
instagram.comके message object मेंtextकोgoogle.comमें बदलने पर preview गायब हो गया और सिर्फ Google link बचाmatchedTextproperty delete करने पर actual link और preview अलग-अलग होने वाला mismatch message बनाया जा सका
Issue #2: U+202E से link display disguise
- actual link body सामने न आए, इसके लिए fuzzing की गई कि क्या Unicode characters text display बदलते हैं
U+202Eएक Right-To-Left Override character है, जो text को user के लिए reverse order में display कराता है- सिर्फ
U+202Eइस्तेमाल करने पर link का रूप अजीब दिखता था और click होने की संभावना कम लगती थी, इसलिए ऐसा reversed string बनाना जरूरी था जो normal URL जैसा दिखे
mirror URL बनाने का तरीका
- लक्ष्य ऐसा URL बनाना था जो reverse होने पर
https://instagram.comजैसा दिखे - simple reversed string
moc.margatsni//:sttphबनती है, लेकिन.margatsniजैसा TLD register नहीं किया जा सकता - समाधान यह था कि वास्तव में register किए जा सकने वाले TLD को subdomain जैसा दिखने के तरीके से इस्तेमाल किया जाए
- उदाहरण के लिए Netherlands TLD
.nlइस्तेमाल करने परln.instagram.comजैसा दिखने वाला string बनाया जा सकता है
- उदाहरण के लिए Netherlands TLD
- URL को ऐसा दिखना चाहिए कि वह
https://से शुरू होता है, इसलिए valid path//:sptthको पीछे जोड़ा गया - नतीजतन
https://moc.margatsni.nl//:sptth,U+202Eके साथ combine होने परhttps://ln.instagram.com//:sptthजैसा दिख सकता है - researcher ने इस तरीके को 2K2E कहा
attack flow
- attacker उस site का mirror domain खरीदता है जिसे impersonate करना है
- उदाहरण:
ln.instagram.comजैसा दिखाने के लिएmoc.margatsni.nlखरीदा जाता है
- उदाहरण:
- पहले original domain link वाला message बनाकर उस site का preview हासिल किया जाता है
- example object में
text,matchedText,canonicalUrlसभी मेंhttps://instagram.com/होता है description,title,jpegThumbnail,thumbnailDirectPathजैसी preview-related values भी शामिल होती हैं
- example object में
- इसके बाद
matchedTextहटाकरtextvalue को\u202ehttps://moc.margatsni.nl//:sptthके रूप में बदला जाता है - final message Instagram preview दिखाता है, लेकिन click करने पर attacker के तैयार किए गए domain पर जा सकता है
Meta की प्रतिक्रिया और दूसरे platforms से तुलना
- Meta ने जवाब दिया कि वह कई platforms और environments support करता है, इसलिए platform-specific URL normalization methods server-side logic से अलग हो सकते हैं
- उसने बताया कि actual spam और abuse होने पर URL normalization logic को dynamically adjust करने वाला system मौजूद है
- researcher ने आकलन किया कि Meta इस security issue को actively solve करने के बजाय, केवल system द्वारा spam detect किए जाने पर respond करना चाहता है
- X, TikTok, Pinterest
U+202Echaracter के लिए sanitization processing करते हैं, इसलिए वे WhatsApp से अलग हैं
users के लिए possible mitigation
- WhatsApp links पर सिर्फ उनके displayed appearance के आधार पर भरोसा करना मुश्किल है
- 2K2E phishing से बचने के लिए link click करने से पहले उसे copy करके clipboard preview में actual address verify करना चाहिए
- clipboard preview
U+202Echaracter sanitized state में link address दिखा सकता है - researcher ने बाद में ऐसी अन्य services भी खोजीं जिनमें proper sanitization processing नहीं थी और जो 2K2E के लिए vulnerable थीं
1 टिप्पणियां
Hacker News की राय
यह किसी feature के काफ़ी चतुर misuse का combination है, लेकिन कुल security impact कम ही माना जाएगा
सबसे अच्छे मामले में भी यह बस recipient से browser में link खुलवा देता है, इसलिए अगर attacker पुलिस/इंटेलिजेंस एजेंसी जैसा न हो, तो आम तौर पर device के unpatched software का फायदा उठाने जैसे follow-up attack की जरूरत पड़ेगी
तकनीकी तौर पर इसे clickjacking कहना ठीक नहीं है। Clickjacking आम तौर पर बहुत specific technique है, जिसमें invisible HTML frame को दूसरे content के ऊपर overlay किया जाता है
https://owasp.org/www-community/attacks/Clickjacking
https://portswigger.net/web-security/clickjacking
सब लोग UTF right-to-left characters पर ही focus कर रहे हैं, लेकिन Meta को कम से कम यह problem स्वीकार करनी चाहिए थी कि preview URL message URL से अलग हो सकता है
मैं समझता हूं कि यह shortened URL expand करने के लिए किया जाता है, लेकिन Meta और WhatsApp ज़रूर कोई smart workaround implement कर सकते होंगे
Clickjacking में आपको लगता है कि आप किसी element पर click कर रहे हैं, लेकिन असल में अक्सर transparent तरीके से ऊपर रखे दूसरे element द्वारा click event intercept किया जाता है
दिखाई दे रही lower layer पर focus देकर और
onblurevent fire होना detect करके, user को event न मिले तब भी attacker click का पता लगा सकता हैOP ने जो खोजा है वह बढ़िया है, लेकिन clickjacking नहीं है। मैंने भी पहले RTL characters से screensaver file, यानी Windows में सिर्फ़ extension अलग वाली ordinary executable file को Word document जैसा दिखाया था। शायद दोस्त या teacher के साथ prank करना चाहता था, लेकिन वजह ठीक से याद नहीं
OP ने एक step आगे बढ़कर दूसरे system में display बदलने का तरीका खोज लिया। इसमें user इस बात को लेकर confuse नहीं होता कि कौन-सा element click कर रहा है, बल्कि link कहां जाएगा इसे लेकर confuse होता है, इसलिए यह clickjacking नहीं है; article की शुरुआत में link किया गया Wikipedia page भी यही confirm करता है
मैंने असल में clickjacking का abuse होते नहीं देखा, लेकिन OP ने जो तरीका खोजा है वह abuse हो सकता है
सच कहूं तो user link click करते समय final domain पहचान पाएगा, यह उम्मीद मैंने बहुत पहले छोड़ दी थी। ज्यादातर लोग concept ही नहीं समझते, और बाकी लोगों के लिए भी पहचानना मुश्किल है
जो लोग सोचते हैं कि वे पहचान सकते हैं, वे भी तब frustrate हो जाते हैं जब सारे links
sendgrid.tld/j3ovi3bfogobbledypoop93jnri2oजैसी जगहों पर जाते हैं। हम रोज़ लोगों को tracking के लिए obfuscated suspicious garbage links दबाने की training दे रहे हैं, और किसी को फर्क नहीं पड़ताशानदार hack है। असली problem WhatsApp या Unicode reverse characters नहीं, बल्कि यह है कि URL मुश्किल होते हैं
visa.securesite.comजैसा simple example भी बहुत लोगों को fool कर देता है। निकट भविष्य में कोई अच्छा solution दिखता नहींhost name और domain को लेकर general confusion ज्यादा मुश्किल problem है, लेकिन browsers domain name वाले हिस्से को highlight करके इसे कुछ हद तक mitigate करने की कोशिश करते रहे हैं। ज्यादातर phishing techniques की तरह आखिर में passkeys ही शायद इसे खत्म करेंगे
RTL अपने पूरे अस्तित्व में बहुत बड़ी security vulnerabilities का source रहा है। जिन लोगों को ऐसी languages नहीं आतीं, उन्हें बिना किसी benefit के risk में न डाला जाए, इसके लिए operating system में सभी RTL disable करने की setting क्यों नहीं है, समझ नहीं आता
TextViewभी इसमें शामिल हैजब तक developer किसी specific text range को explicitly review करके allow न करे, default में सभी bidirectional text bypasses disabled होने चाहिए
दुनिया की 1% से कम population का ध्यान रखने के नाम पर पूरे text rendering stack को default रूप से vulnerable बनाना समझदारी नहीं है
Meta ने इस problem को fix न करने और इस researcher को bug bounty भी न देने का फैसला किया, यह disappointing है
details यहां नहीं बताऊंगा, लेकिन Google Search कभी-कभी URL rewrite करता है, और उस तरीके की वजह से attacker actual URL को spoof कर सकता है
websites और apps में दिखने वाले URL पर कभी भरोसा न करना ही बेहतर है
“जैसा expected था, link और preview अलग-अलग भेजे गए!” यह बात बड़ी UI design problem है। आम user को security के लिए link और preview compare क्यों करना चाहिए
overall मुझे 1 सबसे अच्छा लगता है। sender वैसे भी अपने सारे messages “forge” कर सकता है, और preview को message के हिस्से के रूप में include करना बहुत अलग नहीं है
यहां problem यह है कि यह clearly नहीं दिखता कि यह content sender से आया है। यह अलग speech bubble जैसा दिखता है, इसलिए 99% users को शायद पता नहीं होगा कि content sender-provided है
ऊपर से core चीज URL ही है। अगर आप attacker-controlled URL click करते हैं तो attacker preview में अपनी मर्ज़ी की कोई भी चीज दिखा सकता है। इसलिए preview को “real” force करके मिलने वाला benefit बहुत कम है
3 भी ठीक हो सकता है। खासकर अगर इसे double-blind जैसे तरीके से implement किया जाए, तो एक side से connect करके वह second side को forward कर सकती है। तब first IP देखता है और second destination, लेकिन जब तक वे मिलीभगत न करें, दोनों एक साथ दोनों चीजें नहीं देखते
हालांकि इतनी infrastructure build और maintain करने के मुकाबले benefit relatively छोटा है
article के बिल्कुल नीचे इसे reverse engineering के रूप में classify किया गया है, यह मुझे अच्छा लगा
यह clickjacking नहीं है। Clickjacking में attacker click को intercept करके user से वास्तव में कोई दूसरा target click करवाता है, जिसे user ने intend नहीं किया था या जिसके बारे में उसे पता नहीं था
text को right-to-left flow कराने वाले RTL codepoints internationalization feature हैं, और उनसे लोगों को confuse करना कोई नई vulnerability नहीं है