- Arc ब्राउज़र के Boosts और Firestore rules की समस्या एक साथ मिलकर ऐसी स्थिति बना रही थी, जिसमें हमलावर पीड़ित के अकाउंट से मनमाना JavaScript वाला Boost जोड़ सकता था
- Firebase authentication और Firestore के उपयोग की पुष्टि Frida hooking से हुई, और
preferences,users,user_referrals,boostscollections तक पहुंच का flow सामने आया - यह भेद्यता इसलिए पैदा हुई क्योंकि Boost लागू करने का लक्ष्य
creatorIDसे तय किया जा रहा था, जबकि हमलावर अपने Boost document काcreatorIDकिसी दूसरे user ID में बदल सकता था - पीड़ित का user ID
user_referrals, सार्वजनिक Boosts केboostSnapshots, साझा Easels आदि से हासिल किया जा सकता था, और पीड़ित के target site पर जाने पर malicious Boost चल सकता था - The Browser Company ने patch के साथ $2,000 का bounty दिया, और CVE-2024-45489 आवंटित होने के बाद Firebase usage कम करने, security audit और bug bounty program चलाने की योजना बनाई
Arc के cloud features और Firestore का उपयोग
- Arc को इस्तेमाल करने के लिए account चाहिए था, और signup प्रक्रिया में Firebase authentication इस्तेमाल होने की पुष्टि हुई
- शुरुआती network observation में दूसरी requests दिखी नहीं, लेकिन Easels sharing feature देखने पर Firestore के उपयोग की संभावना सामने आई
- Easels एक whiteboard-style interface है, जिसे दूसरों के साथ share करने पर web पर देखा जा सकता है
- Firestore एक database-as-a-backend service है, जिसमें अलग backend के बिना database security rules और client direct access से features बनाए जा सकते हैं
- Firestore security rules की कमजोरी वाले पुराने उदाहरण के रूप में Firewreck का उल्लेख किया गया
Firebase calls की पुष्टि कैसे की गई
- Firebase का Swift SDK system proxy settings को फॉलो नहीं करता था, इसलिए mitmproxy की जगह Frida script से संबंधित calls dump किए गए
- script ने Objective-C classes की Firestore calls को hook किया
FIRCollectionReference["- documentWithPath:"]FIRQuery["- queryWhereField:isEqualTo:"]FIRFirestore["- collectionWithPath:"]getDocuments,addSnapshotListener:,getDocumentजैसे execution methodsupdateData,setDataseries के document write methods
- Arc चलाते समय Firestore paths और queries के ये प्रकार देखे गए
preferences/{userID}preferences/{userID}/stringValues/...users/{userID}user_referralsमेंinviter_id == {userID}queryboostsमेंcreatorID == {userID}query
- इस structure में Arc कुछ settings, base user object, referral info और Boosts को Firestore में store कर रहा था
Boosts attack path क्यों बने
- Arc Boosts ऐसी feature है जिससे user वेबसाइट को customize कर सकता है
- element blocking
- font change
- color change
- custom CSS
- custom JavaScript
- Boosts Firestore में store होते हैं, और Arc browser किस Boost को लागू करे यह
creatorIDfield से query करके तय करता है - हमलावर ने अपने account में Google.com के लिए Boost बनाया और फिर Firestore document के कुछ parameters बदलकर test किया
creatorIDआधारित query की वजह से दूसरे users के Boosts सीधे query नहीं किए जा सकते थे, लेकिन अपने Boost document काcreatorIDदूसरे account के user ID में बदला जा सकता था- दूसरे account के साथ test करने पर, पीड़ित के computer से Google.com खोलते ही हमलावर का बनाया Boost लागू हो गया
Attack chain और user ID हासिल करना
- अंतिम attack flow इस तरह था
- पीड़ित का user ID हासिल करना
- हमलावर के account से इच्छित payload वाला malicious Boost बनाना
- Boost document की
creatorIDfield को पीड़ित के user ID में बदलना - पीड़ित target website पर जाए तो malicious Boost execute हो जाना
- यह भेद्यता इसलिए संभव हुई क्योंकि Arc Boosts में arbitrary JavaScript शामिल हो सकता था, वह Firestore में store होता था, और उसका apply target
creatorIDfield से तय होता था - पीड़ित का user ID पाने के कई रास्ते थे
user_referrals: किसी को Arc पर invite करने या किसी से referral मिलने परuser_referralstable से दूसरे पक्ष का user ID मिल सकता था- सार्वजनिक Boosts: JavaScript के बिना Boosts share किए जा सकते हैं, और Arc Boosts public site के
boostSnapshotsमें creator user ID शामिल होता था - Easels: share किए जा सकने वाले whiteboard feature के जरिए भी user ID मिल सकता था
Patch और disclosure timeline
- The Browser Company आम तौर पर bug bounty नहीं चलाती थी, लेकिन इस भेद्यता के लिए $2,000 USD दिया गया
- भेद्यता की timeline इस प्रकार थी
- 25 अगस्त 5:48pm: Arc co-founder Hursh से Signal पर पहला संपर्क
- 25 अगस्त 6:02pm: Hursh के Arc account पर vulnerability PoC चलाया गया
- 25 अगस्त 6:13pm: encrypted format में details share करने के बाद Slack channel में जोड़ा गया
- 26 अगस्त 9:41pm: vulnerability patch और bounty payment
- 6 सितंबर 7:49pm: CVE-2024-45489 आवंटित
- इसके बाद Arc ने इस मुद्दे पर अपना लेख CVE-2024-45489 incident response प्रकाशित किया
Privileged pages पर execution और privacy conflict
- Boosts भले client पर बनाए न जा सकें, फिर भी वे दूसरे protocols पर execute हो सकते थे
settingspage को target करने वाला Boostchrome://settingsपर चल सकता था, जिससे privilege escalation हो सकता था- साइट विज़िट के समय यह Firestore query होती थी
boostscollection मेंcreatorID == {userID}औरhostPattern == "www.google.com"शर्तों के साथ query
- यहां
hostPatternविज़िट की गई साइट को दर्शाता है, जो Arc की उस privacy policy से टकराता है जिसमें कहा गया था कि Arc को यह पता नहीं होता कि user कौन-सी साइट विज़िट कर रहा है
Arc के follow-up कदम
- Arc ने इस भेद्यता और नए features के संदर्भ में Firebase से दूर जाने की दिशा में बदलाव शुरू किया
- Arc के अपने summary में ये कदम शामिल थे
- issue fix की पुष्टि
- client side पर Boosts disable करने की सुविधा जोड़ना
- मौजूदा Firebase ACL rules का internal audit
- security issue response protocol बनाना
- Arc की internal discussion में साझा किए गए अतिरिक्त कदम ये थे
- v1.61.1 update में privacy issue fix
- नए features और products में Firebase का उपयोग बंद करना
- उस version के लिए external security audit
- भविष्य की vulnerabilities के लिए bug bounty program शुरू करना
1 टिप्पणियां
Hacker News की रायें
मैं Hursh हूँ, Arc बनाने वाली The Browser Company का co-founder और CTO. असल में कोई user प्रभावित नहीं हुआ और हमने तुरंत patch कर दिया, लेकिन हमें लगता है कि इस vulnerability की संभावित गंभीरता अस्वीकार्य थी
तकनीकी विवरण, आगे के सुधारों की योजना, Firebase से दूर जाने और औपचारिक bug bounty program बनाने की बात यहाँ संक्षेप में लिखी है: https://arc.net/blog/CVE-2024-45489-incident-response
vulnerability खुद और देर से हुई communication—दोनों के लिए सच में माफ़ी, और निराशा·गुस्से·हौसला बढ़ाने समेत feedback की वजह से हमें बेहतर करने की ज़िम्मेदारी और महसूस हुई
पूरा response ऐसा लगता है जैसे तभी react करते हैं जब मामला काफ़ी शोर मचा दे
मैं ऐसा browser इस्तेमाल नहीं करना चाहता जिसे बनाने वाली company user security को इतना हल्के में लेती हो. पक्का नहीं, लेकिन इस level की गंभीरता वाला exploit शायद black market में इससे कहीं ज़्यादा महँगा बिक सकता था
vulnerabilities हो सकती हैं, लेकिन browsing data भेजना एक जानबूझकर किया गया design choice लगता है
मुझे लगता है कि यह CTO के resign करने लायक मामला है
सही दिशा पकड़ने का यह एक बेहतरीन मौका मिला है
यहाँ comments में लोग Firebase को बहुत दोष दे रहे हैं, लेकिन ऐसा लगता है कि वे असल में ठीक से न जानते हुए बातें दोहरा रहे हैं. मैं Firebase इस्तेमाल नहीं करता, लेकिन पहले इस्तेमाल करने के अनुभव से कहूँ तो यह न कोई edge case है, न ही solve करने में मुश्किल problem—यह तो बिल्कुल basic है
असली समस्या यह है कि API को client द्वारा भेजी गई “मैं कौन हूँ” वाली value पर भरोसा करने के लिए बनाया गया था. आखिरकार यह amateur mistake है, और शायद एक line के बदलाव से ठीक हो सकती थी. docs देखकर भी https://firebase.google.com/docs/rules/rules-and-auth#cloud-... में
request.authज़रूरी user ID(request.auth.uid) देता हैsecurity rules को गंभीरता से लेना चाहिए, और वे असल में defense की एकमात्र line हैं
खुद authentication बनाओ या न बनाओ, core बात एक ही है: client पर कभी भरोसा मत करो
firestore.rulesकेmatchstatement के अंदर नीचे वाला rule डालने जितना ही था. Firebase Firestore security के beginner-level docs में यही बात सीधे मिलती हैclick की हुई जगह की तरफ दौड़कर आने वाली छोटी pixel art cat मुझे सच में बहुत पसंद आई. आजकल कम दिखने वाली मज़ेदार और creative छोटी चीज़ थी, और एक reminder जैसी लगी कि अगर हम चाहें तो internet भी इतना आनंददायक space हो सकता है
prefers-reduced-motionका सम्मान कर रहा है और वह setting हो तो इसे display नहीं करता. जो चाहते हैं उन्हें मज़ा देना और जिन्हें पसंद नहीं उन्हें परेशानी से बचाना—बहुत अच्छा handling हैhttps://en.wikipedia.org/wiki/Neko_(software)
sudo apt install onekooneko &अपनी seat से दूर गए colleague के computer पर gift करने के लिए अच्छा है
इस लेख के मुताबिक Arc में account अनिवार्य है, और वह आपके visit किए हर page का hostname और user ID Google Firebase को भेजता है। तो क्या Arc अभी इस्तेमाल हो रहे browsers में सबसे कमजोर privacy वाला browser नहीं बन जाता?
सच में शानदार bug है। Firebase जैसी backend services के security rules में कुछ अजीब defaults होते हैं जिन्हें समझाना मुश्किल है। अगर मैं खुद API बनाता, तो इस case के
boostजैसे record काuserIdrequest payload से नहीं लेता, बल्कि session के user ID पर set करताएक certain level से ऊपर का developer protected API route में client से अपने
userIdहोने का दावा करने वाली value pass कराने के बारे में आम तौर पर सोचता ही नहीं। दूसरी ओर, security rules में actual programmed use से अलग, system का misuse किए जा सकने वाले हर तरीके की कल्पना करनी पड़ती हैसही solution शायद हर field के लिए default deny permissions रखना है। तब कम से कम owner field को writable करने के लिए explicit करना पड़ेगा, और इस object को किसी दूसरे user को transfer करने के impact के बारे में भी सोचना पड़ेगा
हैरानी होती है कि यह vulnerability कितनी बेवकूफाना है। arbitrary code execution करने के लिए सचमुच बस किसी और का user ID भेजना है, और वह ID हासिल करना भी काफी आसान है
मैं FAANG में काम नहीं करता, और एक ऐसी company में काम करता हूं जो एक घटिया product बनाती है जिसकी असल में जरूरत भी नहीं, लेकिन मैं भी ऐसा bug नहीं बनाऊंगा। फिर ये लोग browser बनाने की बात करते हैं, और उसके साथ आने वाली security expertise और नैतिक जिम्मेदारी भी उठाना चाहते हैं?
post title में Arc होना चाहिए ताकि Arc इस्तेमाल करने वाले या Arc users को जानने वाले लोग इसे बेहतर पहचान सकें
सच कहूं तो मुझे strongly लगता है कि title “Arc browser का fundamental bug (CVE 123-4567)” जैसा होना चाहिए
दुनिया में कई गंभीर security vulnerabilities ऐसी होती हैं जो समझने लायक तरीके से बन जाती हैं, और अगर responsibly handle करके fix कर दिया जाए तो माफ की जा सकती हैं
लेकिन यह वैसा case नहीं है। personally यह reputation खराब कर देने लायक अक्षमता दिखाता है, और मुझे फिर कभी Arc न इस्तेमाल करने का फैसला कराने के लिए काफी है
aug 25 5:48pm: Signal encrypted channel पर Arc co-founder Hursh से पहला contactaug 25 6:02pm: Hursh के Arc account पर vulnerability proof of concept runaug 25 6:13pm: encrypted format में details disclose करने के बाद Slack channel में add किया गयाaug 26 9:41pm: vulnerability patch, bounty paidsep 6 7:49pm: CVE assigned (CVE-2024-45489)sudden first contact से fix deploy होने तक 4 घंटे, यह काफी अच्छा है, भले ही fix simple रहा हो। correction: date बदल गई थी, तो असल में 28 घंटे थे। फिर भी decent है, और first contact के 30 मिनट के अंदर “हमारे Slack channel में आ जाइए” वाला response बहुत तेज है
browser जैसे important और personal product में, $50–60 million cash और $500 million valuation होने के बावजूद कोई business model न होना बड़ा red flag है। यह charity नहीं है, इसलिए किसी न किसी तरह किसी को cost चुकानी ही पड़ेगी
Firebase का इसे थोड़ा और idiot-proof न बना पाना भी अफसोसजनक है। और सच में सिर्फ $2,500? literally Arc के सभी users पर कब्जा किया जा सकता था; NSA होती तो कुछ और zero जोड़ देती
खासकर जब Supabase जैसे functional competitors regular DBMS और authentication model को wrap करने के तरीके पर हैं
share करने के लिए thanks। beta के पहले हफ्ते से Arc इस्तेमाल कर रहा हूं
लेकिन यह काफी concerning है कि उन्होंने इस bug और fix को social media पर कहीं mention नहीं किया। Arc इस्तेमाल करने का समय अच्छा रहा, लेकिन इस handling को देखकर लगता नहीं कि आगे continue कर पाऊंगा
इतनी बड़ी vulnerability के लिए $2,000 insulting amount है
शायद ऐसा इसलिए भी हो सकता है कि breach incidents पर regulators उन्हें punish नहीं करते