डेटिंग ऐप को हैक करने का अनुभव, और security researchers के साथ गलत व्यवहार
(alexschapiro.com)- Cerca Dating App में phone number-आधारित login और exposed API के मेल से एक खतरनाक स्थिति बनी हुई थी, जहाँ OTP response में authentication code शामिल था और इससे व्यक्तिगत जानकारी तक पहुँचा जा सकता था
api.cercadating.comपर app version header जोड़ने पर/docsकी openapi.json के जरिए endpoints सामने आ जाते थे, और कुछ requests से forced matching जैसी business logic तक बदली जा सकती थीuser/{user_id}valid user ID भर देने पर नाम, location, जन्मतिथि, school, phone number, email, profile status जैसी PII लौटाता था, जो OTP कमजोरी के साथ मिलकर account takeover तक ले जा सकता था- account access मिलने के बाद submitted users के लिए passport या ID जानकारी, selfie URL, और private messages तक पहुँचना संभव था; verification script से 6,117 users, 207 ID-info submitters, और 19 Yale student-marked users मिले
- इस कमजोरी की सूचना 23 फ़रवरी 2025 को Cerca को दी गई और 24 फ़रवरी को कॉल भी हुई, लेकिन 21 अप्रैल को disclosure के समय तक न तो आगे कोई जवाब मिला और न ही users को notification; सिर्फ patch होने की बात स्वतंत्र रूप से verify की गई
रिपोर्ट के बाद रुकी हुई प्रतिक्रिया
- Cerca Dating App में dating app security vulnerability थी, जिससे private messages, passport जानकारी, sexual preferences, और अन्य personal data उजागर हो सकते थे
- कमजोरी मिलने के बाद 23 फ़रवरी 2025 को Cerca टीम को email से रिपोर्ट भेजी गई, और अगले दिन video call में vulnerability, mitigation, और follow-up steps पर चर्चा हुई
- Cerca टीम ने समस्या की गंभीरता मानी, responsible disclosure के लिए धन्यवाद दिया, और vulnerability fix करने तथा प्रभावित users को सूचित करने का वादा किया
- इसके बाद 5 मार्च और 13 मार्च को fix और user notification plan पर update माँगा गया, लेकिन 21 अप्रैल 2025 को public disclosure तक कोई जवाब नहीं मिला
- disclosure से पहले vulnerability patch हो चुकी थी, यह बात स्वतंत्र रूप से verify की गई, और उसी आधार पर इसे public किया गया
OTP login से शुरू हुआ account access
- app केवल phone number पर code भेजने वाला OTP-आधारित login इस्तेमाल करता था
- network requests देखने के लिए iPhone app पर Charles Proxy का उपयोग करके app traffic intercept किया गया
- OTP trigger करने वाले response में one-time password सीधे शामिल था
- इस ढाँचे में किसी user का phone number पता हो तो उसके account तक पहुँचा जा सकता था
- account holder का phone number पता करने के लिए अलग रास्ते की ज़रूरत थी, और इसी वजह से API endpoint exploration शुरू हुई
OpenAPI दस्तावेज़ से सामने आए endpoints
api.cercadating.comपर directory fuzzer से paths enumerate किए गए- app-संबंधित headers के बिना site के किसी भी हिस्से तक पहुँचना संभव नहीं था
- Gobuster में वह header जोड़कर request भेजने पर
/docsendpoint मिला, जहाँopenapi.jsonउपलब्ध था - Burp Suite के match-and-replace feature से app version header और Charles Proxy से निकाला गया bearer token हमेशा जोड़ने के लिए सेट किया गया
- कुछ unprotected endpoints business logic को प्रभावित करते थे, और दो लोगों को force match कराने वाली request भी संभव थी
user profile और personal data exposure
user/{user_id}endpoint valid user ID मिलने पर कई तरह की personal information लौटाता था- response में यह जानकारी शामिल थी
- नाम, gender, interested gender, city, latitude और longitude
- school email और verification status, industry, job, जन्मतिथि, height
- school ID और school name, profile completion status
- nationality ID verification status, mobile और email verification status
- premium status, account active·suspended·onboarding status
- phone number, email, user ID, बचे हुए search count
- profile image, matching preferences, user prompts, mutual contact information, creation·modification time, age आदि
- Python script से valid user IDs ढूँढकर user data को बड़े पैमाने पर enumerate किया जा सकता था
- लौटाए गए phone numbers, OTP कमजोरी के साथ जुड़कर पूरे account access के लिए इस्तेमाल हो सकते थे
- OTP login के बिना भी user personal data exposed था
ID दस्तावेज़ और private messages तक पहुँचना
national_id_verifiedfield से पता चलता था कि system में passport या identity document जानकारी store की जाती है- ID-संबंधित response में यह जानकारी शामिल थी
verification_type:PASSPORTdocument_numberfront_side_urlback_side_urlselfie_url- status, ID, user ID
- यह जानकारी केवल logged-in user को दी जाती थी, लेकिन OTP कमजोरी के कारण किसी भी user के रूप में login करना संभव था
- जिन users ने submit किया था, उनके लिए किसी का भी ID data देखा जा सकता था, लेकिन लेखक ने कहा कि उसने वास्तव में ऐसा नहीं किया
- संभावित dating matches के साथ हुए private messages भी देखे जा सकते थे, और submit होने पर passport जानकारी तक पहुँचना भी संभव था
पुष्टि किया गया exposure का पैमाना
- एक तेज script से यह गिना गया कि कितने users की जानकारी मिल सकती है, कितने users Yale student के रूप में दर्ज थे, और कितनों ने ID जानकारी जमा की थी
- script valid user IDs गिनती रहती थी और अगर लगातार 1,000 IDs valid न मिलें तो रुक जाती थी
- यह तरीका इस संभावना को ख़ारिज नहीं करता कि और भी users मौजूद हों
- Cerca ने कहा था कि पहले हफ्ते में उसके users की संख्या 10,000 थी
- पुष्टि किए गए आँकड़े इस प्रकार थे
- 6,117 users
- ID जानकारी जमा करने वाले 207 users
- Yale student के रूप में चिह्नित 19 users
privacy promise और वास्तविक जोखिम
- Cerca की privacy policy कहती है कि वह “encryption और अन्य industry-standard measures से data की रक्षा करती है”
- वास्तविक vulnerability स्थिति से तुलना करने पर यह वाक्य भ्रामक हो सकता है
- exposed data में sexual preferences, private messages, और कई तरह की personal information शामिल हो सकती थी
- अगर कोई malicious user इस जानकारी तक पहुँचता, तो identity theft, stalking, और blackmail जैसी स्थितियाँ पैदा हो सकती थीं
- dating apps संवेदनशील data संभालते हैं, इसलिए app launch speed से ज़्यादा user data security को प्राथमिकता मिलनी चाहिए
1 टिप्पणियां
Hacker News की राय
यह ऐप कॉलेज छात्रों द्वारा बनाया गया काफ़ी शुरुआती स्तर का प्रोजेक्ट लगता है। यह सही है कि उन्हें security और communication practices ठीक से निभाने की पूरी कोशिश करनी चाहिए, लेकिन ऐसे ही मुद्दों पर बड़े VC-funded “बड़े लोगों वाली कंपनियों” को भी गड़बड़ तरीके से respond करते देखते हुए मैं इन्हें बहुत बेरहमी से घेरना नहीं चाहूँगा
https://georgetownvoice.com/2025/04/06/georgetown-students-c...
यह वैसा है जैसे किसी driver ने accident में किसी को मार दिया और बाद में पता चला कि उसके पास license भी नहीं था
मूल पोस्ट में कहा गया है कि उन्होंने February में Cerca team से संपर्क किया था, तो या तो यह launch day पर मिला flaw था या कोई अजीब structure है। किसी भी तरह, यह “दो महीने पुरानी vulnerability” और “दो महीने पुराना छात्रों द्वारा बनाया गया app/service” है
ऊपर से यह मज़े के लिए बनाई गई चीज़ नहीं, बल्कि commercial product है। In-app purchases में Cerca App $9.99, Cerca App 3 month $9.99, 10 Swipes $2.99, 3 Swipes $0.99, 5 swipes $1.99, 3 Searches $1.99, 10 Searches $3.99, 5 Searches $2.99 दिख रहे हैं
एक छोटी company के engineer के रूप में कभी-कभी मुझे अपनी personal liability की चिंता होती है। PCI या HIPAA लागू न होने वाले unregulated sectors में चलने वाली बहुत-सी companies हैं, और छोटे organizations में security को organization-level responsibility नहीं, बल्कि बस engineering concern मानकर किनारे कर दिया जाता है
Product team features पर, PM schedule पर, QA bugs ढूँढने पर focus करती है, और security के बारे में reasonable आवाज़ उठाने वाले लोग कम होते हैं। Engineer से board पर आए tasks खत्म करने से ज़्यादा उम्मीद नहीं की जाती। अगर timeline पर असर डाले बिना सुरक्षित बनाया जा सके तो अच्छा, वरना PM वगैरह से pressure आता है
“उसमें कितना time लगेगा?”, “असल में ऐसा होने का risk कितना है?”, “security बाद में कर लेंगे, पहले MVP customers को ship करते हैं” जैसी बातें सुननी पड़ती हैं। एक employee के तौर पर मैं employer के कहे काम कर रहा होता हूँ, लेकिन अगर hacking या data breach की वजह से company पर मुकदमा हो गया, तो क्या “मुझे पता होना चाहिए था” वाला अकेला व्यक्ति होने के कारण मुझे personally liable ठहरा दिया जाएगा?
हालांकि organization के size से परे, पूरी organization में security standards की कमी शर्मनाक है। लगता है अच्छे security practices ensure करने से पहले हमेशा नए features launch करना प्राथमिकता बन जाता है
हालांकि समझता हूँ कि startup में अगर developers सिर्फ एक-दो ही हों तो यह भी मुश्किल है। अगर मुझे लगे कि वे legal काम pursue नहीं कर रहे हैं, तो शायद मैं छोड़ दूँगा
यह आसान नहीं है, लेकिन अगर इसे गंभीरता से न लिया जाए तो यह ऐसा महत्वपूर्ण मामला है जो business को ही डुबो सकता है
security की कमी पर concerns उठाने वाले emails का record और manager के “चिंता मत करो” कहने वाले जवाब का record चाहिए। पता नहीं किस jurisdiction की बात है, लेकिन मुझे ऐसा कोई case नहीं पता जहाँ एक आम employee को data breach के लिए legally liable ठहराया गया हो। आमतौर पर data breach में किसी को भी वास्तविक परिणाम नहीं भुगतने पड़ते, company बस औपचारिक fine भरकर आगे बढ़ जाती है
एक researcher के तौर पर legal exposure घटाने के लिए दूसरा account बनाना या किसी दोस्त से profile बनवाकर access consent लेना ही शायद काफ़ी होता
enumeration vulnerability साबित करने के लिए सच में data scrape करने की ज़रूरत नहीं है। अगर मेरी ID 12345 है और दोस्त ने sign up करके 12357 पाया, तो यह साबित करने के लिए काफ़ी है कि किसी भी user की ID खोजकर profile access की जा सकती है
जैसे दूसरों ने कहा, vulnerability verify और disclose करने के लिए दूसरे users की इतनी personally identifiable information access करने की ज़रूरत नहीं है
personally identifiable information protected रहे, यह चाहना और फिर उसे scrape करके prove करना unnecessary और hypocritical है
लेख काफ़ी उलझा हुआ है। OTP-आधारित login में one-time password request के response में OTP जस का तस आ जाता है—यह हिस्सा ठीक से समझाया नहीं गया है, लेकिन शायद मतलब यह है कि यह api.cercadating.com/otp/ जैसी कोई API है, जहाँ अगर आप phone number का अंदाज़ा लगा लें तो उस नंबर के मालिक हुए बिना भी OTP code पा सकते हैं।
फिर वे कहते हैं कि एक script, जो 1,000 लगातार IDs में valid user न मिलने पर रुक जाती है, उससे 6,117 लोग, ID जानकारी डालने वाले 207 लोग, और Yale student होने का दावा करने वाले 19 लोग मिले। मुझे नहीं पता लेखक को अंदाज़ा है या नहीं कि यह कितना जोखिम भरा है। असल में यह काफ़ी हद तक वैसा ही है जैसे weev ने AT&T में breach किया था, और वह जेल गया था[0]
भले ही वह बड़ी company और बड़ा leak था, मैं शायद public में यह brag नहीं करता कि security hole का इस्तेमाल करके मैंने हज़ारों लोगों के data को unauthorized तरीके से access किया। मैं नैतिकता पर फैसला नहीं सुना रहा; मेरा मानना है कि security researchers को चेतावनी देने की गुंजाइश होनी चाहिए, लेकिन कानून security researchers के लिए काफ़ी प्रतिकूल है।
[0] https://en.wikipedia.org/wiki/Goatse_Security#AT&T/iPad_emai...
उस मामले के defendants पर basic personally identifiable information publish करने का आरोप भी था, जबकि यहाँ ऐसा हुआ हो, ऐसा नहीं दिखता।
एक दूसरे dating app में मेरे साथ भी कुछ ऐसा ही हुआ था, लेकिन वहाँ से आखिर तक कोई जवाब नहीं आया। Founder का ध्यान खींचने के लिए मैंने उसका profile text “contact me” जैसे वाक्य में बदल दिया, तो उन्होंने backup restore कर दिया।
कुछ साल बाद Instagram ad देखकर मैंने check किया कि issue अब भी है या नहीं, और वह अब भी था। Structure ऐसा था कि app-proxy-server से आसानी से मिलने वाले API endpoint का पता हो तो कोई भी full admin privileges पा सकता था और सभी messages, matches आदि तक access कर सकता था।
सोच रहा हूँ कि वापस जाकर एक बार फिर कोशिश करूँ या नहीं।
Passport या address जैसी sensitive information लेने से पहले लोगों को दो बार सोचने पर मजबूर करना चाहिए। ऐसी चीज़ को बस बच्चों ने app बना दिया कहकर टाला नहीं जा सकता।
Dating site हो तो API के लिए ID status पर verified/not-verified boolean या ‘not-verified’, ‘passport’, ‘drivers-license’ जैसे enum values return करना ही काफ़ी है। Client/UI में detailed information दिखाने की कोई वास्तविक ज़रूरत नहीं।
Airline app जैसे cases, जहाँ immigration purposes के लिए identity document चुनना पड़ता है, exception के तौर पर ज़्यादा जानकारी दिखा सकते हैं, लेकिन United app की तरह passport number के सिर्फ़ आख़िरी कुछ digits दिखाना काफ़ी है। Internal API से भी बस उतना ही भेजा जाए, यही उम्मीद है।
या फिर Apple या Google जैसी “government जैसी” जगहें भी इसे संभाल सकती हैं।
https://en.wikipedia.org/wiki/General_Data_Protection_Regula...
Request API response में OTP return करना समझ से बाहर है। ऐसा क्यों किया होगा?
Security के बारे में न सोचें तो यह बहुत plausible और obvious solution है। Dating apps में अनिवार्य रूप से बहुत personally identifiable information होती है, इसलिए ये बनाने के लिए सबसे risky तरह के apps में से हैं, और यह तो भयावह है।
Quick proof-of-concept या MVP में time बचाने के लिए stored model को API response के रूप में सीधे इस्तेमाल करना आम है, इसलिए यह आसानी से छूट सकता है।
जब Pinterest की नई API आई थी, तो OAuth integration इस्तेमाल करने वाले सभी apps को वह पूरी user information बाँट रही थी, और उसमें two-factor authentication secret भी शामिल था। मैंने report करके bounty ली, लेकिन ऐसी हरकतें उन बड़ी-company APIs में भी होती हैं जिन्हें इससे बेहतर पता होना चाहिए।
यह framework की वजह से हो सकता है। शायद database में डाले जाने वाले object को ORM या किसी और storage system से सीधे serialize करके HTTP response में लौटा देने वाला structure रहा होगा।
https://yaledailynews.com/blog/2025/04/24/yale-student-expos...
इस मामले पर एक और article है।
काश कोई ऐसा कानून हो जो personally identifiable information store करने को nuclear waste storage जितना जोखिम भरा बना दे। Leak हो तो company लगभग निश्चित रूप से bankrupt हो, और responsible लोगों को legal risk झेलना पड़े।
Incentives को सही तरीके से align करने का सबसे अच्छा तरीका मुझे यही लगता है। अभी users की information जितनी ज़्यादा हो सके store करने का downside लगभग नहीं है। Data breach? एक apology tweet डालो और आगे बढ़ो।
तभी शायद इस issue को उतना ध्यान मिलेगा जितना इसे मिलना चाहिए।
अगर “कोई जवाब नहीं मिला” है, तो यह बताने का समय है कि अगर चुप्पी जारी रही तो 90 दिनों बाद vulnerability सार्वजनिक कर दी जाएगी