X, Vercel, Cursor, Discord जैसी सैकड़ों कंपनियों में supply chain attack के ज़रिए घुसपैठ कैसे की गई
(gist.github.com/hackermondev)- 16 वर्षीय एक हाई स्कूल छात्र ने Mintlify प्लेटफ़ॉर्म की एक कमजोरी का उपयोग करके X, Vercel, Cursor, Discord जैसी प्रमुख कंपनियों की documentation sites पर cross-site scripting (XSS) हमला संभव होने की घटना को संकलित कर सार्वजनिक किया। इस कमजोरी के ज़रिए उसे bug bounty में 11,000 डॉलर मिले
- Mintlify का आंतरिक पथ
/_mintlify/static/[subdomain]/[...route]ऐसी संरचना में था जहाँ domain validation के बिना बाहरी फ़ाइलें लोड की जा सकती थीं - हमलावर SVG फ़ाइल में JavaScript इंजेक्ट करके Discord जैसे प्रमुख service domains पर malicious script चला सकता था
- इस कमजोरी का असर Mintlify इस्तेमाल करने वाले लगभग सभी ग्राहकों पर पड़ा, और केवल एक लिंक क्लिक से account takeover संभव था
- इस घटना को ऐसे उदाहरण के रूप में देखा गया जिसमें supply chain security की एकल कमजोरी बड़े पैमाने पर नुकसान का कारण बन सकती है
Discord में खोज
- 2025 के नवंबर में Discord के AI-आधारित documentation platform Mintlify पर जाने के बाद कमजोरी की खोज शुरू हुई
- मौजूदा custom platform से Mintlify पर migration के तुरंत बाद, शोधकर्ता ने नए documentation system की संरचना का विश्लेषण किया
- Discord का documentation domain (
discord.mintlify.app) Mintlify के आंतरिक पथ (/_mintlify/*) को जस का तस expose कर रहा था- authentication जैसी प्रमुख कार्यक्षमताओं के लिए इस पथ तक पहुँचना अनिवार्य था
Mintlify प्लेटफ़ॉर्म की संरचना
- Mintlify एक ऐसी सेवा है जो Markdown-आधारित documentation writing को सपोर्ट करती है और उसे अपने-आप web documentation में बदल देती है
- सभी documentation sites
*.mintlify.appsubdomain या custom domains पर चलती थीं - आंतरिक रूप से यह
/_mintlify/api/user,/_mintlify/markdown/,/_mintlify/static/जैसे endpoints का उपयोग करती थी
कमजोरी की खोज की प्रक्रिया
- पाया गया कि
/_mintlify/_markdown/_sites/[subdomain]/[...route]endpoint domain validation के बिना दूसरे documentation की फ़ाइलें लौटाता है- हालांकि, यह पथ केवल unrendered Markdown text लौटाता था, इसलिए code execution संभव नहीं था
- इसके बाद Mintlify CLI package का विश्लेषण करके
/_mintlify/static/[subdomain]/[...route]endpoint अतिरिक्त रूप से खोजा गया- यह पथ static files लौटाता था और file extension whitelist लागू करता था
- HTML और JS फ़ाइलें ब्लॉक थीं, लेकिन SVG फ़ाइलें अनुमति प्राप्त थीं
हमले का क्रियान्वयन
- हमलावर ने JavaScript डाली हुई SVG फ़ाइल अपनी Mintlify documentation में upload की
- Discord domain पर उस फ़ाइल को कॉल करने पर (
https://discord.com/_mintlify/_static/.../lmao.svg) script execute हो जाती थी - इसके ज़रिए केवल Discord ही नहीं, बल्कि Mintlify का उपयोग करने वाली हर कंपनी के documentation domain पर XSS चलाया जा सकता था
सहयोग और रिपोर्टिंग
- शोधकर्ता ने अन्य security researchers के साथ मिलकर कमजोरी की पुष्टि की
- रिपोर्ट मिलते ही Discord ने पूरे developer documentation को 2 घंटे के लिए disable किया, और बाद में पुराने platform पर वापस लौट गया
- संबंधित कार्रवाई Discord Status page पर दर्ज है
- Mintlify ने Discord के माध्यम से कमजोरी की जानकारी मिलने के बाद, engineering team और researchers के बीच एक Slack channel खोला और तुरंत सुधार कार्य शुरू किया
प्रभाव का दायरा
- X(Twitter), Vercel, Cursor, Discord सहित Mintlify के अधिकांश ग्राहक प्रभावित दायरे में थे
- हर कंपनी के आधिकारिक domain पर एक malicious link से account takeover की संभावना मौजूद थी
- supply chain की एकल कमजोरी सैकड़ों कंपनियों की security में श्रृंखलाबद्ध जोखिम पैदा कर सकती है
इनाम और निष्कर्ष
- शोध टीम को कुल मिलाकर लगभग 11,000 डॉलर का bug bounty मिला
- Discord ने 4,000 डॉलर दिए, और Mintlify ने अलग-अलग कमजोरियों के लिए अतिरिक्त इनाम दिया
- यह मामला supply chain security के महत्व और एकल platform कमजोरी के व्यापक प्रभाव को दिखाने वाला एक प्रतिनिधि उदाहरण बन गया
1 टिप्पणियां
Hacker News की राय
यह exploit वाकई बहुत डरावना मामला है
अगर सिर्फ एक लिंक पर भी क्लिक कर दिया जाए, जैसे https://discord.com/_mintlify/static/evil/exploit.svg, तो Discord डोमेन पर JavaScript चल सकता है
इसके नतीजे में session cookie या token चोरी हो सकते हैं, अकाउंट पूरी तरह से takeover हो सकता है, developer app या webhook के साथ छेड़छाड़ की जा सकती है, या API के जरिए server delete किया जा सकता है या payment info का इस्तेमाल करके Nitro खरीदा जा सकता है
इस नुकसान के पैमाने को देखते हुए $4,000 की bug bounty बहुत कम इनाम लगती है
अगर session cookie हमेशा HTTP-only रखी जाए, तो ऐसे हमलों के खिलाफ काफी ज्यादा मजबूती मिलती है
हैरानी होती है कि बहुत से frontend developers को security की ये बुनियादी बातें नहीं पता होतीं
black market में इसकी कीमत शायद इससे कहीं ज्यादा होती
मुझे लगता है कि SVG फ़ाइल में script डाल पाना अपने-आप में ही security की गलती थी
interactive demo या game को सिर्फ एक SVG में बनाना शानदार लग सकता है, लेकिन उतना ही यह vulnerabilities का अड्डा भी बन जाता है
इसी वजह से कई platforms SVG upload को मना करते हैं या preview block कर देते हैं
Discord में भी SVG अपलोड करने पर code जैसा-का-तैसा दिखता है, और Facebook Messenger या WeChat जैसी सेवाओं में इसे share भी नहीं किया जा सकता
file size छोटा होने और resolution-independent होने के फायदे के बावजूद, आज भी raster image format ज्यादा व्यापक रूप से इस्तेमाल होते हैं, यह थोड़ा अफसोसजनक है
Rails का Active Storage डिफ़ॉल्ट रूप से SVG को sanitize नहीं करता, इसलिए सावधान रहना चाहिए
संबंधित जानकारी के लिए OWASP दस्तावेज़ देखें
<script>tag को ignore कर दे तो समस्या हल हो जाएगी, यह सवाल उठता हैलेकिन शायद सिर्फ इतना काफी न हो
raster format में यह समस्या लगभग नहीं के बराबर है
यह घटना आजकल के AI startup ecosystem की एक झलक दिखाती है
VC फंडिंग से बढ़ा एक AI documentation startup, बिना पर्याप्त security verification के बड़े customers हासिल कर लेता है, और नतीजतन लाखों लोग जोखिम में आ जाते हैं
Mintlify ने कुछ समय पहले जटिल caching architecture पर गर्व करते हुए एक blog लिखा था, लेकिन हकीकत में लगता है कि उसे basic security की भी समझ नहीं है
और ऐसी स्थिति में vulnerability ढूँढने वाले को सिर्फ $5,000 मिलते हैं
यह मामला दिखाता है कि आज की AI-आधारित development culture कितनी कमजोर हो सकती है
जटिल dependency chain और कई third-party DLL जैसी अव्यवस्थित संरचना इसकी जड़ में है
अगर Discord अपने API docs को discord.com से सीधे serve न करता, तो शायद यह समस्या ही नहीं होती
क्या सिर्फ CDN ही काफी नहीं होना चाहिए?
यह ऐसा bug है जिससे customer account पूरी तरह takeover किया जा सकता है, फिर भी reward amount बहुत कम है
आज के समय में XSS की अनुमति देने का कोई कारण नहीं होना चाहिए
Anubis में भी इस साल दो reflected XSS मिले थे
third-party dependencies की जाँच ज़रूर करनी चाहिए
संबंधित security advisory यहाँ और यहाँ देखी जा सकती है
क्योंकि बड़े social network जैसे प्लेटफ़ॉर्म न हों, तो इससे सीधे पैसे कमाना मुश्किल होता है
मन में आता है कि ऐसी vulnerability ढूँढने वाले 16 साल के hacker को full-time या part-time रखकर लगातार security review क्यों न कराया जाए
सालाना $50,000 देकर भी शायद कंपनी की security में बहुत बड़ा सुधार किया जा सकता है
bug bounty नतीजे के आधार पर भुगतान करती है, इसलिए वह ज्यादा efficient हो सकती है
हाँ, अगर reward कम हो तो researcher के मन में उसे किसी तीसरे पक्ष को बेचने का लालच आ सकता है
कोई XSS में, कोई IAM में, कोई shell exploit में माहिर होता है, इसलिए एक व्यक्ति से सब कुछ कवर कराना मुश्किल है
16 साल की उम्र में यह ढूँढ लेना सचमुच कमाल है
लेकिन XSS को supply chain attack कहना थोड़ा अपरिचित लगता है
अगर Mintlify जैसे बीच के स्तर पर समस्या आ जाए, तो अंतिम उपयोगकर्ता के पास कोई बचाव नहीं बचता
trusted chain के भीतर malicious code पहुँच रहा है, इसलिए इसे एक तरह का supply-chain स्तर का XSS भी कहा जा सकता है
सहयोगी की रिपोर्ट में इससे भी ज्यादा गंभीर RCE vulnerability शामिल है
विस्तार से यह blog देखें
ऐसे मामलों को देखकर लगता है कि,
1️⃣ Content Security Policy(CSP) ज़रूर सेट करनी चाहिए
2️⃣ NodeJS server पर
--disallow-code-generation-from-stringsoption डिफ़ॉल्ट रूप से इस्तेमाल होना चाहिएVercel जैसे service providers को CSP इस्तेमाल न होने पर warning दिखानी चाहिए
NodeJS security flags के बारे में अतिरिक्त जानकारी इस लेख में दी गई है
user authentication वाले main domain से third-party service को proxy करना सबसे खराब विकल्प है
Mintlify को dev-docs.discord.com जैसे अलग subdomain में अलग किया जाना चाहिए था
ग्राहक चाहें तब भी security risk बहुत ज्यादा है
हाँ, SEO की वजह से main domain पर docs रखने की माँग काफी रहती है
Mintlify के नज़रिए से देखें तो यह घटना उसके लिए बहुत तनावपूर्ण रही होगी
third-party के लिए अलग subdomain इस्तेमाल करना चाहिए, और main app की auth cookies को host-only तक सीमित रखना चाहिए
अगर संभव हो, तो पूरी तरह अलग domain (जैसे discorddocs.com) इस्तेमाल करना और भी सुरक्षित है
लेकिन security risk की तुलना में यह बहुत खतरनाक समझौता है
अब तो SVG फ़ाइल कभी नहीं खोलूँगा
16 साल की उम्र में यह ढूँढ लेना सच में दंतकथा जैसा है