Draw A Fish ! पोस्टमार्टम
(aldenhallak.com)- 3 अगस्त 2025 DrawAFish! वेबसाइट पर लगभग 6 घंटे तक एक बड़ा सुरक्षा उल्लंघन हुआ
- एडमिन पासवर्ड लीक, बिना authentication वाला API और JWT कमजोरी जैसी मुख्य सुरक्षा कमजोरियाँ हमले के लिए खुल गईं
- नतीजतन सभी यूज़रनेम अपमानजनक शब्दों में बदल दिए गए, अनुचित चित्रों को approve किया गया और साथ ही पहले से मौजूद सुरक्षित चित्र हट गए
- मैनुअल रिकवरी, authentication लॉजिक में सुधार और बैकअप की पुष्टि जैसी कार्रवाइयों से समस्या का समाधान किया गया
- मुख्य सबक यह था कि तेज़ डेवलपमेंट (“vibe-coding”) और टेस्टिंग व कोड रिव्यू की कमी सुरक्षा पर गंभीर परिणाम ला सकती है
DrawAFish.com का अवलोकन और 3 अगस्त 2025 की घटना का संक्षिप्त विवरण
- DrawAFish.com वह वेबसाइट है जहाँ यूज़र खुद मछली बनाते हैं और अन्य यूज़र्स के साथ उसे एक टैंक में तैराते हैं
- 1 अगस्त 2025 को यह साइट Hacker News की शीर्ष सूची में नंबर 1 पर पहुँची और काफी ध्यान आकर्षित किया। डेवेलपर ने Copilot जैसे टूल्स से फीचर जल्दी बनाने के लिए ‘vibe-coding’ अपनाया
- लेकिन 3 अगस्त 2025 की सुबह एक गंभीर सुरक्षा घटना हुई
- करीब 6 घंटे तक सभी यूज़रनेम गंदी/अपमानजनक भाषा में बदल दिए गए और अनुचित चित्र approve हो गए, जिससे अराजक स्थिति बन गई
- अंततः एडमिन ने मैन्युअली rollback करके स्थिति ठीक की
कमजोरियों का विस्तृत विश्लेषण
1. पहले लीक हो चुका 6-अंकों वाला एडमिन पासवर्ड
- डेवेलपर ने शुरुआत में अपना बचपन वाला ID और पासवर्ड (6 अंकों का) एडमिन अकाउंट में सेट कर दिया था
- यह पासवर्ड पहले ही Neopets जैसी साइटों की डेटा लीक के कारण ऑनलाइन सार्वजनिक हो चुका था
- बाद में उसने Google Auth लगाया, लेकिन पुराने पासवर्ड को हटाया नहीं, जिससे attacker के लिए vulnerability बनी रही
- attacker ने लीक हुए डेटा का इस्तेमाल कर एडमिन authentication सफलतापूर्वक पास कर ली और abusive actions कीं, जैसे अपमानजनक चित्रों की approval और सामान्य चित्र हटाना
2. बिना authentication वाला यूज़रनेम बदलने वाला API
- प्रोफाइल बैकएंड बनाते समय तेज़ डेवलपमेंट के लिए authentication check के बिना यूज़रनेम-चेंज API implement किया गया
- व्यवहार में कोई भी किसी का भी यूज़रनेम बदल सकता था
3. JWT सत्यापन की कमी
- JWT token-based authentication में token तथा userId/email के match बिना एडमिन ऑपरेशन संभव थे
- यानी attacker के पास अगर सिर्फ़ एडमिन क्रेडेंशियल से issued token हो तो वह किसी भी request पर एडमिन अधिकार से काम कर सकता था
- रोचक यह रहा कि एक Hacker News यूज़र ने इसी कमजोरी का उपयोग करके घुसपैठिए से पहले कुछ अनुचित सामग्री हटाई और आपातकालीन response में मदद की
रिकवरी प्रक्रिया
- डेवेलपर ने सुबह लगभग 7:45 बजे स्थिति बिगड़ने का एहसास होते ही तुरंत डेस्कटॉप से response शुरू किया
- Firebase backup सेट नहीं था, इसलिए बैकअप पर निर्भर नहीं रहा जा सका; कोड में तुरंत patch करके authentication को mandatory कर दिया गया
- सभी moderation logs को ट्रैक कर malicious actions को undo करने के लिए script बनाई गई (यह भी vibe-coding तरीके से लिखी गई)
- आपात स्थिति में एडमिन privilege वाले तीसरे पक्ष (Hacker News यूज़र) के access account को भी block करने के बाद उससे संपर्क कर codebase की security refactoring पर feedback ली और अतिरिक्त patches जारी किए
विकास संस्कृति और सबक
- डेवेलपर ने अनुभव किया कि “vibe-coding” यानी तेज़ prototyping और minimal review culture मज़ेदार और high productivity दे सकता है, लेकिन वास्तविक दुनिया में यह गंभीर security vulnerabilities भी पैदा कर सकता है
- LLM (Copilot) जल्दी code generate करने में बहुत उपयोगी है, लेकिन code quality और security की जिम्मेदारी फिर भी डेवेलपर की ही होती है
- टेस्टिंग, authentication लॉजिक और code review जैसी बेसिक सुरक्षा प्रक्रियाओं को छोड़ने पर छोटे project में भी बाहर से attack होने का जोखिम बहुत बढ़ जाता है—यह इसका वास्तविक उदाहरण है
निष्कर्ष और इनसाइट्स
- DrawAFish.com केस दिखाता है कि वास्तविक सेवा संचालन में अक्सर नज़रअंदाज़ किए जाने वाले मूलभूत सुरक्षा उपाय कितने महत्वपूर्ण हैं
- ओपन सोर्स टूल्स और तेज़ डेवलपमेंट टूल्स पर निर्भर रहने पर भी टेस्टिंग, authentication, code review, password management जैसे बेसिक मुद्दों की जाँच आवश्यक है
- अचानक बढ़ी दृश्यता (जैसे Hacker News की top rank) के साथ attack surface और risk तेजी से बढ़ सकते हैं
- Postmortem को पारदर्शी तरीके से डॉक्युमेंट करने से भविष्य के समान startups या independent developers को व्यावहारिक security lessons मिलती हैं
3 टिप्पणियां
Hacker News टिप्पणी
मैं भी तेज़ी से काम करना सच में बहुत पसंद करता हूँ; कोड रिव्यू जैसी चीज़ों में लगे बिना सीधे-सीधे पुश करना मज़ेदार लगता है। लेकिन इस पोस्टमॉर्टम को देखकर समझ आया कि मेरा साइड प्रोजेक्ट बार-बार क्यों अटक जाता है — आखिरकार काम वास्तविक, थोड़ा बोर करने वाले execution तक पहुँचता है और वहीं रुक जाता है।
जिज्ञासा हो रही है कि कहीं यह Firebase तो नहीं था: शायद उन्होंने free tier ही इस्तेमाल किया, या किसी ने malicious तरीके से exploit करके सुबह उठते ही पाँच अंकों का बिल भेज दिया।
मैं 'Slurfish' घटना का सीधे शिकार होने वाला 'lucky' इंसान हूँ। सिक्योरिटी में काम करने की वजह से यह बहुत खुला-सा दिखा, फिर भी हँसी भी आई, और मुझे पता था कि HN पर कोई न कोई जल्द ही मदद के लिए सही समय निकाल ही लेगा। ऐसे vibe-coded प्रोजेक्ट के लिए यह इतना detailed पोस्टमॉर्टम सार्वजनिक होना अच्छा लगा। आजकल production में vibes का पीछा करने वाला code (vibe-coded) बहुत दिखता है, लेकिन छोटे से प्रोजेक्ट में भी इसे इतनी अच्छे से document करना सच में प्रभावित करने वाला है।
यह पोस्टमॉर्टम खास इसलिए भी रोचक लगा क्योंकि यह vibe-coded ऐप था। शायद Lego House में fish बनाने वाली प्रदर्शनी से शायद inspiration मिली हो। हाल ही में मैं वहाँ गया था और अपना बनाया fish दूसरी fish के साथ swim करता हुआ देखना सच में addictive था। Lego House Build-a-Fish YouTube वीडियो
किसी ने security vulnerability का इस्तेमाल करके real attack रोकने की कोशिश की—यह सच में surprising है।
vibe-coded का "S" शायद Security का shorthand है।
जब कोई पूरी तरह नया idea सोचता है, खुद build करता है, बहुत कुछ सीखता है, और प्रोफेशनल तरीके से अपनी failure को स्वीकारने के बजाय शर्मिंदा होता है—वही असली प्रोफेशनल है। अगर 100,000 डॉलर नहीं गए, network नहीं टूटा, और नौकरी नहीं गई, तो एक साल बाद हम इन सब पर हँसते हुए याद करेंगे।
अभी उस साइट पर swastika fish दिख रही थी, शायद किसी ने fish shape के अंदर डालकर filter bypass किया था। समस्या वाली image लिंक, अभी हटाया जा चुका है।
अभी किसी भी fish पर बिना authentication के vote किया जा सकता है (max 20/min/IP), और POST से इस API पर जा सकता है: vote API लिंक {"fishId":"xxxx","vote":"up"}
vibe-coded वेबसाइट के लिए पोस्टमॉर्टम लिखना मुझे सच में बहुत पसंद आया। कई लोग टेक्नॉलॉजी को बहुत गंभीरता से लेते हैं, और इतनी हल्की-फुल्की, मज़ेदार नज़र से देखना सच में fresh लगा; छोटे साइड प्रोजेक्ट के नज़रिए से यह बहुत interesting और meaningful लगा।