
ملف إعدادات Claude Code يكشف أسراراً في 1,122 نسخة GitHub عامة
وجدت Apiiro 1,122 نسخة عامة على GitHub لملف .claude/settings.local.json في Claude Code تحتوي على سر واحد على الأقل. ويمكن للملف حفظ الأوامر المُوافَق عليها حرفياً، بما في ذلك كلمات المرور ومفاتيح API.
قالت Apiiro إن بحثها في GitHub العام وجد 1,122 نسخة من ملف .claude/settings.local.json في Claude Code تحتوي على سر واحد على الأقل. ويمكن للملف حفظ كلمات المرور ومفاتيح API عندما يوافق المطورون على الأوامر مع خيار "نعم، ولا تسأل مرة أخرى". وأخبرت إحدى الشركات التي أبلغتها Apiiro أن مفتاحها كان لا يزال فعالاً؛ ولم يختبر الباحثون ما إذا كانت جميع الأسرار لا تزال تعمل.
كيف تُحفظ الأسرار
يطلب Claude Code، حسب وثائق الصلاحيات، الموافقة قبل تشغيل معظم أوامر shell افتراضياً. عندما يوافق المستخدم على أمر ويختار ألا يُسأل مرة أخرى، يحفظ Claude Code قاعدة سماح في .claude/settings.local.json داخل المشروع. وتعمل الأوامر المطابقة لاحقاً من دون مطالبة. ويمكن للقاعدة تغطية نمط مثل npm test * أو أمر واحد بالضبط. إذا كان الأمر بالضبط يحتوي على كلمة مرور أو رمز، فسيُحفظ السر أيضاً، بنص عادي. وأعادت Apiiro إنتاج السلوك مع Opus 5.5 وFable 5.1.
يحاول Claude Code إبقاء الملف خارج git. وتقول وثائق الإعدادات إن أول مرة يكتب فيها الملف في مستودع git، يضيفه إلى استثناءات git العامة للمستخدم. وتبقى هذه الحماية في إعدادات git لمستخدم واحد على كمبيوتر واحد، ولا تساعد ملفاً أُضيف مسبقاً، كما قالت Apiiro. ولا يضيف Claude Code الملف أبداً إلى ملف .gitignore الخاص بالمشروع، لذا لا تنتقل الحماية مع المشروع.
ما وجدته Apiiro
وجد بحث Apiiro 104,185 نسخة من الملف في 103,617 مستودعاً عاماً على GitHub. وحوالي 1.1%، أو 1,122 نسخة، تحتوي على سر واحد على الأقل، وتضم معاً 1,379 سراً مختلفاً. وأكثر من ثلثها يفتح قاعدة بيانات مباشرة، بما في ذلك 379 كلمة مرور لقواعد البيانات. وتشمل أخرى 43 تسجيل دخول SSH لخوادم عامة، و42 رمزاً لـ GitHub وGitLab وnpm، و23 مفتاح AWS. ومن بين المالكين 63 منظمة، معظمها شركات برمجيات من جميع الأحجام.
اعتباراً من الإثنين، كان كل ملف يحتوي على سر لا يزال في الفرع الافتراضي لمستودعه، وفي نصف تلك المستودعات كان موجوداً هناك منذ 217 يوماً على الأقل. تحتوي الإصدارات الأقدم على 734 سراً إضافياً عبر 509 مستودعات ليست في أي نسخة حالية. وتوجد الأسرار أيضاً في 298 من 76,011 نسخة من ملف .claude/settings.json المشترك. وبما في ذلك تلك النسخ، والإصدارات الأقدم، وسجلات محادثات الوكيل المحفوظة، يبلغ الإجمالي 2,539 سراً عبر 1,994 مستودعاً.
ماذا تفعل
توصي Apiiro بالبحث في منظمات GitHub عن .claude/settings.local.json و.claude/settings.json وفحص سجل git لكل مستودع. ويوصي الباحثون بتدوير كل كلمة مرور ورمز ومفتاح حملتها الملفات يوماً ما قبل التنظيف. يجب على المطورين إيقاف تتبع الملف المحلي باستخدام git rm --cached .claude/settings.local.json وإضافته إلى ملف .gitignore الخاص بالمستودع. ويجب حذف كل قاعدة تحتوي على سر، والإشارة إلى الأسرار كمتغيرات من مدير أسرار، مثل $DB_URL. ويجب على المطورين الموافقة على أنماط مثل Bash(npm run:*) بدلاً من أوامر فردية. ولفرق الأمان، توصي Apiiro بمعاملة مجلدات الوكيل وملفات ذاكرة الوكيل كحاملة لأسرار وإضافتها إلى فحص الأسرار في pre-commit وCI.
تفوت الماسحات الشائعة للأسرار كثيراً من هذه الملفات. وشغّل الباحثون gitleaks وTruffleHog على كل نسخة دون خطوة التحقق. ومن بين 1,122 ملفاً يحتوي على سر، أشار gitleaks إلى 564 وأشار TruffleHog إلى 643، ولم يشر أي منهما إلى 215. معظم ما فات هو كلمات مرور كُتبت داخل الأوامر.
المصادر: The Hacker News
SiTech — تطوير ويب مدعوم بالذكاء الاصطناعي
نبني مواقع سريعة وعصرية وندمج الذكاء الاصطناعي في سير عمل الشركات. لديك مشروع أو سؤال؟ يسعدنا مساعدتك.