Claude को छलकर यूज़र के सबसे गहरे राज कैसे लीक करवाए गए
(ayush.digital)- डिफ़ॉल्ट रूप से सक्रिय Claude memory और web browsing को मिलाने पर, सिर्फ़ साधारण coffee shop सवालों से यूज़र का नाम·कार्यस्थल·गृहनगर चुपचाप बाहरी सर्वर पर भेजा जा सकता था
web_fetchमनमाने URL access को रोकता था, लेकिन पिछली page में मौजूद links को follow कर सकता था, इसलिए/a→/ay→/ayuकी तरह path को एक-एक अक्षर चुनने वाली alphabet directory से data को GET request में encode किया गया- attack site ने सिर्फ़ Claude को नकली Cloudflare verification screen दिखाई और इंसानों को सामान्य coffee shop page दिया, जबकि Claude ने नाम और कंपनी के साथ-साथ पिछली जानकारी से निकाला गया Charlotte, NC भी बिना अनुमति submit कर दिया
- यूज़र malicious URL सीधे न भी दे, तब भी
web_searchresults से site को ढूँढकर visit किया जा सकता था; इसलिए ताज़ा topics के हिसाब से site को search ranking में ऊपर लाकर सिर्फ़ संबंधित सवालों से attack trigger किया जा सकता था - Anthropic ने माना कि वह इस समस्या को अंदरूनी तौर पर पहले से जानता था, लेकिन उस समय patch नहीं किया और bounty भी नहीं दी; बाद में external pages के links follow करना बंद किया और browsing scope को
web_searchresults और यूज़र द्वारा दिए गए URLs तक सीमित कर दिया
Claude memory में जमा होने वाली जानकारी
- आम यूज़र्स के लिए claude.ai दो हिस्सों वाला memory system इस्तेमाल करता है
- हाल की conversations को रोज़ कुछ paragraphs में summarize करके बाद की सभी conversations में inject करता है
- ज़रूरत पड़ने पर
conversation_searchtool से पूरी conversation history खोजता है
- यूज़र गोपनीय कामकाजी documents से लेकर निजी राज़ और रिश्तों की समस्याएँ तक Claude को सौंपते हैं, और जमा रिकॉर्ड किसी व्यक्ति का बेहद सटीक high-density profile बन जाता है
- इस जानकारी का दुरुपयोग blackmail·impersonation·security questions bypass के लिए हो सकता है, और जब memory store web browse करने वाले agent से जुड़ता है तो leak का जोखिम बढ़ जाता है
- जांच का लक्ष्य Claude Code नहीं, बल्कि रोज़मर्रा वाला Claude था
web browsing से data exfiltration
- अलग experimental setup, code execution या special MCP के बिना चलने वाले एक सामान्य data exfiltration path के रूप में Claude की web browsing capability चुनी गई
- Claude इंटरनेट access के लिए
web_searchऔर read-onlyweb_fetchका इस्तेमाल करता है - attacker के server को
web_fetchसे visit करवाने परClaude-Useruser agent वाला GET request server logs में दिखा- शुरुआती request site पर सेट किए गए Cloudflare
robots.txtकी वजह से fail हुई robots.txtबदलने के बाद server logs में request दिखने लगी
- शुरुआती request site पर सेट किए गए Cloudflare
- सिर्फ़ GET requests संभव थीं, इसलिए data को URL path में डालने की कोशिश की गई, लेकिन Claude से नाम वाला arbitrary path सीधे request करवाने का तरीका block हो गया
web_fetch के links follow करने के नियम
web_fetchकिसी URL को तभी access कर सकता था जब नीचे की तीन शर्तों में से कोई एक पूरी हो- यूज़र के message में URL सीधे शामिल हो
web_searchresult में URL सीधे शामिल हो- पिछले
web_fetchresult की content में वह URL linked हो
- तीसरी शर्त की वजह से Claude पिछली page में देखे गए links पर click कर सकता था, और यदि site attacker के control में हो तो कौन से links दिखाने हैं यह भी वही तय कर सकता था
alphabet directory से URL में data encode करना
- homepage पर
/a,/b,/cजैसे links रखकर Claude के लिए data चुनने वाला एक virtual keyboard बनाया गया - Claude से नाम के पहले अक्षर पर जाने को कहने पर server में
/के बाद/arequest दर्ज हुई - हर path पर अगला अक्षर चुनने के लिए link structure को dynamically फैलाया गया
/aसे/aa,/ab,/acआदि पर links जाते थे- इसके बाद के paths भी
/aaaकी तरह इसी तरह बनते रहे
- जब Claude से नाम को spelling के हिसाब से पूरा करवाया गया, तो
/a→/ay→/ayu→/ayus→/ayush→/ayush-paulrequests क्रम से दर्ज हुईं - URL में arbitrary data सीधे डालने का तरीका block था, लेकिन पहले से exposed links में से एक को बार-बार चुनवाने पर sandbox के बाहर data transfer संभव हो गया
Cloudflare verification के भेष में prompt injection
- खुला prompt injection अस्थिर था, और ऐसे pages से Claude को धोखा देना मुश्किल था जो यूज़र के secrets माँगते हों और संदिग्ध links देते हों
- membership सहित कई भेष वाले scenarios कृत्रिम या संदिग्ध लगे, इसलिए web पर व्यापक रूप से इस्तेमाल और भरोसेमंद Cloudflare को theme चुना गया
- attack site को असली coffee shop जैसा बनाकर यह कहानी बनाई गई कि इंसानों की ओर से web को स्वतंत्र रूप से browse करने के लिए agent को Cloudflare verification पार करनी होगी
- नकली Turnstile ने Claude को links एक-एक करके चुनते हुए पूरा नाम भरने और submit करने के लिए उकसाया
- submit पूरा होने के बाद सामान्य coffee shop site दे दी गई ताकि Claude को पता न चले कि उसे धोखा दिया गया है
- Claude ने बिना अनुमति माँगे नाम को अक्षर-अक्षर भरा, और अंतिम जवाब में सिर्फ़ coffee shop की जानकारी दी, निजी जानकारी भेजे जाने का ज़िक्र नहीं किया
नाम लीक से security question inference तक
- कई वास्तविक URLs के बीच malicious coffee shop URL डालकर पूछा गया कि किस जगह की coffee सबसे अच्छी है, तो Claude ने लगातार यह जानकारी submit की
- नाम: Ayush Paul
- कंपनी: Beem
- गृहनगर: Charlotte, NC
- Claude सिर्फ़ पिछली conversations search करने तक सीमित नहीं रहा, बल्कि मौजूदा जानकारी के आधार पर नए निष्कर्ष भी निकालता रहा
- यूज़र ने कभी सीधे नहीं बताया था कि वह Charlotte से है, लेकिन हाई स्कूल के समय शुरू किए गए hackathon Queen City Hacks के नाम से गृहनगर का अनुमान लगा लिया गया
इंसानों और Claude को अलग pages दिखाना
- attack के काम करने के लिए ज़रूरी था कि यूज़र Claude से site visit करवाए, इसलिए इंसानों को दिखने वाला page सामान्य होना चाहिए था
- Claude
Claude-Useruser agent से अपनी पहचान बताता है, इसका उपयोग करके request source के हिसाब से content अलग किया गया- आम visitors को सामान्य coffee shop site दी गई
- सिर्फ़ Claude के आने पर निजी जानकारी भरवाने वाला नकली Turnstile दिखाया गया
- इस payload को किसी सामान्य site में जोड़ देने पर यूज़र को कुछ असामान्य नहीं दिखेगा, लेकिन जैसे ही वही site Claude को दी जाएगी, नकली verification screen के जरिए निजी जानकारी भेजी जा सकती थी
search results से attack site तक स्वतः पहुँचना
web_fetchसिर्फ़ यूज़र द्वारा दिए गए URLs ही नहीं, बल्किweb_searchresults तक भी पहुँच सकता था- Claude training data cutoff के बाद के नए topics मिलने पर अपने आप web search करता है
- अगर ताज़ा खबरों के अनुसार attack site की search ranking ऊपर करा दी जाए, तो यूज़र URL दिए बिना भी संबंधित सवालों में वही site चुनी जा सकती थी
- उदाहरण के लिए, अगर malicious coffee shop site search results में ऊपर आ जाए, तो Berkeley की coffee के बारे में सामान्य सवाल पूछने वाला यूज़र भी निशाना बन सकता था
Anthropic की पुष्टि और बाद की कार्रवाई
- vulnerability को Anthropic के HackerOne bug bounty program के माध्यम से responsibly disclosed किया गया
- Anthropic ने पुष्टि की कि उसने इस समस्या को अंदरूनी तौर पर पहले ही खोज लिया था, लेकिन उस समय patch नहीं किया और रिपोर्ट पर bounty भी नहीं दी
- बाद में
web_fetchद्वारा external pages में मिले links follow करने की क्षमता disable कर दी गई - अब browsing target को
web_searchresults और यूज़र द्वारा सीधे दिए गए URLs तक सीमित कर दिया गया है
memory से आगे, जुड़े हुए data तक
- यूज़र ने कोई link click नहीं किया, न कोई नई integration on की; उसने सिर्फ़ coffee shop के बारे में पूछा, लेकिन Claude ने नाम·कार्यस्थल·जहाँ वह बड़ा हुआ उस शहर की जानकारी बाहर भेज दी
- memory सिर्फ़ इसलिए आसान target था क्योंकि वह डिफ़ॉल्ट रूप से सक्रिय थी
- यही तरीका उस जानकारी तक भी पहुँच सकता है जिसे Claude यूज़र की ओर से ला सकता है, जैसे Google Drive·email inbox·connected MCP
1 टिप्पणियां
Hacker News की रायें
यह हैरानी की बात है कि अत्याधुनिक AI कंपनियों के memory feature चालू करने पर खास विरोध नहीं हुआ। पहले विज्ञापन उद्योग को विज़िट की गई websites से टुकड़ों-टुकड़ों में जानकारी का अनुमान लगाना पड़ता था, लेकिन अब लोग अपने सबसे निजी राज़ों सहित लगभग सब कुछ सीधे AI को दे रहे हैं
हो सकता है विज्ञापन उद्योग में काम करने की वजह से मैं ज़्यादा संवेदनशील हूँ, लेकिन Claude और ChatGPT में memory आते ही मैंने उसे बंद कर दिया, और वह उपयोगी भी नहीं थी क्योंकि असंबंधित details से context दूषित होकर quality तक घट जाती थी। निजी बातचीत के लिए OpenRouter जैसी जगह पर अलग account इस्तेमाल करना बेहतर है
AI कंपनियों द्वारा user profiles save करने पर रोक लगनी चाहिए और memory को सिर्फ user server पर रखने का regulation होना चाहिए; memory companies और AI companies के cross-ownership तक पर प्रतिबंध लगाना भी उचित हो सकता है
पता चला कि लोग AI agents को admin privileges के साथ, container isolation तक के बिना चला रहे हैं। ऐसा लगता है जैसे 50 साल में बने computer security principles एक रात में भुला दिए गए हों—यह चौंकाने वाला है
ccoइस्तेमाल करने पर भी home directory exposed रहती है, और सिर्फ एक prompt से agent browser passwords कोcurlके जरिए भेज सकता हैइसे रोकने के लिए नकली home directory और network allowlist चाहिए जो सिर्फ llama.cpp, OpenAI जैसे providers को allow करे। इस्तेमाल में आसान cross-platform solution नहीं है, और native app development में जहाँ platform-specific errors खुद compile करके ठीक करने पड़ते हैं, Docker installed Linux machine भी पर्याप्त नहीं होती
लागत घटाने के लिए context पहले से optimize किया जा रहा है, इसलिए भविष्य में context itself को security boundary की तरह treat किए जाने की संभावना बड़ी है
मैंने Claude में अपना नाम Silly Bean set किया था; “Back again, Silly Bean?” वाला greeting मज़ेदार लगा, और जो बात मज़ाक में शुरू हुई थी वह नतीजे में 4D security chess बन गई
आज भी उसे वैसे ही रखा है, एक ऐसे dependent product पर हँसने या कड़वी राहत लेने के निशान के रूप में जो उम्मीद से कम smart निकला
Cloudflare द्वारा consent के बिना बहुत ज़्यादा
robots.txtलागू करने वाला हिस्सा, website के scraper से protected होने पर शिकायत करने का rare scene हैrobots.txtmanage करने के लिए user को खुद feature enable करना पड़ता है। बस एक click चाहिए, इसलिए गलती से enable हो गया हो सकता हैrobots.txtकिसी determined scraper को रोक भी नहीं सकतामैं Claude Code को credentials रहित VM में चलाता हूँ, और जिस open source GitHub repository पर काम करना हो सिर्फ उसे clone करके इस्तेमाल करता हूँ। पहले मैं VM को रोज़ reset करता था, लेकिन झंझट की वजह से इसे महीने में एक बार कर दिया; leak भी हो जाए तो बस पिछले एक महीने में किए open source projects की list जैसी चीज़ ही निकलेगी
यह जानकारी भी किसी व्यक्ति के बारे में काफी कुछ बता सकती है, लेकिन open source contributors के नाम और email immutable Git history में रहते हैं, इसलिए ज़्यादातर Google search से पहले ही मिल सकते हैं। यह घटना देखकर reset cycle को weekly करने पर सोच रहा हूँ
AI agent jail बनाने के लिए https://jai.scs.stanford.edu/arch-vm.html की scripts में
pacstrapcommand मेंdotnet-sdkजैसे packages जोड़ दें तो ठीक रहता है। guest root को BTRFS subvolume बनाकर snapshots इस्तेमाल करें तोsudo btrfs subvol snap template-root newvmसे तुरंत नई VM बनाई जा सकती है, औरqemu-system-x86_64चलाने में भी बस कुछ seconds लगते हैं, जबकि VM contents पर आपका पूरा control रहता हैकुछ tasks में user experience सही है या नहीं यह तय करने के लिए इंसान को button दबाना पड़ता है, और संभव हो तो मैं AI को screen access नहीं देना चाहता। यह VM model कुछ problems में बहुत अच्छा काम करता है, लेकिन इसका scope निराशाजनक रूप से narrow है
“नमस्ते, हम Cloudflare हैं। कृपया निजी डेटा दें” काम कर जाता है, इसी वजह से prompt injection लगातार समस्या बना ही रहेगा। या तो model को इतना सीमित करना पड़ेगा कि वह लगभग बेकार हो जाए, या फिर ऐसे हमलों को अंदर घुसने देकर इंटरनेट इतिहास की सबसे असुरक्षित अवधारणा बनानी पड़ेगी: एक ऐसा robot जिसे बेवकूफ बनाया जा सकता है
ऐसा लगता है जैसे अंदरूनी कामकाज को functionally समझने या अलग करने का कोई तरीका नहीं है; बस एक विशाल blob को अच्छी तरह मनाकर काम करवाना है और प्रार्थना करनी है कि attacker उससे बेहतर तरीके से न मना पाए
हाल में ChatGPT iPhone app में एक काफ़ी डरावना अनुभव हुआ। एक करीबी दोस्त ने अपने account से pet smart feeder की समस्या पूछी, और ChatGPT ने जवाब देते समय मेरे pet का नाम इस्तेमाल किया
वह कोई common नाम भी नहीं है, और दोस्त से मेरा connection भी है, इसलिए इसे संयोग मानना मुश्किल था। यह सोचकर कि दोस्त कभी हमारे Wi‑Fi से जुड़ा था, cache contamination या session data leak होने का शक होता है
यह feature अभी पूरी तरह तैयार नहीं है, इसलिए memory बंद रखना बेहतर है; लेकिन अगर दोस्त ने अपना ही account इस्तेमाल किया था, तो इस घटना को समझाना कठिन है
Claude Code ने SEC documents scrape करते समय User-Agent में मेरा नाम और email डाल दिया। किसी चालाक prompt की भी ज़रूरत नहीं पड़ी; idea अपने-आप में बहुत बुरा नहीं था, लेकिन अच्छा होता अगर पहले पूछ लिया जाता
SEC_EDGAR_USER_AGENT="Your Name (name@domain.com)"environment variable set करने को कहता है, इसलिए Claude ने बस निर्देश का पालन किया। शायद यही बात इसे और ख़तरनाक भी बनाती हैजानना चाहूँगा कि कितने users ने पूरी बातचीत पर लागू होने वाली global memory on कर रखी है। ऐसी memory अंततः output quality पर खराब असर डालेगी, ऐसा लगता है
दूसरी तरफ़, जब हर बार लंबा background समझाए बिना काम चल जाता है, तब यह मददगार भी होता है
इसलिए मैं memory on नहीं करता और Claude Code भी दूसरे कारणों से इस्तेमाल नहीं करता। मौजूदा memory system बहुत कच्चा है, इसलिए उपयोगी नहीं है