- Chrome के MV3 अपडेट ने मौजूदा adblockers की क्षमता कमज़ोर करने के लिए
webRequestBlockingpermission को हटा दिया - लेखक ने MV3 environment में भी
webRequestBlockingको बायपास करने वाला एक bug 2023 में खोजा - यह bug JavaScript bindings की ढीली संरचना और पुराने code के जस का तस बचे रहने की वजह से पैदा हुआ
- WebView instance ID में हेरफेर करके permission check को बायपास किया जा सकता था, जिससे MV3 environment में भी blocking feature इस्तेमाल किया जा सकता था
- अब patch लागू हो चुका है, इसलिए यह बायपास तरीका अब काम नहीं करता
MV3 और adblocker में बदलाव
- Chrome ने MV2 extensions को चरणबद्ध तरीके से बंद करना शुरू किया और उनकी जगह MV3 में migration आगे बढ़ाया
- MV3 ने
webRequestBlockingpermission हटा दिया, ताकि adblockers network requests को script के ज़रिए dynamically block न कर सकें - इस permission की जगह
declarativeNetRequestAPI जोड़ी गई, लेकिन यह उसी स्तर की flexibility सपोर्ट नहीं करती - इस बदलाव की वजह से adblockers की क्षमता काफ़ी घटने लगी
JavaScript binding संरचना की सीमाएँ
- Chrome का core C++ में बना है, लेकिन extensions JavaScript पर चलते हैं, और extension APIs तक पहुँच भी JS bindings के ज़रिए होती है
- 2015~2016 तक API initialization और validation के लिए साइट में JS files (extension binding modules) inject की जाती थीं
- यह तरीका JS global functions और prototype overriding के प्रति कमज़ोर था, इसलिए Universal XSS bugs के कई मामले सामने आए
- बाद में Google ने मुख्य bindings को C++ में migrate किया, लेकिन कुछ JS binding files अब भी बची हुई हैं
- आज भी
chrome.webRequestजैसी कुछ APIs JS binding संरचना का इस्तेमाल करती हैं
web request event class का इस्तेमाल कर बायपास
-
MV2 में web request blocking नीचे दिए गए code से लागू किया जा सकता था
chrome.webRequest.onBeforeRequest.addListener(() => { return { cancel: true } }, { urls: ['*://*.example.com/*'] }, ['blocking']) -
MV3 में
blockingoption प्रतिबंधित है, इसलिए सामान्य तरीके से block करना संभव नहीं है -
लेकिन webRequest event के
.constructorके ज़रिए मनचाहा event object बनाया जा सकता है -
अंदरूनी रूप से JS binding की एक special wrapper class इस event object को संभालती है
-
constructor parameters में से एक
opt_webViewInstanceIdदेने पर platform app-केवल allow logic को बायपास करके blocking permission check को पार किया जा सकता थाlet WebRequestEvent = chrome.webRequest.onBeforeRequest.constructor let fakeEvent = new WebRequestEvent("webRequest.onBeforeRequest", 0, 0, 0, 1337) fakeEvent.addListener(() => { return { cancel: true } }, { urls: ['*://*.example.com/*'] }, ['blocking']) -
इसे मूल रूप से सिर्फ platform apps के लिए डिज़ाइन किया गया था, लेकिन WebView ID validation कमज़ोर होने की वजह से सामान्य extensions भी इसका दुरुपयोग कर सकते थे
नतीजे और security patch
- इस vulnerability की वजह से MV3 environment में भी व्यवहारिक रूप से पूरी क्षमता वाला adblocker बनाना संभव था
- लेखक ने यह bug 2023 में Google को report किया, और Chrome 118 में इसे इस तरह patch किया गया कि WebView permission ownership को सही ढंग से verify किया जा सके
- कोई bounty नहीं दी गई, क्योंकि इस संरचना में अतिरिक्त data exposure के बिना सिर्फ permission bypass ही संभव था
- यह मामला दिखाता है कि कुछ दर्जन lines के code changes किसी बड़े enterprise के security update को निष्प्रभावी कर सकते हैं
निष्कर्ष और संदर्भ
- यह bug अब patch हो चुका है और अब काम नहीं करता
- इसी तरह दिलचस्प Chrome extension vulnerabilities के उदाहरणों में एक ऐसा issue भी है जिसे वास्तव में CVE number और $10,000 reward मिला था (अलग blog post देखें)
4 टिप्पणियां
शायद उस अपडेट के बाद adblock कंपनियों की कमाई और बढ़ी होगी।
जो standalone apps नेटवर्क स्तर पर ही इसे ब्लॉक कर देते हैं, वे सिर्फ़ paid रूप में इस्तेमाल किए जा सकते हैं, इसलिए शायद वे भी काफ़ी बिके होंगे।
2 साल बाद ऐसी vulnerability पोस्ट करना जिसका अब कोई मतलब ही नहीं रहा, और फिर यह खास तौर पर कहना कि इसके पैसे नहीं मिले... निजी तौर पर यह मुझे ज़्यादा cool नहीं लगता।
लेकिन शायद ऐसी बातें भी ब्लॉग पर लिखनी पड़ती हैं ताकि अपनी value साबित की जा सके?
सच कहूँ तो मैं भी ऐसी mindset सीखकर ब्लॉग पर बहुत ज़्यादा लिखना चाहता हूँ।
बस Firefox इस्तेमाल कीजिए। पिछले 1–2 सालों में यह काफ़ी तेज़ हुआ है, इसलिए बुरा नहीं है।
मैं कई सालों से Firefox को अपने main browser के रूप में इस्तेमाल कर रहा हूँ और बीच-बीच में Chrome से तुलना भी करता हूँ; खासकर हाल में मुझे लगने लगा है कि Firefox अब काफ़ी उपयोगी हो गया है।
कोरिया के बैंकों जैसी web pages, जो web standards को नज़रअंदाज़ करती थीं, वे भी हाल के दिनों में काफ़ी सुधरी हैं, इसलिए अब ज़्यादातर Firefox में भी अच्छी तरह काम करती हैं।
Customization भी Firefox में कहीं ज़्यादा आसान है।
Hacker News राय
मैं Firefox को एक बार आज़माना चाहता हूँ, लेकिन कभी-कभार होने वाले वेबसाइट लोडिंग बग और PWA (Progressive Web Apps) इंस्टॉल न कर पाने की कमी सबसे बड़ी रुकावट है। Chrome और उसके परिवार के ब्राउज़र बहुत पहले से यह फीचर सपोर्ट करते रहे हैं, लेकिन Firefox ने अभी तक इसे क्यों लागू नहीं किया, यह समझ नहीं आता। एक third-party extension (PWAs for Firefox) मिला था, लेकिन privacy के लिहाज़ से उसे इस्तेमाल करने में हिचकिचाहट है
Google के व्यवहार को bypass करने का कोई तरीका हो भी, तब भी मुझे नहीं लगता कि वह सही दिशा है। अगर लोग Google की चालों से सहमत नहीं हैं, तो Chrome और Chromium-आधारित सभी ब्राउज़र छोड़ देना ही एकमात्र सही तरीका है। Google के monopoly को चोट पहुँचाकर वेब के भविष्य की दिशा पर उसका नियंत्रण छीनना ज़रूरी है
असली bypass तो Firefox इस्तेमाल करना है। uBlock Origin, Firefox पर सबसे अच्छा काम करता है
uBlock Origin works best on Firefox
मुझे शक है कि Google का MV3, MV2 से सच में ज़्यादा सुरक्षित भी है या नहीं। सिर्फ MV3 पर बदल देने से मूल रूप से security बेहतर हो जाती है, ऐसा नहीं लगता
किसी ने adblocker bypass ढूँढकर Google को बता दिया, इस पर प्रतिक्रिया है: “ढूँढते ही Google के पास चुगली कर दी, कमाल है”
OP ने Google को एक ऐसा “issue” रिपोर्ट कर दिया जिसमें Google के लिए कोई समस्या ही नहीं थी, और इस तरह addon developer के लिए MV3 restrictions को bypass करने का रास्ता बंद कर दिया। उम्मीद है इसकी कीमत $0 रही होगी
Brave इस्तेमाल करना शुरू करने के बाद से Chrome की बिल्कुल याद नहीं आती
Brave
Stop using Brave browser
"adblocker को webRequestBlocking ज़रूरी है, और Google ads से कमाता है इसलिए इस फीचर को हटाना बहुत जानबूझकर किया गया कदम है" — इस दावे के जवाब में यह राय भी है: "यह सही नहीं है; कोई भी Chrome और manifest v3 पर uBlock Origin Lite इस्तेमाल कर सकता है, इसकी performance अच्छी है और मुझे पुराने uBlock Origin से कोई फर्क महसूस नहीं होता। सब कुछ C++ में filter होता है इसलिए यह बहुत तेज़ है। हाँ, rules की maximum limit है, लेकिन अभी के लिए वह काफ़ी संभालने लायक है"
काम के laptop के अलावा Chrome इस्तेमाल करने की नौबत नहीं आती, और सामान्यतः मैं Firefox ही इस्तेमाल करता हूँ। फिर भी, काम के दौरान web surfing (research, documents वगैरह) में मदद करने वाला uBlock Origin इस्तेमाल न कर पाना खलेगा
अगर बस bypass चाहिए, तो Firefox इंस्टॉल कर लो