- Electron-आधारित डेस्कटॉप ऐप Discord अंदरूनी तौर पर Chromium विंडो की तरह काम करता है, इसलिए वेब developer tools खोले जा सकते हैं और इनके जरिए client-side code में बदलाव संभव है
- कुछ modded clients और plugins, Nitro paid subscription की ज़रूरत वाले कुछ फीचर्स को client side पर अनलॉक कर देते हैं
- Webpack code splitting से बँटे modules को
webpackChunkdiscord_appवेरिएबल में inject करके internal functions को खोजने और बदलने का तरीका इसका मुख्य आधार है - screen sharing quality जाँचने वाला function केवल client पर verify होता है, इसलिए उसे bypass किया जा सकता है, लेकिन premium themes के लिए server sync validation अतिरिक्त रूप से काम करती है
- डेमो में दिखाए गए सभी तरीके Discord की Terms of Service का उल्लंघन हैं और इनमें account suspension का जोखिम तथा unverified code चलाने से account compromise होने का खतरा मौजूद है
अवलोकन
- रूप बदलने या फीचर जोड़ने वाले कई modded Discord clients मौजूद हैं, और कुछ plugins तो Nitro paid subscription वाले फीचर्स भी अनलॉक कर देते हैं
- client structure के analysis के जरिए यह समझाया गया है कि यह तकनीकी रूप से कैसे संभव होता है
Developer Tools सक्षम करना
- Discord को Electron framework पर बनाया गया है, जो web technologies से cross-platform apps बनाता है, इसलिए यह web browser के भीतर चलने वाली website जैसा है
- मूल रूप से यह एक Chromium window है, इसलिए developer tools खोले जा सकते हैं, लेकिन ये default रूप से disabled रहते हैं
- कई यूज़र्स social engineering के जरिए attackers द्वारा बहकाए जाने पर malicious commands paste कर चुके हैं, जिससे accounts compromise हुए, इसलिए इसे block किया गया
- अगर आप जोखिम समझते हैं, तो
%appdata%/discord/settings.jsonsettings file मेंDANGEROUS_ENABLE_DEVTOOLS_ONLY_ENABLE_IF_YOU_KNOW_WHAT_YOURE_DOINGका मानtrueजोड़कर इसे enable किया जा सकता है- इसके बाद
ctrl + shift + iसे developer console खोली जा सकती है
- इसके बाद
Discord functions को patch करना
- शुरुआती loading optimization के लिए code को कई chunks में बाँटा जाता है और उन्हें parallel या lazy-loaded रूप में लोड किया जाता है, इसके लिए Webpack का code splitting फीचर इस्तेमाल होता है
- सभी loaded chunks
webpackChunkdiscord_appवेरिएबल में स्टोर होते हैं - Discord variables और functions का उपयोग करने वाला code चलाने के लिए इस वेरिएबल में code inject करना पड़ता है
a.cसभी modules को रखने वाला object है, और हर modulechunk_id,loaded,exportsके रूप में बना होता हैexportsमें module से export किए गए functions, objects और primitive values शामिल होते हैं
- कई JavaScript modules में घूमने वाला
findfunction बनाकर किसी खास function को खोजा और call किया जा सकता है- उदाहरण:
getCurrentUser()function को खोजकर call करना
- उदाहरण:
- original function को किसी दूसरे function से replace करके उसके behavior को बदला जा सकता है, यानी सीधे code modification संभव है
High-quality streaming अनलॉक करना
- इस बिंदु के बाद की सामग्री Discord की Terms of Service का स्पष्ट उल्लंघन है और इससे account suspension हो सकता है, इसलिए जोखिम आपको खुद उठाना होगा
- user के subscription tier को जाँचने वाले
canStreamMidQuality,canStreamHighQualityनाम के दो functions screen sharing quality selection screen से ठीक पहले call होते हैं- अगर इन दोनों functions का return value ज़बरदस्ती
trueकर दिया जाए, तो Nitro subscription के बिना भी source resolution 60 FPS screen sharing चुनी जा सकती है
- अगर इन दोनों functions का return value ज़बरदस्ती
- फ़िलहाल ऐसा लगता है कि Discord server पर यह verify नहीं करता कि भेजी जा रही stream वास्तव में non-subscriber limits का पालन कर रही है या नहीं
- हालांकि Discord अभी End-to-End encryption का उपयोग नहीं करता, इसलिए detection की संभावना बनी रहती है
- संदर्भित लेख के अनुसार Discord पहले से ही users के audio और video content की जाँच करता है, और भविष्य में screen sharing से पहले server-side validation जोड़ सकता है
Premium themes अनलॉक करना
- अगर यह बताने वाले
canUseClientThemesfunction का मानtrueकर दिया जाए कि user Nitro themes इस्तेमाल कर सकता है या नहीं, तो premium theme selection button अनलॉक हो जाता है - लेकिन theme थोड़ी देर के लिए apply होकर तुरंत default theme पर वापस चली जाती है
- क्योंकि client theme change को save करने की कोशिश करता है, लेकिन server verify करता है कि इसकी अनुमति नहीं है, और response मिलने पर default theme फिर से apply कर देता है
- अगर
shouldSyncfunction को patch करकेappearancevalue होने परfalsereturn कराया जाए, ताकि केवल appearance settings sync रुक जाए, तो theme change बना रहता है - themes पूरी तरह client side पर manage होती हैं और CSS को सीधे modify करना भी हमेशा संभव है, इसलिए Discord के लिए इसे रोकना मुश्किल है
निष्कर्ष
- डेमो में दिखाए गए hacks को आसानी से लागू करने वाला code मौजूद है, लेकिन client modification या mods इस्तेमाल करने से पहले सावधानी बेहद ज़रूरी है
- Discord Terms of Service का उल्लंघन करने वाले accounts को कभी भी suspend कर सकता है, और account access रखने वाले unverified code को चलाना बहुत खतरनाक है
- लेख में encoded message: "जिस code को आप समझते नहीं हैं, उसे developer console में paste मत करें — account compromise होने का यह सबसे आसान तरीका है"
1 टिप्पणियां
Hacker News की राय
अंत में लगे साधारण base64 encoded blob को चलाने से अगर सारी सुविधाएँ चालू हो जाती हैं, तो यह काफी आसान attack vector बन सकता है, ऐसा लगता है
मेरा मतलब लेखक पर शक करना नहीं था, और अभी decode करके देखा तो मैं फँस गया
base64 --decodeचलाने में आलस है, उनके लिए नतीजा यह है:// Here's a cake if you thought about inspecting the code before executing it:let css = 'font-size: 36px; font-weight: bold; color: red';console.log("%cNEVER paste code you don't understand into the development console.", css);console.log("%cThis is the best way to compromise your account.", css);“फिलहाल Discord सर्वर पर यह verify नहीं करता दिखता कि भेजी जा रही stream सच में non-subscriber वाली limits का पालन कर रही है”, तो सोचता हूँ किसने इसे अच्छी implementation माना होगा
Client-side validation तो सचमुच बहुत basic गलती लगती है
Discord को कई साल इस्तेमाल करते हुए Nitro के access-control structure को bypass करने की कोशिश के बारे में पहली बार सुन रहा हूँ, और अगर यह widespread नहीं है तो खास परवाह करने की वजह भी नहीं दिखती
अलग बात यह है कि इस महीने ही मैंने पाँचवीं नई job शुरू की है, और लगता है project managers से मेरी बिल्कुल नहीं बनती
ऐसे hack को समझने और Nitro के लिए पैसे देने की इच्छा रखने वाले लोग कितने होंगे, पता नहीं। Nitro features में से कुछ या सारे enable करने वाले कई Discord client mods इस्तेमाल करने वाले हजारों, शायद दसियों हजार लोग होंगे, लेकिन इसे रोकने से असल revenue कितना आएगा, यह संदेह है
निजी तौर पर, अगर मुझे वह feature चाहिए या पसंद है तो महीने के 10 डॉलर देना कहीं कम झंझट वाला है। Discord update के साथ टूट जाने वाले mods का पीछा करते रहना, और उम्मीद करना कि maintainer malware न डाल दे, उससे बेहतर लगता है
channel सिर्फ client में छिपे होते हैं। स्पष्ट कर दूँ, फिर भी उस channel के messages की content नहीं देख सकते
voice server सिर्फ API से check करता है कि entry permission है या नहीं, और उसके बाद one-to-many packet broadcaster की तरह काम करता है
यह जिज्ञासु और skilled अर्थ में classic hacker के ज्यादा करीब है
कोई गंभीर नुकसान भी नहीं, और यह फिर याद दिलाता है कि apps जादू नहीं हैं और code cool होता है
ताकि वे बिना resistance के हमसे और ज्यादा पैसे निचोड़ने की कोशिश कर सकें
फिर याद दिला दूँ कि Discord पर भेजी गई हर चीज़, DM समेत, Discord में plaintext में record होती है और Discord तथा उस company को खरीदने वाली entity के लिए accessible हो जाती है
एक समय ऐसा लग रहा था कि Microsoft इसे खरीदेगा, और अब लगता है IPO की तरफ जा रहा है
सिर्फ account होना ही AI के लिए data mining या Discord और database/system admins द्वारा इस्तेमाल की जा सकने वाली निजी बातचीत को normalise कर देता है। FISA Amendments Act के Section 702(FAA702) के तहत federal investigative agencies बिना warrant भी ऐसे data तक access कर सकती हैं
केवल cryptocurrency front-running की संभावना ही रोज़ाना करोड़ों डॉलर की value रखती होगी
अगर आप दोस्त हैं तो दोस्त को end-to-end encrypted न होने वाला chat system इस्तेमाल करने की सलाह नहीं देनी चाहिए। जाल में रखे शहद मत बनो
अगर आप उन कुछ services में से किसी का इस्तेमाल नहीं कर रहे जो user-managed keys वाला असली zero trust model implement करती हैं, तो यह स्वाभाविक है। messages store करने की वजह यह है कि users बाद में उन्हें access कर सकें
Matrix जैसी services भी हैं जो end-to-end encrypted group messaging को अपेक्षाकृत friendly तरीके से कर लेती हैं, लेकिन वे exceptions हैं। electronic communication platforms के 95% ने जो तरीका अपनाया है वही अपनाने के लिए सिर्फ Discord को खास तौर पर malicious कहना fair नहीं है
इसका मतलब यह नहीं कि यह अच्छा है, लेकिन कुछ communities में भाग न लेने के अलावा कोई विकल्प नहीं है
यह पुराने “हर कोई WhatsApp इस्तेमाल करता है” से भी खराब है। तब आपके पास सामने वाले का number होता था, इसलिए दूसरे तरीके से contact करना आसान था, लेकिन Discord का आकर्षण निजी बातचीत नहीं, बल्कि semi-public spaces वाली communities हैं। यहाँ public का मतलब सबके लिए open नहीं, बल्कि लगभग 100 लोग पढ़ते हैं जैसा है
message delete करने पर वह database में आगे store नहीं रहता
हाल ही में OpenAI ने beta testers वाला Discord अचानक disable कर दिया, जिससे हम अब यह नहीं देख पा रहे कि हमने किसके साथ क्या discuss किया था
सोच रहा था कि क्या chat export करने का कोई तरीका है ताकि server admins logs खंगालने का रास्ता छोड़े बिना community को आपस में कटने न दें
Discord chats export करने वाले Chrome extensions काफी हैं, लेकिन लगता है उनमें से ज्यादातर ने कुछ features paid lock के पीछे रखे हैं
पता चला कि Chrome folder से extension source copy करके JavaScript में
is_proजैसे boolean checks बदलना और फिर unpacked extension के रूप में reload करना बहुत आसान थायह API को non-standard तरीके से इस्तेमाल करने वाला standalone program है, लेकिन लगता है इसे इस्तेमाल करने की वजह से किसी के ban होने का मामला अभी तक नहीं देखा
सही warning तो देते हैं कि ऐसे tricks इस्तेमाल करने पर ban हो सकते हैं, लेकिन क्या Discord ने कभी इस तरह की चीज़ के लिए users को ban किया है?
alternative clients इस्तेमाल करना भी रोकता है। अगर account important है तो Discord से छेड़छाड़ न करना बेहतर है
“Client modifications are against Discord’s Terms of Service.”
हालांकि Discord इस पर काफी indifferent है, और client mod इस्तेमाल करने की वजह से ban हुए known cases नहीं हैं। इसलिए अगर abuse behavior implement करने वाले plugins नहीं इस्तेमाल करते, तो आम तौर पर ठीक रहना चाहिए। चिंता न करने की बात यह है कि built-in plugins सब safe बताए जाते हैं
कुछ themes का इस तरह enable होना समझ आता है, लेकिन streaming quality को server-side की बजाय client-side check से तय कराना काफी समझ से बाहर है
actual video तक access की जरूरत भी नहीं, और वह पूरी तरह encrypted हो तब भी भेजे गए data की मात्रा देखकर पता चल सकता है कि किस quality में stream हो रही है
frontend engineering का golden rule फिर सही साबित हुआ
“कभी भी, कभी भी client पर भरोसा मत करो”
जब से देखा कि इसे सिर्फ client-side से handle किया जा सकता है, तब से developer tools और 1080p60 streaming button on करके इस्तेमाल कर रहा हूँ, और यह सच में काम करता है
कितने साल हो गए पता नहीं, लेकिन लगता है Discord की तरफ से कोई परवाह नहीं करता
पहले इस रास्ते पर जाने की कोशिश की थी, लेकिन खासकर updates के बाद client को consistently patch करने का तरीका नहीं मिला, इसलिए आखिरकार छोड़ दिया
लेकिन यह तरीका देखकर फिर “खोलकर poke करने” की इच्छा हो रही है
इस तरीके से available APIs को scan करने का कोई आसान तरीका है क्या? मैंने सब log करने की कोशिश की थी, लेकिन maps, internationalization वगैरह की वजह से बहुत mess था। सोच रहा हूँ क्या किसी ने मेहनत करके reverse engineering docs जैसा कुछ बना रखा है