Secondo i ricercatori di sicurezza di Apiiro, Claude Code sta lasciando segreti nei repository pubblici di GitHub. Il problema nasce da un file di impostazioni locale, che finisce online senza che lo sviluppatore se ne accorga. Tra i dati trovati ci sono password di database, token API e accessi root. Conta per chiunque usi un assistente di programmazione con l'IA, perché un singolo commit distratto può rendere pubbliche credenziali ancora valide.
कुछ शब्द, तथ्यों में जाने से पहले। .gitignore फ़ाइल है जो Git को बताती है कि कौन-सी फ़ाइलें commit में सहेजनी नहीं हैं। Repository वह प्रोजेक्ट फ़ोल्डर है जिसे Git ट्रैक करता है। Segreto कोई credential है, जैसे पासवर्ड, API token या private key। Fork GitHub पर किसी दूसरे उपयोगकर्ता द्वारा बनाई गई प्रोजेक्ट की कॉपी है। Commit प्रोजेक्ट के इतिहास में बदलावों के एक समूह को सहेजना है।
Claude Code और GitHub पर क्या पाया गया?
इसकी जानकारी Ars Technica ने दी है, जो Apiiro के काम को रिपोर्ट करती है। शोधकर्ताओं को 1,00,000 से अधिक ऐसे मामले मिले जहाँ Claude Code की स्थानीय सेटिंग्स फ़ाइल GitHub के public repository पर अपलोड हो गई थी।
इनमें से सभी में संवेदनशील डेटा नहीं था। केवल लगभग 1,100 फ़ाइलों में, जो 63 अलग-अलग संगठनों से थीं, API tokens, database पासवर्ड या private keys जैसे segreti शामिल थे। यह संख्या कुल के मुकाबले छोटी है, पर ये असली credentials हैं, उदाहरण नहीं।
फ़ाइल ऑनलाइन क्यों पहुँचती है?
जब उपयोगकर्ता किसी shell कमांड को «हाँ, और दोबारा न पूछें» विकल्प से मंज़ूरी देता है, तो यह चुनाव स्थानीय फ़ाइल .claude/settings.local.json में एक नियम बन जाता है। कभी यह नियम सामान्य पैटर्न के रूप में लिखा जाता है। पर अक्सर कमांड जैसा है वैसा ही सहेजा जाता है, उसकी हर चीज़ के साथ, जिसमें कोई भी credentials शामिल हो सकते हैं।
जब तक फ़ाइल कंप्यूटर पर है, जोखिम सीमित है, बशर्ते मशीन से छेड़छाड़ न हुई हो। समस्या तब शुरू होती है जब फ़ाइल commit में चली जाती है।
क्या .gitignore काफ़ी नहीं होना चाहिए?
सिद्धांत में तो होना चाहिए। Ars Technica के अनुसार Anthropic के दस्तावेज़ों में कहा गया है कि यह फ़ाइल डेवलपर के global .gitignore में जोड़ी जाती है, जिससे आमतौर पर उसका प्रकाशन रुक जाता है।
कमज़ोर कड़ी यह है कि यह नियम repository स्तर पर नहीं दिखता। अगर प्रोजेक्ट किसी दूसरी मशीन पर clone होता है, या कोई फ़ोल्डर बाद में repository बनता है, तो फ़ाइल गलती से अपलोड हो सकती है। Apiiro यह भी जोड़ता है कि कई मामलों में Claude Code खुद ही सेटिंग्स बदलावों को commit कर देता है, बिना उपयोगकर्ता के हस्तक्षेप के।
GitHub का आधिकारिक दस्तावेज़ इस अंतर को समझाता है। Repository की जड़ में मौजूद .gitignore, commit होने पर, प्रोजेक्ट को clone करने वाले हर किसी पर लागू होता है। वहीं ~/.config/git/ignore वाला global नियम केवल आपके कंप्यूटर पर चलता है।
क्या फ़ाइल हटाना ही समाधान है?
नहीं। Apiiro के अनुसार, फ़ाइलें खोजे जाने और repository से हटने के बाद भी segreti मूल प्रोजेक्ट के forks में बने रह सकते हैं, अगर उपयोगकर्ता सावधानी नहीं बरतता।
GitHub का दस्तावेज़ यह भी याद दिलाता है कि पहले से ट्रैक हो रही फ़ाइल को पहले git rm --cached NOME_FILE से tracking से हटाना होता है, और तभी exclusion नियम प्रभावी होता है। .gitignore में एक पंक्ति जोड़ने से इतिहास में मौजूद चीज़ें नहीं मिटतीं। इसलिए अगर कोई credential ऑनलाइन पहुँच गया है, तो उसे compromised मानकर बदल देना चाहिए।
सीमाएँ जो जानना ज़रूरी है
ये आंकड़े Apiiro के विश्लेषण से हैं, जो Ars Technica में रिपोर्ट हुआ है, और हमने इन आंकड़ों की स्वतंत्र पुष्टि नहीं की है। हमें नहीं पता कि मिली credentials में से कितनी अभी भी valid थीं, या क्या किसी तीसरे पक्ष ने उनका उपयोग किया। स्रोतों में Anthropic का Claude Code के व्यवहार में संभावित बदलावों पर कोई जवाब नहीं है। अगर कंपनी स्वीकृत कमांड सहेजने के तरीके में बदलाव करती है, तो तस्वीर बदल सकती है।
डिजिटल काम करने वालों के लिए क्या बदलता है
अगर आप Claude Code इस्तेमाल करते हैं, तो तुरंत जाँचें कि .claude/settings.local.json किसी repository में ट्रैक हो रही है या नहीं, भले ही वह private हो। कोई private प्रोजेक्ट public हो सकता है, या कहीं और clone हो सकता है। फ़ाइल को प्रोजेक्ट के .gitignore में जोड़ें और उसे commit करें, ताकि नियम सभी पर लागू हो। केवल अपनी clone पर फ़ाइल बाहर रखने के लिए GitHub .git/info/exclude का सुझाव देता है।
फिर कमांड में पासवर्ड लिखने की आदत है। इसके बजाय environment variables या किसी secrets manager का उपयोग बेहतर है। कंपनी में हर push से पहले स्वचालित secret scanning जोड़ना उपयोगी रहेगा।
हमारी राय
यह मामला केवल उपयोगकर्ताओं की लापरवाही नहीं, बल्कि एक डिज़ाइन की सीमा भी दिखाता है। जिस फ़ाइल में credentials हो सकते हैं, उसे वहीं बाहर रखना चाहिए जहाँ यह मायने रखता है, यानी repository में, न कि केवल किसी व्यक्तिगत configuration में। सारा बोझ उपयोगकर्ता पर डालना तब कम काम करता है जब टूल स्वयं commit करता है। फिर भी ज़िम्मेदारी हमारी भी है। साफ़ पासवर्ड वाला कमांड एक आदत है जिसे सुधारना चाहिए, चाहे AI सहायक हो या न हो। ये टूल जितनी तेज़ी का वादा करते हैं, secrets पर अनुशासन उतना ही ज़रूरी हो जाता है।
अक्सर पूछे जाने वाले सवाल
Claude Code की कौन-सी फ़ाइल में segreti होते हैं?
यह फ़ाइल .claude/settings.local.json है। इसमें वे नियम सहेजे जाते हैं जो तब बनते हैं जब आप किसी कमांड को «हाँ, और दोबारा न पूछें» विकल्प से मंज़ूरी देते हैं। कभी-कभी कमांड पूरा का पूरा लिखा जाता है, उसकी credentials समेत।
Apiiro को कितनी उजागर फ़ाइलें मिलीं?
GitHub के public repositories पर 1,00,000 से अधिक फ़ाइलें अपलोड मिलीं। लगभग 1,100, 63 संगठनों से, में API token, database पासवर्ड या private keys जैसे segreti थे।
क्या global .gitignore इस समस्या से बचाता है?
केवल आंशिक रूप से। यह आपके कंप्यूटर पर लागू होता है, पर repository में नहीं। अगर प्रोजेक्ट कहीं और clone होता है, या बाद में कोई फ़ोल्डर repository बनता है, तो फ़ाइल commit में पहुँच सकती है।
क्या repository से फ़ाइल हटाने से segreti मिट जाते हैं?
नहीं। Apiiro के अनुसार segreti प्रोजेक्ट के forks में बने रह सकते हैं। अगर कोई credential public हो गया है, तो उसे compromised मानकर बदल देना चाहिए।
Git द्वारा पहले से ट्रैक की जा रही फ़ाइल को कैसे बाहर रखूँ?
पहले git rm --cached NOME_FILE से उसका tracking हटाएँ। फिर .gitignore में नियम जोड़ें। पहला चरण छोड़ने पर नियम पहले से ट्रैक हो रही फ़ाइल पर असर नहीं करेगा।
Claude Code की सुरक्षा पर आने वाले महीनों में क्या देखें
सवाल यह है कि क्या Anthropic स्वीकृत कमांड सहेजने का तरीका बदलेगी। फ़िलहाल टूल के अपडेट पर नज़र रखना बेहतर है।
- Claude Code के release notes पढ़ें, ताकि देखें कि settings.local.json का प्रबंधन बदला है या नहीं, और हमारे संस्करण 2.1.319 वाले लेख से शुरुआत करें।
- अपने repositories के इतिहास में पहले से commit हुई .claude फ़ाइलें खोजें, और जो credentials दिखें उन्हें बदल दें।
- अपनी branch protection नियमों की समीक्षा करें, और हमारी GitHub pull request गाइड का उपयोग करें।




