Chess.com में XSS की खोज
- शौक के तौर पर शतरंज खेलते हुए और तकनीक के साथ प्रयोग करते समय, Chess.com में एक XSS vulnerability मिली।
- Chess.com इंटरनेट पर सबसे बड़ी chess site है, जिसके 100 मिलियन से अधिक सदस्य हैं।
अवलोकन
- 2023 की शुरुआत में Chess.com पर काफी समय बिताना शुरू किया।
- एक दोस्त को साइट पर साइन अप कराया और friend feature का उपयोग करके तुरंत दोस्त बन गया।
- यह जिज्ञासा हुई कि क्या MySpace worm जैसी शैली में automatic friend add संभव है।
- एक नया account बनाया और developer tools के network tab में automatic friend add URL खोज लिया।
मिडल गेम
- TinyMCE rich text editor का उपयोग करके XSS आज़माया गया।
- Burp proxy का उपयोग करके 'About' विवरण में सीधे HTML code inject किया गया।
- TinyMCE settings की जांच की और
background-imagestyle property का उपयोग करके XSS payload बनाया। - कई symbols को test करके XSS execute कराने का तरीका खोज निकाला।
- अंततः cookies और JavaScript objects को निकाल सकने वाला तरीका विकसित किया।
एंडगेम
- XSS को पूरी तरह execute करने की कोशिश की गई।
srcsetattribute का उपयोग करके एक नया तरीका मिला, जिससे अधिक व्यापक JS syntax इस्तेमाल किया जा सका।- Base64 encoding का उपयोग करके XSS payload को सीधे execute किया गया।
- TinyMCE editor पूरे site में इस्तेमाल हो रहा था, इसलिए इसका प्रभाव बड़ा था।
विश्लेषण
- vulnerability का मूल कारण image re-upload feature था।
- Chess.com के domain name को शामिल करके image hosting checks को bypass किया जा सकता था।
- rich text editor कई तरह के HTML elements की अनुमति देता है, इसलिए XSS हासिल करने के लिए यह अनुकूल था।
- TinyMCE latest था, लेकिन final HTML पर sanitization नहीं हो रही थी।
- Chess.com को users को दिखाए जाने वाले final HTML पर sanitization करनी चाहिए।
GN⁺ की राय:
- यह blog post Chess.com जैसे बड़े online platform पर उत्पन्न हो सकने वाली security vulnerabilities को खोजने और रिपोर्ट करने की प्रक्रिया को रोचक ढंग से समझाती है।
- XSS vulnerabilities वेबसाइट सुरक्षा के लिए गंभीर खतरा बन सकती हैं, और इन्हें ढूंढना व ठीक करना वेबसाइट users की privacy की रक्षा के लिए बहुत महत्वपूर्ण है।
- यह लेख software developers और security professionals के लिए rich text editor जैसे web application components की vulnerabilities को पहचानने और उन्हें रोकने के महत्व पर जोर देता है।
1 टिप्पणियां
Hacker News टिप्पणियाँ
मैं OP हूँ। सकारात्मक comments के लिए बहुत धन्यवाद। थोड़ा background दूँ तो, मैं UK में A-Levels की तैयारी कर रहा 17 साल का student हूँ, और अभी यह सोच रहा हूँ कि किस university में जाऊँ और degree apprenticeship के options क्या हों
मेरा GitHub profile यहाँ देख सकते हैं -> https://github.com/Jayy001
मैं HashPals के core members में से एक हूँ, Search-That-Hash बनाया है, और ReMarkable tablet के लिए free software open-source repository का maintainer भी हूँ
अगर और बात करनी हो तो संपर्क कर सकते हो; email मेरे profile description में है
और अगर IT में जा रहे हैं, तो contract negotiation और finance भी ज़रूर सीखना चाहिए
जब मेरा internet experience बस Chess.com पर “volunteer librarian” के रूप में हर बार हारने तक सीमित था, तब मैं live Chess.com games में अजीब तरह से escaped characters, closing tags, common control strings, यहाँ तक कि OLE objects भी inject किया करता था
Founder Eric ने शालीनता से ज़्यादा formal audit का अनुरोध किया, लेकिन मैं यह उजागर नहीं करना चाहता था कि मैं 11 साल का script kiddie हूँ, इसलिए मना कर दिया। इसके बजाय मैंने chatroom moderation के लिए ज़रूरी regex समझाया, और asynchronous environment में cheating कैसे detect करें—इस बड़े problem पर भी साथ में चर्चा की
काफी सोचने के बाद मैंने कहा कि संभवतः एकमात्र तरीका यह है कि हर game में महत्वपूर्ण high-value moves की तुलना engine के known best moves से की जाए, और statistical inference से अच्छे human players और cheaters में फर्क किया जाए
बेशक उस समय यह बेहद असंभव तरीका था, और निष्कर्ष भी यही निकला। फिर भी, primary school से अभी-अभी निकले एक बच्चे का किसी असली webmaster के साथ ऐसे nuanced विषय पर चर्चा करना मेरी अच्छी internet memories में से एक है
“इस feature ने मुझे 2005 के आसपास के MySpace worm की याद दिलाई, जबकि मैं तब पैदा भी नहीं हुआ था!”—इस हिस्से ने रोज़ बूढ़ा होने का एहसास करा दिया
Users को site में HTML डालने की अनुमति देने की ज़िद एक बहुत बड़ा problem थी। आजकल तो HTML input को ठीक से parse करके forbidden attributes और tags हटा दिए जाते, लेकिन उस समय इसे regex की पागलपन-भरी gymnastics से handle किया जाता था
पता नहीं relevant है या नहीं, लेकिन मैंने Chess.com game में किसी और को मेरी चाल मेरी जगह चलते हुए खुद देखा और record भी किया है। कभी-कभी ongoing game मेरे सामने खुल जाती थी, और ऐसी स्थिति में भी move कर पाता था जहाँ normally मुझे move करने की अनुमति नहीं होनी चाहिए थी
Google करने पर इससे जुड़े काफी threads मिलते हैं। पता नहीं Chess.com ने पिछले कुछ महीनों में इसे fix किया है या नहीं, लेकिन जब मैंने report करने की कोशिश की थी तो वे सुनना नहीं चाहते थे
ये सभी games site में login किए बिना हुए थे। Login रहते हुए मैंने ऐसा कभी नहीं देखा, लेकिन chess blood pressure के लिए अच्छा नहीं है इसलिए मैं अक्सर नहीं खेलता
Title देखकर लगा था कि content कहीं ज़्यादा beginner-level होगा, लेकिन असल में इसने कई layers की input validation को clever bypasses से पार करने वाला exploit बनाया। Primary domain जैसा दिखाने के लिए subdomain तक set किया गया
मुझे उम्मीद नहीं थी कि यह काम करेगा, और यही अपने-आप में interesting था। Domain को regex से parse करना कितना complex है, यह सोचें तो ऐसी चीज़ miss होना आसान लगता है। या शायद यह बस variable के अंदर
'...'check करने जैसा simple रहा होAuthor अपने field को अच्छी तरह जानता है। इस level की skill के लिए उन्होंने कितने समय तक गहराई से काम किया होगा, यह देखकर प्रभावित हूँ। काफी interesting career बनने वाला लगता है
अच्छा write-up है, OP। आपकी hacking journey भी अच्छी तरह जारी रहे। अगर अभी तक नहीं पता, तो
alert(1)जैसे payloads में जब parentheses filter या encode हो जाते हैं, तब backticks इस्तेमाल करकेalert\1`` try कर सकते हैंअगर JavaScript injection को अगले level पर ले जाना चाहते हैं, तो Brute Logic की XSS cheatsheet और Gareth Heyes की Javascript for Hackers अच्छे resources हैं। कुछ लोग cross-site scripting को हल्के में लेते हैं, लेकिन यह अब भी बहुत powerful और widespread है। खासकर, जैसा plugin-baby ने बताया, अगर session cookies पर HttpOnly नहीं लगा है तो और भी ज़्यादा
बहुत शानदार। Bug bounty analysis posts, खासकर XSS वाली, पढ़ना मुझे पसंद है। वे हमेशा खोजने में आसान लगती हैं, लेकिन वह सिर्फ confirmation bias है; असल में मैं उन tests और detours में लगा समय नहीं देख पाता जिनसे कोई result नहीं मिला होगा
“इस feature ने मुझे 2005 के आसपास के MySpace worm की याद दिलाई, जबकि मैं तब पैदा भी नहीं हुआ था!”—इस हिस्से ने तुरंत बूढ़ा महसूस करा दिया
इस incident के बारे में OP से मैं पूछना चाहूँगा कि उसे इसके बारे में पता कैसे चला। क्या Darknet Diaries से, या किसी और रास्ते से?
Rich text editor को “holy grail” कहना मज़ेदार लगा। Chess.com एक बड़ी website है, लेकिन पुराने forums जैसी जगहों पर जब भी ऐसे editors या ज़रूरत से ज़्यादा fancy features दिखते हैं, तो सोचता हूँ कि कहीं site छेदों से भरी तो नहीं। खैर, बेहतरीन write-up है
“Bug bounty report और review के दौरान, जब मैंने फिर से reproduce करने की कोशिश की, तो developers ने blocking implement करने की कोशिश की और यह error message दिखा…”—यह हिस्सा bug bounty program के उद्देश्य से काफी दूर लगता है