9 पॉइंट द्वारा GN⁺ 2025-12-19 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • 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.app subdomain या 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 टिप्पणियां

 
GN⁺ 2025-12-19
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 बहुत कम इनाम लगती है

    • cookie या token चुराने के लिए HTTP-only न होने वाली cookie या localStorage में token होना चाहिए, तो यह जानना दिलचस्प है कि क्या Discord की संरचना ऐसी ही है
      अगर session cookie हमेशा HTTP-only रखी जाए, तो ऐसे हमलों के खिलाफ काफी ज्यादा मजबूती मिलती है
      हैरानी होती है कि बहुत से frontend developers को security की ये बुनियादी बातें नहीं पता होतीं
    • “$4,000 बहुत कम है” वाली बात से सहमत हूँ
      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 ज्यादा व्यापक रूप से इस्तेमाल होते हैं, यह थोड़ा अफसोसजनक है

    • सभी SVG को upload करते समय और render करते समय अच्छी तरह sanitize किया जाना चाहिए
      Rails का Active Storage डिफ़ॉल्ट रूप से SVG को sanitize नहीं करता, इसलिए सावधान रहना चाहिए
    • XML External Entity (XXE) समस्या भी ऐसा ही एक मामला था
      संबंधित जानकारी के लिए OWASP दस्तावेज़ देखें
    • क्या messenger app अगर सिर्फ <script> tag को ignore कर दे तो समस्या हल हो जाएगी, यह सवाल उठता है
      लेकिन शायद सिर्फ इतना काफी न हो
    • यह स्थिति Flash दौर के security bugs की याद दिलाती है
    • SVG की एक और बड़ी समस्या यह है कि rendering का नतीजा हर software में अलग हो सकता है
      raster format में यह समस्या लगभग नहीं के बराबर है
  • यह घटना आजकल के AI startup ecosystem की एक झलक दिखाती है
    VC फंडिंग से बढ़ा एक AI documentation startup, बिना पर्याप्त security verification के बड़े customers हासिल कर लेता है, और नतीजतन लाखों लोग जोखिम में आ जाते हैं
    Mintlify ने कुछ समय पहले जटिल caching architecture पर गर्व करते हुए एक blog लिखा था, लेकिन हकीकत में लगता है कि उसे basic security की भी समझ नहीं है
    और ऐसी स्थिति में vulnerability ढूँढने वाले को सिर्फ $5,000 मिलते हैं
    यह मामला दिखाता है कि आज की AI-आधारित development culture कितनी कमजोर हो सकती है

    • दरअसल ऐसे हमलों के प्रति कमजोर सिर्फ AI startups नहीं हैं, बल्कि यह पूरे JavaScript ecosystem की संरचनात्मक समस्या है
      जटिल dependency chain और कई third-party DLL जैसी अव्यवस्थित संरचना इसकी जड़ में है
    • ज़्यादातर XSS की जड़ single-domain structure होती है
      अगर Discord अपने API docs को discord.com से सीधे serve न करता, तो शायद यह समस्या ही नहीं होती
    • docs site के लिए इतनी जटिल caching structure की ज़रूरत क्यों है, यह सवाल उठता है
      क्या सिर्फ CDN ही काफी नहीं होना चाहिए?
  • यह ऐसा bug है जिससे customer account पूरी तरह takeover किया जा सकता है, फिर भी reward amount बहुत कम है
    आज के समय में XSS की अनुमति देने का कोई कारण नहीं होना चाहिए

    • XSS अब भी खत्म नहीं हुआ है, और CSP या Trusted Types जैसे बचाव भी पूरी तरह परफेक्ट नहीं हैं
      Anubis में भी इस साल दो reflected XSS मिले थे
      third-party dependencies की जाँच ज़रूर करनी चाहिए
      संबंधित security advisory यहाँ और यहाँ देखी जा सकती है
    • आम तौर पर XSS vulnerabilities की market value लगभग नहीं के बराबर होती है
      क्योंकि बड़े social network जैसे प्लेटफ़ॉर्म न हों, तो इससे सीधे पैसे कमाना मुश्किल होता है
  • मन में आता है कि ऐसी vulnerability ढूँढने वाले 16 साल के hacker को full-time या part-time रखकर लगातार security review क्यों न कराया जाए
    सालाना $50,000 देकर भी शायद कंपनी की security में बहुत बड़ा सुधार किया जा सकता है

    • लेकिन researcher पर performance pressure डालने वाला contract structure ठीक नहीं होगा
      bug bounty नतीजे के आधार पर भुगतान करती है, इसलिए वह ज्यादा efficient हो सकती है
      हाँ, अगर reward कम हो तो researcher के मन में उसे किसी तीसरे पक्ष को बेचने का लालच आ सकता है
    • ज़्यादातर bug bounty participants के specialization अलग-अलग होते हैं
      कोई XSS में, कोई IAM में, कोई shell exploit में माहिर होता है, इसलिए एक व्यक्ति से सब कुछ कवर कराना मुश्किल है
    • सच कहें तो ऐसी कंपनियों को security में बहुत ज्यादा दिलचस्पी नहीं होती
  • 16 साल की उम्र में यह ढूँढ लेना सचमुच कमाल है
    लेकिन XSS को supply chain attack कहना थोड़ा अपरिचित लगता है

    • शब्दों का इस्तेमाल थोड़ा गलत लग सकता है, लेकिन उम्र कम है तो समझा जा सकता है
    • फिर भी supply chain के नज़रिए से देखें तो इसमें तर्क है
      अगर Mintlify जैसे बीच के स्तर पर समस्या आ जाए, तो अंतिम उपयोगकर्ता के पास कोई बचाव नहीं बचता
      trusted chain के भीतर malicious code पहुँच रहा है, इसलिए इसे एक तरह का supply-chain स्तर का XSS भी कहा जा सकता है
  • सहयोगी की रिपोर्ट में इससे भी ज्यादा गंभीर RCE vulnerability शामिल है
    विस्तार से यह blog देखें

  • ऐसे मामलों को देखकर लगता है कि,
    1️⃣ Content Security Policy(CSP) ज़रूर सेट करनी चाहिए
    2️⃣ NodeJS server पर --disallow-code-generation-from-strings option डिफ़ॉल्ट रूप से इस्तेमाल होना चाहिए
    Vercel जैसे service providers को CSP इस्तेमाल न होने पर warning दिखानी चाहिए
    NodeJS security flags के बारे में अतिरिक्त जानकारी इस लेख में दी गई है

  • user authentication वाले main domain से third-party service को proxy करना सबसे खराब विकल्प है
    Mintlify को dev-docs.discord.com जैसे अलग subdomain में अलग किया जाना चाहिए था

    • मैं भी Mintlify जैसा एक product चलाता हूँ, लेकिन codebase access या Git integration सपोर्ट नहीं करता
      ग्राहक चाहें तब भी security risk बहुत ज्यादा है
      हाँ, SEO की वजह से main domain पर docs रखने की माँग काफी रहती है
      Mintlify के नज़रिए से देखें तो यह घटना उसके लिए बहुत तनावपूर्ण रही होगी
    • ऐसी vulnerability का असली मुद्दा domain separation की विफलता है
      third-party के लिए अलग subdomain इस्तेमाल करना चाहिए, और main app की auth cookies को host-only तक सीमित रखना चाहिए
      अगर संभव हो, तो पूरी तरह अलग domain (जैसे discorddocs.com) इस्तेमाल करना और भी सुरक्षित है
    • कंपनियाँ docs site को main domain पर इसलिए रखती हैं ताकि code examples में असली API keys को अपने-आप insert किया जा सके
      लेकिन security risk की तुलना में यह बहुत खतरनाक समझौता है
  • अब तो SVG फ़ाइल कभी नहीं खोलूँगा
    16 साल की उम्र में यह ढूँढ लेना सच में दंतकथा जैसा है

    • फिर भी अगर खोलना पड़े, तो सिर्फ sandboxed browser environment में ही खोलना चाहिए